3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

UEでVDBファイルを検証した話

Last updated at Posted at 2023-12-04

この記事は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を読み込み手順

ここからが本題です。手順としては以下の手順で進めます。

  1. VDBファイルをダウンロードする
  2. 新規プロジェクトを作成する
  3. VDBファイルをインポートする
  4. マテリアルを作成する
  5. HeterogeneousVolumeComponentを持ったアクターをレベルに置く
  6. 4のマテリアルを5のアクターに設定する

チュートリアルを公開している人もいる為、記事と合わせて、参照してみてください。

VDBファイルをダウンロードする

テストに使用するVDBファイルは、こちらを使用しました。
この記事では、『Ground Explosion』をインポートする想定で進めていきます。

サンプルデータ_スクショ.png

まずは、Zipファイルを解凍して、『.vdb』をインポートします。

GroundExplosionVDB → ground_explosion → ground_explosion_VDB → ground_explosion_0000.vdb

新規プロジェクトを作成する

UE5.3以上で、新規プロジェクトを作成してください。

VDBファイルをインポートする

インポート時に、専用のダイアログが開かれます。
『Ground Explosion』をインポートする場合は、以下のようになっています。

OpenVDBインポートオプション.png

『Ground Explosion』の場合は、これだと正しく動作しないので、以下のようにオプションを修正してください。

OpenVDBインポートオプション_修正.png

インポートに成功すると、『AnimatedSparseVolumeTexture』が作成されます。

インポートされたAnimatedSparseVolumeTexture.png

マテリアルを作成する

続いて、マテリアルを作成します。Textureとしてプロジェクト内に生成される為、マテリアルでアニメーションさせます。

VDBマテリアル.png

このマテリアルの作り方は、先に紹介したチュートリアルでも紹介されています。

SparseVolumeTextureSampleParameter

このノードは、AnimatedSparseVolumeTextureを取り出しているノードとなり、このノードは、TextureSampleのように扱えます。

SparseVolumeTextureSampleParameterノード.png

他にも、SparseVolumeTextureSample系のノードは存在していますが、ここでは、SparseVolumeTextureSampleParameterのみ挙げさせていただきます。

SparseVolumeTextureSample系ノード.png

TextureSample系のノード 対応するSparseVolumeTexture系のノード
TextureObject SparseVolumeTextureObject
TextureSample SparseVolumeTextureSample
TextureObjectParameter SparseVolumeTextureObjectParameter
TextureSampleParameter2D SparseVolumeTextureSampleParameter

HeterogeneousVolumeComponentを持ったアクターをレベルに置く

AnimatedSparseVolumeTextureを設定したマテリアルを扱うには、『HeterogeneousVolume』を使用する必要があります。
HeterogeneousVolumeは、『アクタの配置』からも行うか、HeterogeneousVolumeComponentを持ったアクターを作成しても配置してください。

HeterogeneousVolumeComponentを持ったアクターをレベルに置く.png

マテリアルをアクターに設定する

作成したマテリアルを設定します。

VDBのマテリアルをアクターに設定する.png

HeterogeneousVolumeの制御

HeterogeneousVolumeの制御は公開されているパラメータから行います。
専用のパラメータの数は、かなりシンプルになっており、リアルタイムに反映されます。

操作系公開パラメータ.png

FrameRate
アニメーションのフレームレートを設定します。調整もできますが、アニメーションがチラつき始める為、基本的にはインポートのまま変更しない方が無難です。

StartFrame
アニメーションの開始時間です。

EndFrame
アニメーションの終了時間です。

Playing
trueになっていれば、アニメーションが再生されます。HeterogeneousVolumeには、『Play』や『Stop』等が実装されていない為、このフラグから制御します。

Looping
trueになっていれば、アニメーションがループします。

再生させるとこんな感じになります。(※画像は圧縮して劣化しています)
画像の場合は、Temperature(温度)を2000.0にしており、Temperatureは、高い数値を入れないと、赤く発光しませんでした。

再生アニメーション_50%圧縮.gif

SparseVolumeTextureのビューア

実は、SparseVolumeTextureのビューアがあり、C++のクラスとして用意されています。
使い方自体は、ASparseVolumeTextureViewerクラスを、レベルに配置すればそのまま、使用できます。

ASparseVolumeTextureViewerの様子.png

AnimatedSparseVolumeTextureを直接参照する為、VDBファイルのデータの確認するには、最適なツールであるかも知れません。
色は付かず、黒くなってしまいますが、VDBのアニメーションに使用される範囲が、黒い半透明のボックスで囲われており、アニメーションの大きさが一瞬で分かります
また、操作できるパラメータがいくつかあり、HeterogeneousVolumeComponentよりも、AnimatedSparseVolumeTextureの中身を詳細に確認できます。

ASparseVolumeTextureViewerの操作.png

操作可能なパラメータについては、あえて説明しませんが、名前から何に使うパラメータなのか、想像が付くと思います。

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

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?