ここでは Skinning Converter を複数のメッシュに対して実行する手順を紹介する。単一メッシュへの操作はこちらを参照のこと。
- Houdini FX 18.5.640 (AutoDopNetwork 内でも作業するので FX が必須)
1. ベースメッシュの作成
Rubber Toy を元にソフトボディにするためのベースとなるメッシュを作成する。これには、足のめり込み部分を削除、PolyReduce ノードでポリゴン数を削減する。なお、Boolean 操作とそれに伴うポリゴン表示に関してはこちらのページを参照。
- Houdini を起動、ビューポートで TAB キーを押し、メニューから Test Geometry: Rubber Toy を選択、Enter キーを押して確定。
- ネットワークエディタには testgeometry_rubbertoy_object1 というノードが出来る。
- ネットワークエディタで testgeometry_rubbertoy_object1 をダブルクリックなり、選択して I キーまたは Enter キーで中に入る。
- そこには testgeometry_rubbertoy1 というノードがある。
- Boolean ノード (boolean1) を作成、testgeometry_rubbertoy1 の出力を boolean1 の左側の入力に接続する。
- Operation を Subtract から Intersect に変更。
- Detriangulate は All Polygons のまま。
- PolyReduce ノード (polyreduce1) を作成し、boolean1 の出力に接続。
- Percent to Keep を 20% ぐらいに。
- Preserve Quads をオンにする。
- polyreduce1 の出力に Clean ノード (clean1) を接続。 設定はデフォルトのまま。
- Clean ノードにより無効な形状データがあった場合でも削除される。
- clean1 の出力に Null ノードを接続。 ノード名を MESH とする。
なお、このような処理は、エフェクトメッシュに対し常に必要ということではない。処理中にボリュームに変換される場合や、Boolean ノードが別途使われている場合などは不要。
2. メッシュの複製
#1 で作成したメッシュをまずは複製する。
- /obj/testgeometry_rubbertoy1 の中で Sphere ノード (sphere1) を作成。
- Primitive Type を Polygon
- Uniform Scale を 4
- Frequency を 8 ぐらい
- sphere1 の出力に IsoOffset ノード (isooffset1) を作成。
- Uniform Sample Division を20くらいにする (いくつでも多分問題ない)。
- isooffset1 の出力に Scatter ノード (scatter1) を作成。
- Force Total Count を10にする。
- Copy to Points ノード (copytopoints1) を作成。
- scatter1 と copytopoints1 の間に Attribute Randomize ノード (attribrandomize1) を挿入。
3. name アトリビュートの追加
結論を先に述べると、Skinning Converter で複数のメッシュを別々に扱うためには Primtives に対し name アトリビュートを定義し、Use Name Attribute for Weighting をオンにすることが必要。ここでは、このための name アトリビュートを定義する。
- Enumerate ノード (enumerate1) を作成、attribrandomize1 と copytopoints1 の間に挿入。各値はそのまま。
- 重要なことは index というアトリビュートが Points に対し integer (整数) で定義されていること。
- copytopoints1 を選択、Attributes from Target を 4 にし、一番下に追加された部分で
- copytopoints1 の出力に Attribute Wrangle ノード (attribwrangle1) を追加。
- Run Over を "Primitives" に変更。
-
以下のコードを入力。
@name = "Toy-" + itoa(i@index);
- attribwrangle1 の出力に NULL を追加、名前を OUT としてこの部分は終了。
4. ソフトボディシミュレーションの設定
- Vellum シェルフから Vellum Strut Softbody を実行、ビューポートで Rubber Toy を選択して Enter キーで確定。
- シーンレベル (/obj) に戻ると、AutoDopNetwork と softbody_vellum の二つが追加されているのがわかる。
- /obj にいるまま、Create シェルフから Sphere ノードを Ctrl+クリック。sphere_object1 ができるので、その中に入る。
- sphere1 を選択、以下の操作を行う。
- Primitive Type を Polygon Mesh から Polygon に。
- Uniform Scale を 7 ぐらい
- Frequency を 6 ぐらい
- Collision シェルフの Static ツールをクリック。ビューポートで作成した球を選択して確定。
- AutoDopNetwork の中に入り、sphere_object1 を選択
- Display Geometry をオフにし、球が見えないようにする。
- Collisions > RBD Solver > Volume にある Invert Sign をオンにして、球の内側が衝突面となるようにする。
このムービーは FlipBook したものを QuickTime で出力し、Camtasia Studio で Motion Gif にしている。 - よって Noise Field ノード (noise) を作成。gravity1 の広い方の入力に接続。
noise1 の- Minimum Value を -3, -3, -3
- Maximum Value を 3, 3, 3
5. Skinning Converter (再)
再びながら、Skinning Converter の概要はこちらを参照のこと。
- シーンファイルを保存し、キャッシュファイルなどが分かり易いようにする (例: skinningconverter_multi.hip)
- /obj/softbody_vellum に入る。
- ネットワークの下から2番目にある vellum_io を選択、Save to Disk ボタンをクリック、シミュレーション結果を一度ファイル出力する。
- 出力が終わったら、Load from Disk トグルをオンにして、ここより下流のノードがシミュレーションを再計算せず、キャッシュを読むようにする。
- 1フレーム目に戻っているのを確認し、vellumpostprocess1 の出力に Labs SKinning Converter ノード (skinning_converter1) を接続。
- Use Name Attribute Weighting をオンにする。
- 前述の通り、これには name アトリビュートの定義が必須。
- Bone Deform ノード (bonedeform1) を作成、skinning_converter1 の出力3つを入力に順番に接続し、表示フラグを bonedeform1 に移す。再生すると以下の通り。
0 件のコメント:
コメントを投稿