Labs Vertex Animation Textures ROP / 作成したVATファイルをUE4で読み込む方法


こちらの記事では、Labs Vertex Animation Textures ROPノードの概要とパラメータについてご紹介します。


また、Labs Vertex Animation Textures ROPノードを使用して、HoudiniでVATおよび各ファイルを作成する方法や、Houdini Engine for Unreal Engineプラグインの読み込み、およびUnreal Engine 4でVATなど各種ファイルを読み込む手順を併せてご紹介します。

記事では、サンプルファイルも公開しています。ぜひ、ご覧ください。

SideFXLabsツールのインストール手順

SideFX Labsツールセットのインストール手順については、以下の記事をご参照ください。

●Houdiniの内部システムからの直接インストール
●Githubからの手動インストール

Labs Vertex Animation Textures ROPノードとは

頂点の位置や回転、法線の情報などがピクセルに色情報として格納された画像をVertex Animation Texture(VAT)と呼びます。
シミュレーションの結果からVATを生成し、ゲームエンジン内で再構築する際に必要となるデータ(exr、fbx、matなどのファイル)を一通り作成するためのROPノードです。

各パラメータについて

1 User Interface – Simple

1.Render
書き出しを開始します。

2.User Interface
インターフェースを変更します。Simpleモードでは、書き出しの設定を行う際に最低限必要となるパラメータを用意します。Normalモードでは、座標系やスクリプトを使用したPostRendering設定など、より詳細な設定を行うことが可能です。

3.Start/End
書き出しを行う開始フレームと終了フレームを設定します。

4.Render With Take
Takeを使用している際に、オプションを変更することができます。

※Takeは異なるパラメータのセットを保存し、それらを簡単に切り替えることができる機能のことです。詳細は、こちらをご参照ください。

5.Method
出力を行う際の計算方法を変更します。

6.Engine
選択したエンジンに対応したスケーリング、テクスチャタイプ、座標系の設定を行います。

7.SOP Path
ジオメトリを出力しているSOPノードまでのパスを指定します。

Data For Realtime Material
8.Frame Range
VATに出力するフレーム数を指定します。この値は、Renderボタンを押した際に、スクリプトによって自動で設定されます。設定される値は、終了フレームから開始フレームを引いた値になります。

9.Speed
Houdini内におけるアニメーションのフレームレートを設定します。この値は、スクリプトによって自動で設定されます。

10.Normalize data range to 0-1 space
テクスチャ圧縮を行う際に、正規化したデータを適用するためのオプションです。

11.Pack Pscale into Position Alpha
テクスチャスペースを節約するために、Position Mapのアルファチャンネルにpscaleデータを格納するためのオプションです。

12.Pad to Power of 2
この機能を有効にすると、すべてのテクスチャが各軸の2乗に最も近い値としてエクスポートされます。値が2乗に近いテクスチャを使用すると、GPU上でのテクスチャストリーミングが可能になります。

13.Double Textures (Higher Precision)
エンジンが8bitテクスチャに制限されている場合は、2つ目のテクスチャを使用することで、より高い精度を得ることができます。2枚目のテクスチャとは、データの補助として出力されるもう一枚のPosition Map(Position2 Map)のことです。

14.Target Texture Size
テクスチャの最大幅を指定します。
高さはアニメーションのフレーム数と、最大幅を超えて折り返された頂点の数によって決まります。

Path
15.Project
プロジェクトディレクトリを指定します。デフォルトではexportフォルダーの中に、出力したデータが保存されます。

16.Component
アセット名をここで指定した文字列によって上書きすることができます。デフォルトでは、Labs Vertex Animation Textures ROPノードのノード名が、出力するデータの名前の一部として使用されます。

17.Geometry
出力するジオメトリの保存場所を設定します。

18.Position
出力するPosition Mapの保存場所を設定します。

19.Position2
Double Texture (Higher Precision)が有効になっている場合に、出力する2枚目のPosition Mapの保存場所を設定します。

