この記事はUnreal Engine (UE) Advent Calendar 2023の4日目の記事です。
この記事は、UE5.3になってから、扱いやすくなったVDBファイルをUEで検証したレポートです。
VDBファイルの書き出し方は、解説しません。検証には、サンプルのVDBファイルを使用しています。
確認環境
Windows 11 Pro
UnrealEngine 5.3.2
VDBファイルとは
VDBとはDreamworks Animationが提唱しているボリュームを表現するためのオープンソースのフォーマットであり、現在はHoudiniやRenderman、Realflowなどに組み込まれています。引用元
と説明されています。ここで言う『ボリューム』とは、主に『煙』『炎』『竜巻』なと、StaticMeshやSkeltalMeshでは表現しにくい『気体』を指しています。
『気体』表現したい場合、UEでは、『Cascade』や『Niagara』等のパーティクルを使用するか、連番アニメーションをビルボードに張り付けて再生させる方法が考えられます。
どちらも、データとして軽いというメリットがありますが、3D表現としては物足りなく、立体感が無かったりします。また、ツール間でデータの橋渡しができなかったりする為、各DCCツールやゲームエンジンでエフェクトを作り直しが起こります。
VDBの特徴
VDBファイルは、以下の特徴があります。
- 3Dワールド空間内で発生する
- 作成したソフト以外でも互換性のある(ツール間を跨げる)
- ベイクアニメーションが入っている為、ファイルサイズは大きくなる
綺麗な気体の表現できるが、尺が短いアニメーションでもファイルサイズは、大きくなってしまいます。
その為、ゲームではなく、映像作品での主に使用ケースが多いです。
UEでVDBを読み込み手順
ここからが本題です。手順としては以下の手順で進めます。
- VDBファイルをダウンロードする
- 新規プロジェクトを作成する
- VDBファイルをインポートする
- マテリアルを作成する
- HeterogeneousVolumeComponentを持ったアクターをレベルに置く
- 4のマテリアルを5のアクターに設定する
チュートリアルを公開している人もいる為、記事と合わせて、参照してみてください。
VDBファイルをダウンロードする
テストに使用するVDBファイルは、こちらを使用しました。
この記事では、『Ground Explosion』をインポートする想定で進めていきます。
まずは、Zipファイルを解凍して、『.vdb』をインポートします。
GroundExplosionVDB → ground_explosion → ground_explosion_VDB → ground_explosion_0000.vdb
新規プロジェクトを作成する
UE5.3以上で、新規プロジェクトを作成してください。
VDBファイルをインポートする
インポート時に、専用のダイアログが開かれます。
『Ground Explosion』をインポートする場合は、以下のようになっています。
『Ground Explosion』の場合は、これだと正しく動作しないので、以下のようにオプションを修正してください。
インポートに成功すると、『AnimatedSparseVolumeTexture』が作成されます。
マテリアルを作成する
続いて、マテリアルを作成します。Textureとしてプロジェクト内に生成される為、マテリアルでアニメーションさせます。
このマテリアルの作り方は、先に紹介したチュートリアルでも紹介されています。
SparseVolumeTextureSampleParameter
このノードは、AnimatedSparseVolumeTextureを取り出しているノードとなり、このノードは、TextureSampleのように扱えます。
他にも、SparseVolumeTextureSample系のノードは存在していますが、ここでは、SparseVolumeTextureSampleParameterのみ挙げさせていただきます。
TextureSample系のノード | 対応するSparseVolumeTexture系のノード |
---|---|
TextureObject | SparseVolumeTextureObject |
TextureSample | SparseVolumeTextureSample |
TextureObjectParameter | SparseVolumeTextureObjectParameter |
TextureSampleParameter2D | SparseVolumeTextureSampleParameter |
HeterogeneousVolumeComponentを持ったアクターをレベルに置く
AnimatedSparseVolumeTextureを設定したマテリアルを扱うには、『HeterogeneousVolume』を使用する必要があります。
HeterogeneousVolumeは、『アクタの配置』からも行うか、HeterogeneousVolumeComponentを持ったアクターを作成しても配置してください。
マテリアルをアクターに設定する
作成したマテリアルを設定します。
HeterogeneousVolumeの制御
HeterogeneousVolumeの制御は公開されているパラメータから行います。
専用のパラメータの数は、かなりシンプルになっており、リアルタイムに反映されます。
FrameRate
アニメーションのフレームレートを設定します。調整もできますが、アニメーションがチラつき始める為、基本的にはインポートのまま変更しない方が無難です。
StartFrame
アニメーションの開始時間です。
EndFrame
アニメーションの終了時間です。
Playing
trueになっていれば、アニメーションが再生されます。HeterogeneousVolumeには、『Play』や『Stop』等が実装されていない為、このフラグから制御します。
Looping
trueになっていれば、アニメーションがループします。
再生させるとこんな感じになります。(※画像は圧縮して劣化しています)
画像の場合は、Temperature(温度)を2000.0にしており、Temperatureは、高い数値を入れないと、赤く発光しませんでした。
SparseVolumeTextureのビューア
実は、SparseVolumeTextureのビューアがあり、C++のクラスとして用意されています。
使い方自体は、ASparseVolumeTextureViewerクラスを、レベルに配置すればそのまま、使用できます。
AnimatedSparseVolumeTextureを直接参照する為、VDBファイルのデータの確認するには、最適なツールであるかも知れません。
色は付かず、黒くなってしまいますが、VDBのアニメーションに使用される範囲が、黒い半透明のボックスで囲われており、アニメーションの大きさが一瞬で分かります。
また、操作できるパラメータがいくつかあり、HeterogeneousVolumeComponentよりも、AnimatedSparseVolumeTextureの中身を詳細に確認できます。
操作可能なパラメータについては、あえて説明しませんが、名前から何に使うパラメータなのか、想像が付くと思います。
C++での実装が気になる方は、以下の『ASparseVolumeTextureViewerクラス』や『USparseVolumeTextureViewerComponentクラス』を追ってみてくだい。
コンポーネントのクラスも用意されている為、独自ビューアの作成なども出来そうです。
その他
属性の種類について
サンプルデータを見てみた限りでは、『0.density(密度)』『1.temperature(温度)』『2.flames(炎)』を確認できました。
こちらの方の記事を見る限りでは、結構種類が豊富みたいです。Houdiniをお持ちの方は、実際に試してみるといいかも知れません。
VDBファイルの書き出しついて
HoudiniでのVDBの書き出しについては、こちらが参考になりそうです。
参考
https://forums.unrealengine.com/t/community-tutorial-unreal-engine-5-3-crea-tornados-impactantes-con-vdbs-en-minutos/1289414
https://www.youtube.com/watch?v=L9Zn0AgW3io
https://www.youtube.com/watch?v=-9mah5rzviQ
https://www.youtube.com/watch?v=AhWqmtc0T7s