異種ボリューム アクタは、スパース ボリューム テクスチャ をサンプリングするボリュームドメインのマテリアルをレンダリングします。このアクタは、リアルタイムで パス トレーサー でボリュームをレンダリングすることをサポートしています。異種ボリューム アクタは、静的またはアニメートされたスパース ボリューム テクスチャ マテリアルをレンダリングできます。
左は静的な単一のボリュームの SVT で、右はアニメートされた SVT です。
異種ボリューム アクタを操作する
以下のワークフローを使用して、プロジェクトで異種ボリュームを使用します。
- VDB をインポートして Unreal Engine でスパース ボリューム テクスチャ アセットを作成する。
- SVT アセットをサンプリングするボリュームドメインのマテリアルを設定する。
- 異種ボリューム アクタをシーンに追加し、SVT マテリアルをこれに割り当てる。
VDB ファイルをインポートする
インポートを開始するには、コンテンツ ブラウザ にインポートするための、VDB (ボクセル データベース) ファイルが必要です。
VDB ファイルをインポートするには、次の手順を実行します。
- VDB を直接コンテンツ ブラウザにドラッグアンドドロップします。
- コンテンツ ブラウザで [Import (インポート)] ボタンを使用します。
VDB には、静的 な VDB ファイルおよび アニメートされた VDB ファイルをインポートするための独自のインポート ウィンドウがあります。
静的な VDB ファイルまたはアニメートされた VDB ファイルをインポートするオプションがあります。静的な VDB には単一のファイルと格納されたボリューム データのみが含まれていますが、アニメートされた VDB は順番に番号が付いた個別のファイルのセットです。アニメートされた VDB は、アニメートされた VDB を全体でインポートするために順番に番号の付いた VDB ファイルをインポートするだけで済みます。
VDB にはデータとともにさまざまな属性が含まれています。これらは属性 A と属性 B に分けることができます。推奨事項として、2 つのサンプリング属性で入力データを分け、最初の属性データを 8 ビットの unorm として、2 番目の属性データを 16 ビットの浮動小数点数としてインポートします。
Epic Games のプロジェクトの場合、8 ビットの unorm として密度をプッシュして、インポート時に 16 ビットの浮動小数の属性リストを通じて他のすべてのデータを渡します。
スパース ボリューム テクスチャのインポートと使用の詳細については、「スパース ボリューム テクスチャ」を参照してください。
SVT マテリアルを設定する
マテリアルの SVT での設定とマテリアル内での使用の詳細については、「スパース ボリューム テクスチャ」を参照してください。
異種ボリュームには、スパース ボリューム テクスチャをサンプリングするボリュームベースのマテリアルが必要です。これらのマテリアルは Sparse Volume Texture Sample ノードを使用して SVT をサンプリングし、異種ボリューム、ボリュメトリック フォグ、ボリュメトリック クラウドなどのボリュームベースのマテリアルと組み合わせて使用することができます。
Unreal Engine には、SVT アセットを適用できる、設定済みの空のサンプル SVT マテリアルが含まれています。これは、コンテンツ ブラウザの [Engine (エンジン)] > [Engine Materials (エンジン マテリアル)] (名前は SparseVolumeMaterial ) の下にあります。このマテリアルのコピーを作成して、そのインスタンスを作成します。
マテリアル インスタンスを開いたら、SparseVolumeTexture パラメータをオーバーライドし、割り当てスロットにインポート済み SVT アセットを割り当てます。
異種ボリュームを設定する
異種ボリュームを設定するには、次の手順を実行します。
- [Place Actors (アクタを配置)] パネルを使用して、異種ボリューム アクタをシーンに追加します。
- アクタを選択した状態で [Details (詳細)] パネルを使用して、SVT マテリアルをアクタに割り当てます。
- [オプション] アニメートされた VDB をインポートした場合は、[Animation (アニメーション)] セクションの [Playing] および [Looping] チェックボックスをオンにする必要があります。
異種ボリューム アクタのプロパティ
異種ボリューム アクタには次のプロパティがあります。
| プロパティ | 説明 |
|---|---|
| Materials | |
| Element [N] | スパース ボリューム テクスチャからサンプリングするボリュームベースのマテリアルのマテリアル割り当てスロット。 |
| Volume | |
| Volume Resolution | ボリュームの解像度は自動的に決定され、SVT でのレンダリング時に変更することはできません。 |
| Animation | |
| Frame | レンダリングされている SVT の現在の名前を表示します。[Playing] チェックボックスが設定されていない場合、アニメートされた SVT の特定のフレームを指定できます。 |
| Frame Rate | フレームを再生する速度。 |
| Start Frame | アニメートされた SVT が開始するフレーム。これは、インポートした SVT の使用可能な範囲に制限されます。 |
| End Frame | アニメートされた SVT が終了するフレーム。これは、インポートした SVT の使用可能な範囲に制限されます。 |
| Playing | 有効な場合、これはアニメートされた SVT で 1 回再生されます。 |
| Looping | 有効な場合、これはアニメートされた SVT を最初から、開始フレームから終了フレームを繰り返します。 |
| Sparse Volume Texture Streaming | |
| Issue Blocking Requests | ストリーミング システムは、フレームごとのスパース ボリューム テクスチャ データの更新時にブロックするように通知を受けます。これはリアルタイムの再生には推奨しませんが、ストリーミング システムがリアルタイムのフレーム レートを維持するために高い MIP レベルでページングする場合、シネマティック レンダリングに便利です。 |
| Mip Level | レンダリングされている SVT のテクスチャ レベルを設定します。低い値は、高い密度およびボリュームの品質と同じです。高い値の密度および品質は低くなっています。 |
| Lighting | |
| Step Factor | この係数は、複数のボリューム解像度で発生するように、レイ マーチング インテグレータのステップサイズを調整します。この係数を増やすと、マーチャーは長いステップを使用し、パフォーマンスの品質が犠牲になります。 |
| Shadow Step Factor | この係数は、レイ マーチャーのシャドウの計算のステップサイズを調整します。この係数を増やすと、マーチャーは長いステップを使用し、パフォーマンスの品質が犠牲になります。 |
| Shadow Bias Factor | この係数は、シャドウの計算時に適用される初期ボクセル バイアスを調整します。この係数を増やすと、セルフシャドウイングが減りますが、光漏れが発生する場合があります。 |
| Lighting Downsample Factor | この係数は、内部ライティング キャッシュのボリューム解像度を調整します。この係数を増やすと、実質的に操作の解像度が低くなり、システム メモリが減り、パフォーマンスが向上します。品質を下げる効果があります。SVT は元々スパースですが、内部ライティング キャッシュは現在、密になっています。内部ライティング キャッシュは、現在、1024 x 1024 x 512 ボクセルより大きいボリューム解像度は割り当てません。 |
アニメーション
Animation プロパティは、再生のカスタム ルールを提供します。デフォルトでは、[Start Frame] プロパティと [End Frame] プロパティはインポートされた SVT の使用可能な範囲に制限されていますが、トリミングして、SVT のアニメーションの一部のみを再生することができます。再生は 24 fps の「シネマティック」レートで行われることが想定されています。ただし、必要に応じて調整することができます。
[Playing] チェックボックスがオンの場合は、SVT がシーン内でインタラクティブに再生され、[Looping] チェックボックスがオンの場合は連続して繰り返し再生されます。[Playing] チェックボックスがオフのままの場合は、[Frame] テキスト フィールドをマウスで左クリックし、左右にドラッグして SVT の使用可能なフレームをスクラブ再生することができます。
ライティング
ディファード レンダリング モデルでは、異種ボリューム アクタで高品質のボリュメトリック アセットのレンダリング時に、レイ マーチングを使用します。調整可能な各 Factor プロパティは、Volume Resolution プロパティに対して相対的です。インポートされた SVT の解像度は、ランタイム パフォーマンスと直接的な相互関係があります。
ブループリント
ブループリントでは、Play ノードおよび Set Playing ノードを使用して、アニメーション データの開始と停止をトリガーできます。
パス トレーサーで異種ボリュームを使用する
Niagara Fluids プラグインを使用するか、シーンの異種ボリューム アクタをインスタンス化することで、異種ボリュームを作成できます。これらのボリュームは、パス トレーサーが有効になるとレンダリングを開始します。
パス トレーサーを使用してレンダリングされた Niagara Fluid 異種ボリュームの例。
異種ボリュームをパス トレーサーでレンダリングするには、以下を有効にします。
- プロジェクト設定
- [Default RHI (デフォルト RHI)] を [DirectX 12] に設定します。
- [Support Hardware Ray Tracing (ハードウェア レイトレーシングをサポート)] を有効にします。
- [Path Tracing (パス トレーシング)] を有効にします。
- プラグイン
- [オプション] Niagara Fluids
仕様の完全なリストについては、「パス トレーサー」を参照してください。
Niagara Fluids を使用した異種ボリューム
この機能を使用するには、Niagara Fluids プラグインを有効にする必要があります。詳細については、「Niagara Fluids」を参照してください。
Niagara Fluids を使用してレンダリングするには、次の手順を実行します。
- コンテンツ ブラウザで新しい Niagara Fluid を作成します
- Niagara ピッカーのウィンドウで、[New system from a template or behavior example (テンプレートまたは動作例に基づく新しいシステム)] を選択して [Next (次へ)] をクリックします。
- ウィンドウの [3D Gas (3D ガス)] リストから 1 つの例を選択します。
- Niagara Fluid アセットをダブルクリックして、Niagara エディタを開きます。
- グラフで Niagara Fluid system ノードを選択します。
- [Details] パネルで、次を設定します。
- [Loop Behavior (ループの動作)] を [Infinite (無限)] に設定します。
- [Loop Duration (ループ持続時間)] は、5 秒未満である必要があります。
- Niagara Fluid アセットをコンパイルして保存します。
- シーンに Niagara Fluid を配置します。
- コンソール ウィンドウを開き、「
r.PathTracing.HeterogeneousVolumes 1」と入力し、異種ボリューム レンダリングでのパス トレーサーのサポートを有効にします。
スパース ボリューム テクスチャを使用した異種ボリューム
スパース ボリューム テクスチャ を使用してレンダリングするには、次の手順を実行します。
- VDB ファイルをインポートし、このファイルを表示するためにスパース ボリューム テクスチャ マテリアルを設定します。
- レベル エディタで、[Place Actors (アクタを配置)] パネルを使用して、異種ボリューム アクタをシーンに追加します。
- そのマテリアル スロットにスパース ボリューム テクスチャのマテリアルを割り当てます。
- コンソール ウィンドウを開き、「
r.PathTracing.HeterogeneousVolumes 1」と入力し、異種ボリューム レンダリングでのパス トレーサーのサポートを有効にします。
便利なコンソール変数
| コンソール変数 | 説明 | デフォルト値 |
|---|---|---|
r.PathTracing.HeterogeneousVolumes |
異種ボリュームのパス トレーシングを有効にします。 | 0 |
r.HeterogeneousVolumes.OrthoGrid |
ワールド空間のボクセル グリッドを有効にします。 | 1 |
r.HeterogeneousVolumes.OrthoGrid. MaxBottomLevelMemoryInMegabytes |
ボクセル化 (エミッション、吸光、アルベド) に使用される各ボトムレベルのボクセル グリッドのメモリ制限 (MB 単位) を決定します。推奨されるシネマティック デフォルトは 512 です。 | 128 |
r.HeterogeneousVolumes. OrthoGridShadingRate |
ワールド空間のボクセル グリッドの有効なシェーディング レートを決定します。この値はピクセル幅にほぼ一致します。シェーディング レートを下げると、より高品質のテッセレーションを生成できますが、より多くのメモリが必要になります。推奨されるシネマティック デフォルトは 1 です。 | 4 |
r.HeterogeneousVolumes.FrustumGrid |
錐台に位置揃えされたボクセル グリッドを有効にします。 | 1 |
r.HeterogeneousVolumes.FrustumGrid. MaxBottomLevelMemoryInMegabytes |
ボクセル化 (エミッション、吸光、アルベド) に使用される各ボトムレベルのボクセル グリッドのメモリ制限 (MB 単位) を決定します。推奨されるシネマティック デフォルトは 512 です。 | 128 |
r.HeterogeneousVolumes.FrustumGrid. ShadingRate |
錐台に位置揃えされたボクセル グリッドの有効なシェーディング レートを決定します。この値はピクセル幅にほぼ一致します。シェーディング レートを下げると、より高品質のテッセレーションを生成できますが、より多くのメモリが必要になります。推奨されるシネマティック デフォルトは 1 です。 | 4 |
r.HeterogeneousVolumes.FrustumGrid. DepthSliceCount |
シェーディング レート 1 でレンダリングされた場合の、錐台に位置揃えされたボクセル グリッドの深度スライス数を決定します。シェーディング レート 2 でレンダリングすると、深度スライス数は 256 になります。推奨されるシネマティック デフォルトは 512 または 1024 です。 | 512 |
r.HeterogeneousVolumes.Tessellation. FarPlaneAutoTransition |
錐台に位置揃えされたボクセル グリッドのボクセル サイズがワールド空間ボクセル グリッドのボクセル サイズに一致する場合、錐台に位置揃えされたグリッドのファープレーンを切り捨てます。 | 1 |
制限事項および既知の問題
リアルタイム:
- VDB ファイルをインポートする
- SVT を構築時に OpenVDB ファイル内で適用されたトランスフォーム データは無視されます。現時点では、インポート後にエディタ内でアーティストがアセットを配置し直す必要があります。
- Houdini などのサードパーティのパッケージは、通常、エクスポート時にフレームごとのトランスフォーム データを OpenVDB ファイルに書き込みます。現時点では、フォグ ボリュームを OpenVDB にエクスポートする前に、アーティストがこのトランスフォーム データを削除する必要があります。Pyro DOP ネットワーク内で動的なサイズ変更コンテナ操作を無効にすると、この動作が回避されます。
- リアルタイムでのレンダリングとパス トレーサーでのレンダリング
- レンダリング ボリュームのより完全なサポートはパス トレーサーで利用でき、散乱、シャドウ、グローバル イルミネーションを正確にシミュレートできます。
パス トレーサー:
- 異種ボリュームがブロック状になるか、ぼやけている
- インタラクティブなパス トレーシングをサポートするための、異種ボリューム レンダリングのデフォルトのシェーディング レートは 4 です。シェーディング レートを 1 に下げると、知覚できるアーティファクトはなくなりますが、正しくレンダリングするために必要なメモリが増大します。推奨されるシネマティック デフォルトのシェーディング レートは 1 で、推奨されるデフォルトのメモリ制限は 512 です。レンダリング時に (ムービー レンダー キュー の設定でこれらを設定することをお勧めします。
- レンダリングでボクセルが欠落する
- ワールド空間および錐台に位置揃えされたボクセル グリッドのシェーディング レートを下げると、課せられたメモリ制限で許容されるよりも多くのボトムレベルのボクセルを割り当てようと試みる場合があります。このような場合、ボクセルが割り当てられず、ボリュームの一部が欠落します。この場合、より多くのボトムレベルのメモリを使用するか、シェーディング レートを上げる必要があります。
- 重なり合った異種ボリュームがブロック状に見える
- 領域が均質であると判断された場合、ワールド空間のボクセル グリッドのボトムレベルのボクセル データが集約されます。均質であるかどうかの検出は単一のボリュームの範囲内で実行されるため、同一領域内で重なり合うボリュームがある場合、不適切に集約されることがあります。
r.HeterogeneousVolumes.Tessellation.BottomLevelGrid.HomogeneousAggregationを0に設定して無効にすることで、集約を回避できます。
- 領域が均質であると判断された場合、ワールド空間のボクセル グリッドのボトムレベルのボクセル データが集約されます。均質であるかどうかの検出は単一のボリュームの範囲内で実行されるため、同一領域内で重なり合うボリュームがある場合、不適切に集約されることがあります。
- Niagara Fluid によるスクリーンドア効果
- Niagara システムは、Niagara エディタが開いているときにのみパス トレーシングの無効化イベントをトリガーします。エディタが開いていると、パス トレーサーでアニメーションが正しく表示されます。エディタが閉じているときは、パス トレーサーはアニメーション全体を通じてサンプルを蓄積し続けます。
- 異種ボリューム アクタによるスクリーン ドア効果
- 現時点では、異種ボリューム アクタは、パス トレーシングの無効化イベントをトリガーしません。アニメーションを一時停止するには、アクタの [Animate] プロパティをオフにしてください。
その他のリソース
- Niagara Fluids プラグイン
- Niagara Fluids プラグインには、異種ボリューム レンダリングで使用できるサンプルが含まれています。プロジェクトでこのプラグインを有効にし、提供されたテンプレートから新しい Niagara システムを作成してください。詳細については、「Niagara Fluids」を参照してください。
- このページのサンプルで使用されている VDB ファイルは、EmberGen で作成された JangaFX の無料の VDB セットです。
- こちら で無料のサンプルをダウンロードすることができます。