20.Rotation
Rotation Mapの保存場所を設定します。

21.Color
Color Mapの保存場所を設定します。

22.Realtime Data
Realtime Shaderデータとして、出力されるjsonファイルの保存場所を設定します。

また、“Method”パラメータを“Fluid(Change topology)”に設定した場合、“Target Prim Count”パラメータを設定できます。“Engine”パラメータを“Unity”に切り替えた場合、“Material”パラメータを設定できます。

1.Target Prim Count

流体表現を行う際に使用されるメッシュの最大数を指定します。

2.Material

Unity内で使用されるmatデータの保存場所を設定します。

更に、“Method”パラメータを“Sprite(Camera Facing Cards)”に設定し、“Engine”パラメータを“Unity”に切り替えた場合、“Width/Height”パラメータを設定できます。

1.Width/Height

スプライトの幅と高さを設定します。

2 User Interface – Normal

User Interface – Normalに切り替えた場合、より詳細な設定が可能になります。Parameter Viewの下部に、[Settings]、[Import Attribute]、[Export Attribute]、[Sample Shader Core]、[Scripts]の5つのタブが追加されます。

Settings Tab:

1.Initialize Simulation OPs
書き出し前に全てのシミュレーションを再計算します。

2.Reverse Normals
メッシュの法線を反転させます。

3.Convert to Image Format’s Colorspace
デフォルトで用意されるsRGBルックアップテーブル(LUT)が削除されます。

4.Raster Depth
[Initialize for Engine]ボタンをクリックしたときに自動で設定されます。
書き出す画像のビット深度を調整します。

5.Black/White Points
出力された画像ピクセル数の最小値と最大値を指定します。

6.BC 4Channel Split
異なるデータ形式のチャンネルを個別にレンダリングします。

7.Position Coord
[Initialize for Engine]ボタンをクリックしたときに自動で設定されます。
異なる座標系用にPositionコンポーネントを再配置します。

8.Rotation Coord
[Initialize for Engine]ボタンをクリックしたときに自動で設定されます。
異なる座標系用にRotationコンポーネントを再配置します。

9.Color Coord
[Initialize for Engine]ボタンをクリックしたときに自動で設定されます。
異なる座標系用にColorコンポーネントを再配置します。

10.Scale
出力したメッシュに対して、Pre-Scaling設定を可能にします。

11.Material
エンジンへ出力するマテリアルを指定します。

12.Name
出力するデータのファイル名を指定します。デフォルトでは、ROPノードの名前が指定されています。

13.Translate
出力したメッシュに対して、Pre-Tranformを可能にします。

14.Rotate
出力したメッシュに対して、Pre-Rotationを可能にします。

15.Scale
出力したメッシュに対して、Pre-Scalingを可能にします。

16.Pivot
出力したメッシュに対して、Pre-Pivotを可能にします。

また、“Method”パラメータを“Fluid(Change topology)”に設定した場合、“Equalize Edges”パラメータを設定できます。

1.Equalize Edges

出力するデータを圧縮するため、三角形メッシュのエッジが均等になるよう調整します。

Import Attribute Tab:

MethodをSoft(Constant Topology) 、またはFluid(Changing Topology)に変更した場合、以下のパラメータを設定することができます。

Soft (Constant Topology) & Fluid(Changing Topology)

1.Delta(P.xyz)

ROPネットワークに渡されるPosition Attributeを指定します。

2.Normal(N.xyz)

ROPネットワークに渡されるNormal Attributeを指定します。

MethodをRigid (Rigid Body topology)に変更した場合、以下のパラメータを設定することができます。

Rigid (Rigid Body Topology)

1.Delta(P.xyz)

ROPネットワークに渡されるPosition Attributeを指定します。

2.Rest(rest.xyz)

ROPネットワークに渡されるRest Attributeを指定します。

3.Rotation(orient.abcd)

ROPネットワークに渡されるRotation Attributeを指定します。

