UnrealEngine5でBlenderで作成したVDBエフェクトをレンダリング

VDBファイルとは、ボリュームデータをやり取りすることが出来るオープンソースフォーマットです。
UE5はVDBファイルをインポートしてレンダリングすることが出来ます。
メッシュを変形させたエフェクト効果やスプライト画像を使用したパーティクルエフェクトでは表現しにくいような、立体的な気体の動きなどを含んだ流体、煙、炎のエフェクト表現を実現させることが出来ます。
Blenderで物理演算エフェクトの作成~VDB形式での出力
Blenderでのボリューメトリックな物理演算エフェクトの作り方を簡単に解説します。

Blender上で立方体などのメッシュオブジェクトを作成し、物理演算タブから「流体」を選択します。
その上で流体プロパティのタイプを「ドメイン」へ変更します。
大まかに、このドメインとして設定したオブジェクトの内部でシミュレーションを行います。

次にドメインとして設定したメッシュに内側へ収まる形で、球体や平面や箱状の形状で何らかのメッシュオブジェクトを作成します。
そのオブジェクトを選択した状態で物理演算タブで「流体」を選択し、タイプを「フロー」に変更します。
フロータイプ等の以下の設定は、作成したエフェクトの内容次第で必要に応じて任意に変更します。
フローの挙動を「ジオメトリ」にするとそのオブジェクトの形状の気体が発生するようになります。
「流入口」に設定するとそのオブジェクトから気体が放出されるような表現になります。
再び最初に作成し、「ドメイン」として設定したオブジェクトの方を選択します。
物理演算タブの流体プロパティ内、「キャッシュ」の項目を設定します。

キャッシュを保存するディレクトリをフォルダマークアイコンを押して設定します。
必要に応じてフレームの長さも設定します。
タイプを「すべて」に設定、ボリューム形式を「OpenVDB」に設定します。

この状態でBlenderのタイムラインから再生ボタンを押すことで、流体物理演算(デフォルトではフローに設定した物体を気体として設定した状態のシミュレーション)が行われます。
PCスペックやそれぞれの物理演算設定次第で、実際に必要な時間は異なります。
シミュレーションが終わると、エフェクト効果がタイムライン上で再生できるようになります。

シミュレーションが終了すると、先ほどキャッシュとして指定したディレクトリにVDB形式の連番ファイルが保存されている状態になります。

UE5のコンテンツブラウザに、キャッシュとして出力されたVDBファイルの一つ目をドラッグアンドドロップすると、OpenVDBインポートオプションが開かれます。
Blenderでの物理演算設定次第である程度自動的にインポート設定が行われた状態がデフォルトで適用されています。

インポートボタンを押すとAnimatedSparseVolumeTextureという形式のアセットとしてインポートされます。

AnimatedSparseVolumeTextureを利用するにはMaterialDomainをVolumeに設定したマテリアルを作成し、そのマテリアル内でインポートしたアセットを使用する必要があります。
以下が最もシンプルな構成でのAnimatedSparseVolumeTextureをレンダリングすることのできるマテリアルになります。

メインマテリアルノードでは、MaterialDomainをVolumeに設定し、BlendModeをAddtiveに設定する必要があります。

「SparseVolumeTextureSampleParameter」ノードでインポートしたVDBファイルから作られたアセットを参照してパラメーターを取り出します。

SparseVolumeTextureSampleParameterノードの出力であるAttributes AとBはそれぞれOpenVDBインポートオプションで設定したパラメーターをComponentMaskノードでそれぞれ個別に取り出すことが出来ます。

Blenderで作成した物理演算エフェクトの内容次第でマテリアル内で必要な編集は大きく変わりますが、基本的にはSparseVolumeTextureSampleParameterノードの出力であるAttributes AとBから出力された値を使用してマテリアルを作成していく形になります。基本的にはSparseVolumeTextureSampleParameterノード以降の編集内容は、大まかには一般的なUE5でマテリアルを作成していく過程と変わりありません。
マテリアルの作成が終わったら、そのマテリアルを適用する為のコンポーネントを配置します。
Heterogeneous Volumeアクタ、もしくは何らかのBPアクタ内にHeterogeneous Volumeコンポーネントを配置します。

Heterogeneous VolumeコンポーネントにはSparseVolumeTextureSampleParameterノードを持つマテリアルをレンダリングし、更にアニメーション再生に関わる設定をプロパティ欄から適用することが出来ます。

マテリアルエレメントのスロットに作成したマテリアルを設定し、「Playing」「Looping」のチェックをオンにします。

Heterogeneous Volumeコンポーネントが配置されている場所でBlenderで作成した物理演算エフェクトをUE5上で再生することが出来ました。
Blender上での設定とUEへのインポートオプションの設定、UE内でのマテリアルの設定次第で複雑なエフェクト表現も可能になります。

ぜひいろいろな表現にトライしてみましょう!