2020/03/18

nHairを使用したセットアップ

こんにちは。
BACKBONEの田淵です。

今回は学生さん向けに、nHairを使用したセットアップのご紹介です。

学生さんにとって、シミュレーションは難しいように思われるかもしれませんが、
簡易的なものであれば意外と簡単です。

リグの組み合わせにより、手付けコントローラーとの共存も可能です。
シミュレーションを行うと、動きのクオリティが格段に上がるので、ぜひ試してみて下さい。

 

nHair

①ジョイントを作成します。

ジョイントはX軸が子供を向くように設定しましょう。
X軸を子供に向けておくと、
SplineIK機能のAdvanced Twist Controls(根元と先端のツイストを制御できる)の
設定がしやすくなります。

※Advanced Twist Controlsの説明に関しては割愛します。

 

②ジョイントにSplineIKを設定します。

 

③curve1を選択して、FX > nHair > Assign Hair System > New Hair Systemを実行します。

※curve1は、自動的にfollicle1の階層に移動します。

 

④再生すると、シミュレーションによりcurve2は動いていますが、
curve1は動いていないことが確認できます。

ノードエディターでSplineIKとnHairの接続関係を確認してみましょう。

上側がSplineIK、下側がnHairの入出力です。
nHairからの情報はcurveShape2へ繋がっているので、
nHairのシミュレーションによりcurveShape2が動きます。

一方で、ikHandle1にはnHairからの情報が繋がっていません。

 

⑤curveShape2の情報をikHandle1に出力することで、
nHairの情報がSplineIKに渡り、ジョイントが動くようになります。

curveShape2のWorldSpace[0]をikHandle1のinCurveに繋ぎます。
各機能の関係性は、下図のようになります。

 

⑥再生して、ジョイントが動くことを確認しましょう。

 

⑦次に衝突判定(コリジョン)の設定を行います。
衝突判定用のジオメトリを作成します。※今回はSphereを使用します。
Sphereを選択して FX > nCloth > Create Passive Collider を実行します。

 

⑧Curveに厚みを付けたい場合は、
nHairを設定した際に作成されたhairSystem1のCollide Width Offsetアトリビュートの値を上げます。

厚みを視覚的に確認したい場合は、
Solver DisplayアトリビュートをCollision Thicknessに変更してください。

 

⑨ジョイント全体を制御したい場合は、curve1を制御してください。
今回はジョイントの根元に別のジョイントを作成し、curve1をバインドしてみました。

 

⑩揺れ具合などの調整は、hairSystem1の各アトリビュートで行いますが、
タイミング毎に調整するのは大変です。

揺れを抑えるのみであれば、
BlendShapeのWeightアトリビュートを使用すると簡単に制御できます。

curve1とcurve2を選択してBlendShapeを設定し、
BlendShapeのWeightアトリビュート(0~1)を調整して制御します。

下図は、Weightアトリビュートを最初のフレームは1、
最後のフレームは0に設定してアニメーションした結果です。

 

⑪次に、オフセット用のジョイント(コントローラー)の設定を行います。

再生を止めて0フレーム目に戻し、初期ポーズにします。
joint1~7のジョイントを複製し、joint1Offset~7に名前を変更します。
このジョイントの親にSpaceノードをジョイントで作成します。

※Spaceノードについてはこちら

 

⑫一番親のjoint1Offset_spaceを選択し、
FreezeTransformationsを実行してRotateの値をjointOrientに移植します。

joint1~7とjoint1Offset~7_spaceのTranslateとRotateを繋ぎます。

このように設定しておくと、
シミュレーション結果をjoint1Offset~7_spaceにアニメーション情報として、
焼き付けることができます。

また、joint1Offset~7を使用してアニメーションの調整も行えます。
アニメーションキーであれば、レンダリング時のシミュレーションエラーや不具合などを防ぐことができます。

 

⑬ジオメトリをjoint1Offset~7にバインドして終了です。
髪の毛や尻尾など、ちょっとした揺れものに使えます。

 

まとめ

今回はjoint1Offset~7をジョイントで設定しましたが、通常はCurveで設定してオフセット用、
手付け用コントローラーとして使用することが多いです。

またローカルセットアップの概念が理解できている場合は、ジオメトリはjoint1Offset~7ではなく、
バインド用のジョイントを作成して、そちらにバインドすることを推奨します。

とてもシンプルな仕組みですが、アニメーションの表現力は格段に上がるので、
ぜひお試しください。

ではまた。

 

※免責事項※
本記事内で公開している全ての情報について、その完全性、正確性、適用性、有用性等いかなる保証も行っておりません。
これらの情報のご利用により、何らかの不都合や損害が発生したとしても、当社は何らの責任を負うものではありません。
自己責任でご使用ください。



ブログTOPへ戻る