4.pscale(pscale.x)

ROPネットワークに渡されるPscale Attributeを指定します。

5.Pivot(pivot.xyz)

ROPネットワークに渡されるPivot Attributeを指定します。

MethodをSprite (Camera Facing)に変更した場合、以下のパラメータを設定することができます。

Sprite (Camera Facing Cards)

1.Delta(P.xyz)

ROPネットワークに渡されるPosition Attributeを指定します。

2.pscale(pscale.x)

ROPネットワークに渡されるPscale Attributeを指定します。

Export Attribute Tab:

[Import Attribute]タブ内のパラメータと同様に、Methodによって設定可能なパラメータが変更されます。

Soft (Constant Topology) & Fluid(Changing Topology)

1.Delta(P)

エンジンに渡されるPosition Attributeを指定します。

2.Normal(N)

エンジンに渡されるNormal Attributeを指定します。

Rigid (Rigid Body Topology)

1.Delta(P)

エンジンに渡されるPosition Attributeを指定します。

2.uv(uv.xy)

エンジンに渡されるUV Attributeを指定します。

3.Tiling Coord(uv2.xy)

エンジンに渡されるUV2 Attributeを指定します。

4.uv3(uv3.xy)

エンジンに渡されるuv3 Attributeを指定します。

5.Pivot(Cd.xyz)

エンジンに渡されるPivot Attributeを指定します。

Sprite (Camera Facing Cards)

1.Delta(P)

エンジンに渡されるPosition Attributeを指定します。

Sample Shader Code Tab:

[Engine:Unreal Engine 4]

“Engine”パラメータを“Unreal Engine 4”に設定した場合、以下の項目が表示されます。[Material Function]については、Methodに応じて適切なコードが生成されます。

1.Content Plugin

Unreal Engine 4のプラグインが用意されているフォルダを開きます。

2.Rigid Vertex Material Function

Unreal Engine 4でVATを動作させるためのMaterial Function ネットワークをコード化したものです。

[Engine:Unity]

“Engine”パラメータを“Unity”に設定した場合、以下の項目が表示されます。ShaderとMaterialにつきましては、Methodに応じて適切なコードが生成されます。

1.Unity Package Path

Unity Packageが用意されているフォルダまでのパスをコピーします。

2.Rigid Vertex Shader

Unity内でVATを動作させるためのShader Graphをコード化したものです。

3.Rigid Vertex Material

Unity内で使用するマテリアルをコード化したものです。

Scripts Tab:

1.Pre-Render

レンダリング開始前に一度行われる処理を記述します。

2.Post-Render

レンダリング終了後に一度行われる処理を記述します。

Labs Vertex Animation Textures ROPノードの機能

ここからは、Labs Vertex Animation Textures ROPノードの使用例についてご紹介します。
今回は、Houdini 18.0.592とUnreal Engine 4.25.3を使用しています。

こちらでは、下の動画のような簡単なシミュレーションを使用します。
また、解説に使用しているファイル等はこちらからダウンロードできます。

1.Vertex Animation Textureの作成

最初に、Houdiniを起動して、SideFX Labsツールが正常に読み込まれていることを確認します。

ここでは例として、Rigid Body シミュレーションの結果をVertex Animation Textureとして出力します。RBD Material Fracture SOPノードを使用して、Boxを分割して、落下させ破壊するシンプルな構成となっています。

Object階層でROP Networkノードを作成し、中に入ります。

ROP Networkノードの中で、Labs Vertex Animation Textures ROPノードを作成します。

MethodパラメータのプルダウンメニューからRigid (Rigid Body Topology)を選択します。

今回は、Unreal Engine 4のVertex Animation Textureを作成するため、[Engine]パラメータは、デフォルトの[Unreal Engine 4]を使用します。

また、Methodパラメータと出力先のEngineを設定した後、[Initialize for Engine]ボタンをクリックして、パラメータに数値やモードをセットします。
今回は、ほとんどデフォルトの設定を使用するため、パラメータ内の数値の変更は特にありません。

