HoudiniのパーティクルシミュレーションをUnityのVFX Graphで再生したいと思います。
使用しているバージョンは次の通りです。
Houdini: 19.0.455
SideFXLabs: 19.0.455
Unity: 2021.2.9f1
Visual Effect Graph: 12.14
流れとしては次のように、Houdiniで作成したパーティクルシミュレーションの位置や色といった情報をテクスチャに書き出し、そのテクスチャをUnityで読み込んでVFX Graphで使用します。
- Houdiniでパーティクルシミュレーションの作成
- Houdiniでパーティクルシミュレーションのテクスチャ書き出し
- Unityでテクスチャの読み込み
- UnityでVFX Graphの作成
先に結果を載せると、上がHoudiniでのパーティクルシミュレーションで、下がそれをUnityのVFX Graphで再生したものになります。
1. Houdiniでパーティクルシミュレーションの作成
まず、HoudiniでPOPを使ってパーティクルシミュレーションを作成します。OUT_Particles
がテクスチャ書き出しの対象になりますが、今回はパーティクル位置にメッシュを配置したいのでcopytopoints1
でボックスを配置しています。
dotnet1
の中は次のようになっています。popwind1
でノイズを追加して、popwrangle1
で@nage
をもとに@pscale
を設定しています。
2. Houdiniでパーティクルシミュレーションのテクスチャ書き出し
作成したパーティクルシミュレーションをLabs Vertex Animation Texture
ROPを利用してテクスチャに書き出します。
Labs Vertex Animation Texture
ROPのパラメータを次のように設定します。
- Mode / Target Engine: Particle Sprites(Sprite) / Unity
- Input Geometry: (対象のジオメトリ)
-
Settings:
-
Export Custom Attributes:
- In Color: v
-
Export Custom Attributes:
-
Export:
- Include: Decide Individually
- Geometry: オフ
- Unity Material: オフ
今回は、Houdini側で用意しているVertex Animation Texture用のジオメトリやマテリアルは使用しないのでエクスポートをオフにします。また、パーティクルの色は不要なので、その代わりにカラー用のテクスチャにはv
アトリビュートを書き込んでいます。これはVFX Graph側でパーティクルの方向を表すために使用します。
設定が完了したら、Render Allを押してテクスチャを書き出します。
書き出したテクスチャには、それぞれ次の情報が格納されます。
-
/tex/{OS}_pos.exr: RGBに
P
、Alphaにpscale
-
/tex/{OS}_col.exr: RGBに
v
以上でHoudini側の作業は終わりです。
3. Unityでテクスチャの読み込み
Houdiniで作成したテクスチャをUnityに読み込み、Import設定を次のように変更してApplyします。
- sRGB: オフ
-
Advanced:
- Non-Power of 2: None
- Generate Mip Maps: オフ
- Filter Mode: Point(no filter)
-
Default:
- Compression: None
4. UnityでVFX Graphの作成
VFX Graphで次のようにネットワークを組みます。Experimentalなノードを使用しているのでPreferences > Visual Effects > Experimental Operators/Blocksをオンにする必要があります。
プロパティにはそれぞれ以下の値を設定します。
- Position Texture: Houdiniから書き出した/tex/{OS}_pos.exr
- Velocity Texture: Houdiniから書き出した/tex/{OS}_col.exr
- Frame Count: シミュレーションのフレーム数
- FPS: シミュレーションのフレームレート
このVFX Graphをシーンに配置することでHoudiniのパーティクルシミュレーションをUnityで再生することができます。