ここで作った Voroni Fracture を、 Houdini 16.5 で 頂点アニメーションテクスチャとして出力して UE4 で再生する手順を紹介する。
使用したバージョン: Houdini 16.5.460
Game Development Toolset 1.10 Development
Unreal Engine 4.19.1
シーンファイルへのリンクは一番下にあり。
4. ピースのコントロール
3-1~6 では、Split ノード (split1) に番号をハードコード入力することで、For Each ループに入れるピースを決定していたが、他にも方法はいくつかある。
- マウスで選択
- Group Create ノードを使う
- TAB->Create Group を実行し、できた group1 を sort1 と split1 の間に挿入。group1 に表示フラグを指定。
- sort1 はバイパスしても良い。
- Base Group の Enable をオフにする。
- Keep in Bounding Regions を オンにする。
- Size を例えば 3, 0.8, 3 などとすれば、下図のように選択可能。
バウンディングボックスのマニピュレータを使って編集することも可能。 - split1 の Group に設定されている値を削除し、group1 を指定する。
- 表示フラグを dopimport1 に指定すれば、group1 で指定した部分だけが細かく破砕されたことが確認できる。
- TAB->Create Group を実行し、できた group1 を sort1 と split1 の間に挿入。group1 に表示フラグを指定。
5. 頂点アニメーションテクスチャ出力の下準備
破砕した RBD シミュレーションを頂点アニメーションテクスチャ (VAT) として出力するには、ビューポートで確認できるシミュレーションの見た目だけでなく、中でのデータの流れも整理する必要がある。
A. Unpack 追加
まず、VAT 出力する RBD シミュレーションはパックされた状態で、すべてのピースが同等の (パック関連の) アトリビュートを持っている必要がある。ここで作ったシミュレーションでは、split1 の二つの出力のうち、主出力 (左) には Unpack を追加したが、右にはしていない。そこで、右にも追加することで、Merge ノード (merge1) が、同じアトリビュートやデータタイプを持つことが出来るようにする。そして最後に setup_packed_prims またパックされる。
- unpack1 を Alt ドラッグしてコピーするか、 TAB->Unpack として新しい Unpack ノード (unpack2) を作成。
- unpack2 を split2 と merge1 を接続しているワイヤに挿入。
- normal1 にテンプレートフラグがついているならオフにする。
B. Connect Inside Edges をオンにする
上の状態で Houdini 内でシミュレーションすると、For-each を通らなかった方のピースが内側と外側でばらけてしまい、中身のないシェルのようになってしまう。そこで、
- assemble2
- setup_packed_prims
C. マテリアル情報を削除する
HDA 内で定義されているマテリアルは UE4 で VAT 再生する際には使わず、下記で作成するシェーダにカラーテクスチャをアサインするので不要。
- TAB->Delete Attribute を実行。
- 作成された attribdelete1 を testgeometry_rubbertoy1と switch1 の間に挿入。
- Primitive Attributes の項に shop_materialpath を設定 (右端の▽から Material (shop_materialpath) を選択。
- dopimport1 に表示フラグがついていることを確認。
- シーンを別名保存。
6. 頂点アニメーションテクスチャノードの作成、出力
頂点アニメーションテクスチャの出力には Game Development Toolset が必要。インストール方法はこちらを参照のこと。
- /out に移り、TAB->GameDev Vertex Animation Textures を実行。vertex_animation_textures1 ができる。
- Method を Rigid (Rigid Body Dynamics) に設定。
- Export Node を /obj/box_object1 に。
- Texture Resolution は 1024 のまま。
- とりあえず Render ボタンをクリックして出力を実行。
- シミュレーションのキャッシュを取っておらずに、120フレームの出力には1分半ぐらいかかり、ジオメトリファイル (.fbx) と移動 (pos) と回転 (rot) の2種類のテクスチャファイルが出力される。
移動テクスチャ
回転テクスチャ
7. UE4 にデータを持ち込む
Unreal Engine を実行。ここでは、新しいプロジェクト (MyProject7) を使っている。
- Content 以下に新しいフォルダを作成、VertexAnimTex などわかり易い名前をつける。
- このフォルダに出力したファイル (fbx とテクスチャ2枚) をドラッグ&ドロップ。
- FBX ファイルの設定
FBX ファイル (4_rbd_final_mesh) のアイコンをダブルクリック、開いたウィンドウで以下の設定を行う。 - テクスチャファイルの設定
次に2枚のテクスチャに対し同様の変更を行う。- 4_rbd_final_pos をダブルクリック、ウィンドウを開き、Compression Settings を HDR (RGB, no sRGB) から VectorDisplacementmap (RGBA8) に変更する。
- これにより使用メモリ量を削減できる。
- ウィンドウを閉じて変更を保存し、4_rbd_final_rot にも同様の変更を実行する。
- 4_rbd_final_pos をダブルクリック、ウィンドウを開き、Compression Settings を HDR (RGB, no sRGB) から VectorDisplacementmap (RGBA8) に変更する。
- マテリアルの設定
次にマテリアルの設定を行う。- default_material をVAT_rubberToy などと名称変更する。
- VAT_rubberToy をダブルクリック、ウィンドウを開くと、ノード二つによるシェーダネットワークが確認できる。
- Base Color に接続されている None を削除する。
- Houdini に戻り、/out/vertex_animation_textures1 を選択し、Sample UE4 Shader Code > Rigid Vertex Animation UE4 Code 以下にあるコードを Ctrl+A ですべて選択し、Ctrl+C でコピー。
- VAT_rubberToy ウィンドウに戻り、Ctrl+V でコードをペースト。
大量のシェーダノードがペーストされた。 - ペーストされたシェーダネットワークには適度にコメントがあり、これを元にペーストしたネットワークを VAT_rubberToy に接続していく。
- ウィンドウ左側の Details 以下の目のアイコンをクリック、Show All Advanced Details をオンにする。
- 同じく Details 以下の Num Customized UVs を 3 にする。
- 二つ下の Tangent Space Normal をオフにする。
- Multiply を Base Color に接続する。("This goes into Base Color" とコメントのついたノード)
- BlendAngleCorrectedNormals を Normal に 接続する。("This goes into Normal" とコメントのついたノード)
- TransformVector を World Position Offset に 接続する。("This goes into WorldPos Offset" とコメントのついたノードの右(下流)のノード)
- Mask (RG) を Customized UV1 に 接続する。("This goes into Custom UV1" とコメントのついたノード)
- Append を Customized UV2 に 接続する。("This goes into Custom UV2" とコメントのついたノード)
- ウィンドウ左側の Details 以下の目のアイコンをクリック、Show All Advanced Details をオンにする。
- ウィンドウを閉じて変更を保存する。
- マテリアルインスタンスの作成
- コンテンツブラウザの VertexAnimTex ディレクトリ上で、RMB->Materials & Textures->Material Instance を実行。作成されたインスタンスに vat_rbd_instance などと名前をつけ、ダブルクリックして開く。
- Parent に VAT_rubberToy を指定すると、パラメータが一気に増える。
- Scalar Parameter Values 以下のパラメータをすべてオンにする。
- Boudning Max
- Bounding Max_1
- Bounding Min
- Bounding Min_1
- Number of Frames
- speed
- Houdini に戻り、/out/vertex_animation_textures1 を選択し、Data For Realtime Shader 以下の値を上記に挿入(コピペ)していく。
つまり- BBOX MAX -> Boudning Max
- BBOX MAX 1 -> Bounding Max_1
- BBOX MIN -> Bounding Min
- BBOX MIN 1-> Bounding Min_1
- 119 -> Number of Frames
- speed はデフォルトでは 0.33 となっているが、120フレームを 24fps でシミュレーションした場合、フレームレート/フレーム数 (24/120) = 0.2 とすることで Houdini でのシミュレーションと同じ再生スピードを設定可能。
- rotation_texture と translation_texture をオンにして、rotation_texture には 4_rbd_final_rotを、translation_texture には 4_rbd_final_pos を設定する。
- ウィンドウを閉じて変更を保存する。
- 4_rbd_final_mesh をダブルクリックして再び開き、Material Slots に vat_rubberToy_instance をアサイン、これをビューポートにドラッグ&ドロップすれば、頂点アニメーションテクスチャが確認可能。
- toylowres.jpg をコンテンツブラウザにドラッグ&ドロップし、これを vat_rubberToy_instance の diffuse (最初にオンにする必要あり) にドラッグ&ドロップすれば、UE4内のシミュレーションにも色がつく。
まとめ
- シーンファイル: rbd_for_loop_vat.zip 11MB
- 3_rbd_final.hip: ここでの開始のファイル
- 4_rbd_final.hip: シミュレーション設定最後の時点のファイル
- 4_rbd_final_mesh.fbx: VAT 出力したメッシュ (FBX)
- 4_rbd_final_pos.exr: VAT 出力したテクスチャのうち移動情報
- 4_rbd_final_rot.exr: VAT 出力したテクスチャのうち回転情報
- toylowres.jpg: Rubber Toy HDA のカラーテクスチャ。取り出し方はこちら。
- 参照リンク
- 頂点アニメーションテクスチャ概要
- Game Development Toolset
- Game Development Toolset 概要 (SideFx)
- Vertex Animation Texture でPyroFXをUnrealEngineに (Born Digital サポート)
0 件のコメント:
コメントを投稿