次に、シミュレーション結果を読み込んでいる一番最後のSOPノードまでのパスを指定します。ここでは、OUTと名前をつけたNull SOPノードが出力ノードなので、これを指定します。

パスの指定は、ノードをドラッグ&ドロップするか、Choose Operatorからノードを選択します。これで、シミュレーション結果をROPに読み込むことができます。

次に、データの保存場所を確認します。保存場所は、Projectパラメータに示されます。
デフォルトでは、“$HIP/export”と入力されるため、Hipファイルが保存されるフォルダに、[export]という名前のフォルダが新たに作成されます。

exportフォルダの中にVertex Animation Textureを含む各種ファイルが保存されます。

また、Projectパラメータより下にある[Geometry]や[Position]といった各パラメータ内に記述されている、chs(“_project”)は、Projectパラメータを示します。
同様に、chs(“_component”)は、Componentパラメータを示しています。
また、Componentパラメータは、デフォルトではROPノードの名前が割り当てられています。

次に、Vertex Animation Textureとその他の必要なデータを出力します。
パラメータの最上部にある、[Render]ボタンを押します。

出力されたデータを確認します。
エクスプローラーを開き、Hipファイルの保存場所と同じ場所に、exportフォルダが作成されていることを確認します。

更に、exportフォルダの中に入ると、[materials]、[meshes」、[textures]という3つのフォルダが作成されたことが確認できます。

シェーダーの設定に必要な値が記述されたjsonファイル、モデルの再構築に必要なfbxファイル、頂点の位置情報や回転情報が記録されたexrファイルがそれぞれ格納されています。
一般に、VAT(Vertex Animation Texture)と呼ばれるのは、exr形式で書き出される画像ファイルのことを指しています。

2.Unreal Projectの作成

Epic Games lancherから、Unreal Engine 4を起動します。

新規プロジェクトを作成するメニューが展開されます。今回は、[Games]を選択し、[Next]ボタンから次に進みます。

テンプレートの選択メニューに進みます。ここでは、[Third Person]を選択し、[Next]ボタンをクリックして、次に進みます。

プロジェクトの保存場所と、プロジェクトの名前を設定します。設定後、[Create Project]ボタンを押し、プロジェクトの作成と起動を実行します。

起動後のプロジェクトの保存は、画面左上の[File]から[Save All]で行うことができます。

3.プラグインの読み込み

Houdini18.0以降、ゲームエンジン用のプラグインがSideFX Labsのインストール時に、併せてインストールされました。また、Unreal Engine 4の場合、バージョン4.25からjsonファイルに記述された数値を、Material Instanceに対して自動的にセットされるワークフローの使用が可能になりました。

これを実行する場合は、プラグインをプロジェクトフォルダー内に配置する必要があります。

最初に、Labs Vertex Animation Texture ROPノードの[User Interface – Simple]を、[User Interface – Normal]に変更します。

Parameter Viewの下部に、タブが5つ表示されます。この中から、[Sample Shader Code]タブを開き、Content Plugin->の横にあるアイコンをクリックします。

プラグインが保存されているフォルダが自動で展開されます。4.24フォルダと4.25フォルダがありますが、こちらでは[4.25フォルダ]を開き、中にある[SideFX_Labsフォルダ]をコピーします。

新規で作成したUnreal Engineプロジェクトファイルの保存場所に、[Pluginsフォルダ]を作成し、その中にSideFX_Labsフォルダをペーストします。

プロジェクトファイルを起動します。左端のSource Panelを開きます。

Source Panel内に、[SideFX_Labs Contentフォルダ]が表示されています。
※表示されない場合は、Content Browserの右下にあるView Optionsからメニューを開き、[Show Plugin Content]にチェックを入れます。

これで必要なマテリアルやユーティリティが読み込まれました。

4.ファイルの読み込み

実際に、Unreal Engine 4に読み込みます。Content Browser内で新規フォルダを1つ作成します。Content Browser内で右クリックして[New Folder]を選択して、フォルダ名を[VAT_TEST]として作成します。

新規で作成したフォルダ内に、Houdiniから出力したexrファイルを読み込みます。

次に、Vertex Animation TextureをSideFX_Utilities_BPに読み込みます。SideFX_Utilities_BPは、プラグインの中に含まれている「ブループリント ビジュアルスクリプティング システム*」です。この中で、Vertex Animation Textureに対して圧縮設定を適用します。

*ブループリント ビジュアル スクリプティング システム:ノードベースのインターフェースを使用して、Unreal Editorに対して、ゲームプレイ要素を作成するというコンセプトに基づいたコンプリートゲームプレイスクリプティングシステムです。

ドラッグ&ドロップで読み込んだexrファイルを両方選択し、右クリックからメニューを表示します。その中にある[Scripted Actions]を選択し、更にその中にある[SideFX Set VAT Textures]を選択します。この操作で、Blueprintsへの適用が完了します。

次に、FBXファイルをStatic Meshとして読み込みます。

FBXファイルをインポートする際に、[FBX Import Options]が表示されます。ここでは、下画像のように、赤枠で囲まれた項目を変更します。その後、[Import]ボタンを押します。

次に、jsonファイルを読み込みます。同様に、ドラッグ&ドロップで読み込みます。
この際、[Data Table Options]が展開されます。ここでは、[Choose Data Table Row Type]から、[VAT_Material_Attributes]を選択して、[OK]ボタンを押します。

これによって、jsonファイルに記述されているHoudini側のフレームレートやモデルの位置情報などを半自動的*にMaterial Instanceに入力することができます(*この後に項目をセットします)。

■ご注意:この機能は、Unreal Engine 4のバージョン4.25から可能です。バージョン4.24では行うことができません。

■補足:読み込んだjsonファイル(Data Table)内の数値は、HoudiniのLabs Vertex Animation Texture ROPノードのParameter View上でも確認できます。

5.Material Instanceの作成

次に、Material Instanceを作成します。[SideFX_Labs_Content]フォルダから、[Material]フォルダを開きます。

今回、書き出したVertex Animation Textureは「Rigid」タイプなので、[M_VAT_Rigid]を選択して、右クリックから[Create Material Instance]を選択します。

※作成された、Material Instance (M_VAT_Rigid_Inst)は、分かりやすいように作業用のフォルダ(VAT_TEST)に移動することをお勧めします。

作成された[Material Instance (M_VAT_Rigid_Inst)]を開きます。

使用するパラメータを有効にするためチェックを入れ、[Save]ボタンを押して保存します。

[VAT_TEST]フォルダにあるjsonファイル上で右クリックし、[Scripted Actions]を選択後、[SideFX Set VAT Mat Instance]を選択します。
これにより、Material Instanceに数値が入力されます。

[M_VAT_Rigid_Inst]を開くと、数値が入力されたことが確認できます。
更に、Position MapRotation Mapをスロットにドラッグ&ドロップで割り当て、[Save]ボタンを押します。

Static MeshをViewportにドラッグ&ドロップします。Detailsにマテリアルを設定するためのスロット(Element 0)が表示されます。

Material Instance(M_VAT_Rigid_Inst)を、[Element 0]にドラッグ&ドロップで割り当てます。

これで、Viewport上のStatic Meshがアニメーションするようになります。


以上の操作で、Labs Vertex Animation Textures ROPノードから出力したシミュレーション結果をゲームエンジン内に取り込むことができます。

バージョン4.25からは、プラグインとして、既にマテリアル等が用意されているため、Material Function Codeをコピー&ペーストする操作を行う必要はありません。

また、UnityにVertex Animation Textureを読み込む流れや、Vertex Animation Textureの頂点情報とフレーム情報を反転する方法などについては、こちらの記事に掲載しています。
併せて、ご覧ください。