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 TextureROPを利用してテクスチャに書き出します。
Labs Vertex Animation TextureROPのパラメータを次のように設定します。
- 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で再生することができます。


