VRChatでUnityのClothの認識を改めた話
●これまでの認識
Cloth最後に使ったのはいつだったか…2015年頃?
当時試してた際には
・ClothのMaxDistanceを0にしてもボーンウェイト効かなくなる
・そんな訳でCloth使うなら骨の子にメッシュを配置してColliderやMaxDistanceでClothの効きを調整する必要がある
・メリットとして、例えばスカートのような場所に使うとボーン&ダイナミックボーンで作った際の「骨の列の間から脚が貫通する」といった欠点が起きない
・デメリットとして、下手に急に動かすとメッシュが荒ぶって収集つかなくなることが起こりうる
と認識していました。
なのでUnity用モデルを作る際、スカートの物理をボーンかClothかどっちにするか。ワンピースな服とかだとボーンと併用できないから…という事でボーンでやっていました。Smooth Jointならボーンでも貫通しにくい作りに出来ることだし。
しかしVRChatだとセキュリティの関係か無制限にスクリプトAssetを使うことは出来ず、布系揺れものは
・Born入れてDynamicBorn使うか
・Cloth使うか
の二択 。
スリットのないロングスカートで、脚の貫通は極力避けたいとなると実質Cloth一択です。
そんな訳でロングスカートな衣装のハロウィンアバターを作る際に数年ぶりにClothを採用したのでした。
実際やってみると、UnityEditor上だと
・tretching StiffnessとBending Stiffnessを1前後
・WorldAccelerationScaleを0.05前後
にすると生地が堅い感じになる代わりに比較的安定した挙動でしたが。
VRChat上ではそれでも荒ぶってパンモロになる始末。
もはや諦めの境地でロングスカートなアバターは鬼門だなぁと思いながらも「Cloth難しいよねー」と話していました。
●VRChatで得た知見
ところが先日VRChatのバーチャル宴会内で『和服の袖にClothを使いつつボーンの影響も受けているアバター』を目にし、お話を伺ったところ。
・ClothのMaxDistanceを0にしてもボーンウェイト効かなくなる
の認識が間違ってたことが判明。
試しに琴葉姉妹ボディの袖でざっくり試してみた。
出来るやん…
何だ?だいぶ前だからUnity5の何処かで追加されたのに気づかなかったのか?それとも当時の検証が間違ってたのか?
なんにしても骨とClothの連携ができるのはとてもありがたい。
●改良
そうと判れば話は簡単。
こんな感じに脚骨のウェイトを付けて。
ClothのMaxDistanceをこんな感じにつけて。
すると…
先日のVR飲み会で伺った話を元に構造とセットアップの見直しを行った。だいぶスカート安定するようになった。#VRChat pic.twitter.com/wYx2GanRhp
— FoR (@For_K_Est) October 30, 2018
だいぶ改善されました。
昔ながらの脚にウェイトベタ打ちをベースにMaxDistance狭めのClothで味付けする感じのアプローチ。
バーチャル飲み会の良い収穫でした。
ちなみに普段脚が貫通しないスカートを作る際に使ってるのはこちら
DynamicBornのような縦に繋げた骨の計算だけでなく、横に並べた骨の列にも相互に影響を与えられるAssetです。