スパース ボリューム テクスチャ (SVT) は、テクセル (ボクセル) を 3D データ構造体に格納するテクスチャです。SVT のデータは、3D テクスチャやボリューム テクスチャと同様に、3D UV 座標でインデックス付けできます。標準的な (密度の高い) ボリューム テクスチャとは異なり、SVT は「関心のある」データが入っているボリュームの領域 (ボクセル データが存在する領域) にのみメモリを費やすため、標準的なボリューム テクスチャの密度と比べると、はるかに大きなボリュームや同じ範囲のボリュームでも、メモリの消費を抑えることができます。
スパース ボリューム テクスチャの種類
静的ボリュームまたはアニメートされたボリュームを使用して、スパース ボリューム テクスチャを表現できます。静的 SVT は単一のボリュームですが、アニメートされた SVT は、フリップブック アニメーションと同様に、再生できるボリューム (つまり、フレーム) のシーケンスです。
左は静的な単一のボリュームの SVT で、右はアニメートされた SVT です。
これらの SVT は、異種ボリューム アクタを使用してレンダリングされます。これらの使用方法の詳細については、「異種ボリューム」を参照してください。
スパース ボリューム テクスチャのコンポジション
スパース ボリューム テクスチャは複数のテクスチャで構成されています。これには、ボリュームを構成する 物理的なタイル データ テクスチャへの間接参照として機能する ページ テーブル テクスチャが含まれています。これらのタイル データ テクスチャは、ボリュームのテクスチャ データを格納し、最大 2 つのテクスチャを使用して、データを格納し、ボリュームの属性を属性 A と属性 B として格納できます。
属性 A と B のそれぞれで RGBA テクスチャ チャンネルを使用してデータが格納され、データ格納用に最大 8 つのチャンネルが提供されます。データは複数回のテクスチャ ルックアップによって取得されます。ページ テーブル用に 1 回のルックアップと、物理タイル データごとに 1 回のルックアップで、合計 2 回または 3 回 (SVT に応じて異なる) のルックアップが行われます。つまり、SVT は、ページ テーブルとタイル データ テクスチャが 1 対 1 の関係ではなく、両方の物理タイル データ テクスチャに対して 1 回のページ テーブル ルックアップを共有します。
SVT の 2 つのタイル データ テクスチャ (属性 A と B) では、異なるピクセル形式 (16 ビット、32 ビット、8 ビットの unorm) を使用できます。RGBA テクスチャ チャンネルのいずれかが属性リストのいずれかで使用されない場合、チャンネル数が少ないピクセル形式の使用が試みられます。どのチャンネルも使用されない場合、そのテクスチャはメモリを消費しません。
| テクスチャ形式 | テクスチャ | Unreal Engine での表現 |
|---|---|---|
| ページ テーブル | ![]() |
![]() |
| 物理的な 3D タイル | ![]() |
![]() |
スパース ボリューム テクスチャを表示する方法
以下のように、スパース ボリューム テクスチャを操作できます。
- ボリュームドメインのマテリアル
- 異種ボリューム アクタ
- ボリュメトリック フォグ
- ボリュメトリック クラウド
- スパース ボリューム テクスチャ ビューア
異種ボリューム アクタとコンポーネント
異種ボリュームは、スパース ボリューム テクスチャ マテリアル ノードをボリュームドメインのマテリアルに取り入れることで、SVT を利用できる配置可能なアクタです。 このアクタタイプは、マテリアルのロジック設定を使用して SVT とその属性をレンダリングします。 異種ボリューム アクタはアニメート SVT をプレイおよびループすることもでき、追加の設定の必要がありません。
異種ボリュームのレンダリングは、リアルタイムでは、ディファード レンダリング機能によって部分的に制限されています。ただし、パス トレーサー では、散乱、シャドウ、グローバル イルミネーションの正確なシミュレーションなど、ボリュームのレンダリングの包括的なサポートが提供されています。
異種ボリューム アクタを使用してレンダリングされる SVT マテリアルの例。
使用方法と設定方法の詳細については、「異種ボリューム」を参照してください。
ボリュメトリック フォグ
SVT では、ボリューム ドメイン マテリアルがメッシュに適用されている場合、指数関数的高さフォグの機能である ボリュメトリック フォグ をサポートしています。SVT はボリュメトリック フォグの解像度よりも多くのディテールを含むことができるため、異種ボリュームでこの方法を使用するときに、不一致を表示することが可能です。
左は SVT を表示している異種ボリューム アクタ、右はメッシュに適用されてボリュメトリック フォグでレンダリングされている SVT マテリアル。
SVT マテリアルでボリュメトリック フォグを設定するには、このページの「ボリュメトリック フォグで SVT を表示する」セクションを参照してください。
ボリュメトリック クラウド
SVT では、ボリューム ドメイン マテリアルが異種ボリューム アクタに適用されている場合、ボリュメトリック クラウド を自動的にサポートします。
スパース ボリューム テクスチャ ビューア
スパース ボリューム テクスチャ ビューアはプレビューアとして非常に役に立ちますが、シーンの他の部分に使用するには最適化されておらず、理想的ではありません。代わりに、マテリアルを作成して、SVT を適切に表示し、これを 異種ボリューム に適用するか、「スパース ボリューム テクスチャを表示する方法」のセクションで説明されている方法のいずれかを使用するのが最善の方法です。
スパース ボリューム テクスチャ ビューア では、マテリアルを設定することなく SVT アセットを直接プレビューする方法が提供されています。ビューアを使用して SVT の個々の属性テクスチャ チャンネルをプレビューし、そのアニメーションがあれば再生できます。これにより、ビューアは設定の必要がなく、SVT アセットをすばやくデバッグするための理想的な選択肢になります。
SVT ビューアを使用するには、以下の手順を実行します。
- [Place Actors (アクタを配置)] パネルから [Sparse Volume Texture Viewer (スパース ボリューム テクスチャ ビューア)] をシーンにドラッグアンドドロップします。
- [Details (詳細)] パネルで SVT アセットを [Sparse Volume Texture Preview (スパース ボリューム テクスチャ プレビュー)] 割り当てスロットに割り当てます。
SVT がビューア内で表示されています。
Extinction プロパティの値を調整することで、光を吸収する量を設定して、ボリュームがどの程度目に見えるかを調整します。
2 つ以上のフレームがある SVT の場合、Playing および Looping のチェックボックスをオンにして SVT のフレームをループ再生します。Frame Rate プロパティは、再生する 1 秒あたりのフレーム数 (fps) を指定します。プレビューアはデフォルトでは 24 fps に設定されています。Animate プロパティがオフのままの場合は、Frame プロパティの値を使用して、SVT でフレームをスクラブ再生することができます。
左はアニメーションのない SVT プレビューで、右はアニメートされたフレームでループしている SVT です。
SVT ビューアで表示できるのは、一度に 1 つのテクスチャ チャンネルのみです。これは SVT アセットの単一のチャンネルを調査するのに便利で、ボリューム テクスチャに格納されたデータに応じて適切に動作します。インポートされた速度データは密度として表示され、予期しない結果を返します。
Preview Attribute 選択ボックスを使用して、プレビューする属性チャンネルを選択します。デフォルトでは、最初のチャンネル AttributesA Red が使用されます。
スパース ボリューム テクスチャ ビューアには以下のプロパティがあります。
| プロパティ | 説明 |
|---|---|
| Asset Preview | |
| Sparse Volume Texture Preview | プレビューアで使用される SVT アセット。 |
| Blocking Streaming Requests | SVT ストリーミング マネージャーに、すべてのストリーミング リクエストを送信した後すぐにブロック (待機) するように通知します。このプロパティの効果的な使用の詳細については、「ストリーミング フォーマンスに関する注記」セクションを参照してください。 |
| Apply Per Frame Transforms | アタッチされているトランスフォームを、指定されたスパース ボリューム テクスチャのフレームに適用します。このトランスフォームは、スパース ボリューム テクスチャ ビューア コンポーネントのトランスフォームを基準として行われます。 |
| Pivot at Centroid | ピボットをボリュームの中心に移動させます。トランスフォームは、ピボットが原点 (通常はボリュームのいずれかの隅であり、作成方法によって異なる) にある状態で作成されている場合は、 ピボットをボリュームの中心に強制的に移動させると、トランスフォームが崩れる可能性があることに注意してください。 |
| Voxel Size | すべてのボクセルに適用する均一スケールです。これは、スケール関連の問題をデバッグするためにボリューム全体をスケールする簡単な方法です。 |
| Preview Attribute | プレビューする属性を選択します。 1 つの SVT に複数含まれている場合でも、一度にプレビューできるのは 1 つだけです。 属性 A または B のアルファ チャンネルが None に設定されている場合、ビューアでプレビューすると、黒いブロック状のビジュアルになることがあります。これは、デフォルトで 1 を返すアルファ チャンネル以外、GPU は通常、存在しないテクスチャ チャンネルに対して 0 を返すためです。チャンネルは基本的に定義されていないため、None に設定されたままにすると、問題は発生しません。 |
| Mip Level | SVT を表示するミップ レベルを設定します。 |
| Extinction | ボリュームの不透明度を設定します。Extinction は吸収 (パーティクルにヒットして吸収される光線) と散乱 (パーティクルにヒットして、カメラに到達しない別の方向に散乱/偏向した光線) の合計です。値が大きいほど、不透明に見えます。 |
| Animation | |
| Frame | 値を入力するか、スライダをドラッグして、アニメートされた SVT のフレームをスクラブ再生します。このプロパティは、Playing がオフになっている場合に編集可能です。 |
| Frame Rate | この SVT アニメーションを再生するフレームレートを指定します(24、30、48、60 など)。このプロパティは、Playing がオンになっている場合に編集可能です。 |
| Playing | プレビューアが SVT アセットのフレーム再生をループするかどうかを切り替えます (複数のフレームがある場合)。 |
| Looping | Playing がオンになっている場合に、アニメーションをループします。 |
| Reverse Playback | Playing がオンになっている場合に、アニメートされた SVT のフレームを逆再生します。 |
スパース ボリューム テクスチャを操作する
スパース ボリューム テクスチャは、VDB (ボクセル データ ベース) ファイルからインポートできます。これは、スパース ボリューム データを格納するために広く使用されている形式です。VDB データが Unreal Engine にインポートされると、スパース ボリューム表現に変換されます。
VDB ファイルには、「グリッド」(ボリュームの別名) と呼ばれるものが入っています。これらのグリッドには、密度、速度、温度など、さまざまなタイプのコンポーネントがあります。SVT では、浮動小数点 (float、float2、float3、float4)、倍精度 (double、double2、double3、double4)、および半精度 (half、half2、half3、half4) の型のグリッドのインポートがサポートされています。結果の SVT の解像度は、インポートされたすべてのグリッドのディメンションの結合です。
Unreal Engine ではすべてのタイプの VDB のインポートをサポートしていますが、現在、SVT は倍精度形式をサポートしていません。 インポート時にデータは 8/16/32 ビットに変換されます。
各グリッドには独自のトランスフォームが含まれている場合もあります。VDB 形式では、パースペクティブや錐台の遷移など、幅広い種類のトランスフォームを使用できます。Unreal Engine は現在、スケーリング、回転、移動のトランスフォームをサポートしています。これらのトランスフォームはフレーム間で異なることがあるため、インポートされた SVT はそのアニメーション タイムライン内でスケール / 回転 / 移動することができます。
トランスフォームは複数のフレーム間で異なる可能性がありますが、単一フレーム内で使用されるすべてのグリッドのトランスフォームはすべて同一であることが想定されています。
VDB ファイルをインポートする
VDB ファイルをインポートするには、以下のいずれかの操作を実行します。
- VDB を直接コンテンツ ブラウザにドラッグアンドドロップします。
- コンテンツ ブラウザの [Import (インポート)] ボタンを使用します。
VDB には、静的な VDB ファイルおよびアニメートされた VDB ファイルをインポートするための独自のインポート ウィンドウがあります。
番号付きフレーム以外は同じ名前であるフレームが入っているアニメートされた VDB ファイルをインポートする場合、アニメートされたシーケンスからいずれかのファイルをインポートすることができ、インポータはそれを VDB の 1 つのシーケンスに属するものとして認識します。アニメートされた VDB シーケンスにあるすべてのファイルを選択して一度にすべてをインポートする場合、ファイルごとにシーケンスが作成されるため、アニメートされた同じ SVT が複数作成されます。
![]() |
![]() |
|---|---|
| SVT インポート オプション:静的な単一フレーム VDB | SVT インポート オプション:アニメートされた VDB シーケンス |
インポート オプションには、以下の情報と設定があります。
| プロパティ | 説明 |
|---|---|
| Import Static / Animated | インポートする VDB のタイプ (静的またはアニメート済み) を表示します。 |
| Current Asset | インポートされる VDB のファイル パス。 |
| Import Sequence | 連番でラベルが付いている複数の VDB ファイルを、単一のアニメートされたスパース ボリューム テクスチャ シーケンスとしてインポートします。 連番でラベルが付いている VDB ファイルの一部であるソース ファイル (file0.vdb、file1.vdb、file2.vdb、など) のインポート時に、アニメートされた SVT が作成されます。インポータは、ファイルがシーケンスの一部であるかどうかを自動的に検出して Import Sequence チェックボックスを設定します。 |
| Attributes A | ユーザーがソース グリッドから個々のチャンネルを結果の SVT の (RGBA) チャンネルに割り当てることができます。各属性はページ テーブル テクスチャによって読み取られるタイル データ テクスチャを表します。このプロパティの横にある形式ドロップダウンでは、各タイル データ テクスチャが使用する形式の種類 (16 ビットの浮動小数、32 ビットの浮動小数、および 8 ビットの unorm) を選択します。0 ~ 1 の範囲にあるデータまたは属性には 8 ビットの unorm が使用されます。 |
| Attributes B | ソース ファイルにあるグリッドを表示し、ユーザーがソース グリッドから結果の SVT の (RGBA) チャンネルに個々のチャンネルを割り当てることができます。各属性はページ テーブル テクスチャによって読み取られるタイル データ テクスチャを表します。このプロパティの横にある形式ドロップダウンでは、各タイル データ テクスチャが使用する形式の種類 (16 ビットの浮動小数、32 ビットの浮動小数、および 8 ビットの unorm) を選択します。0 ~ 1 の範囲にあるデータまたは属性には 8 ビットの unorm が使用されます。 |
| Source File Grid Info | 名前付きインデックス、タイプ、ディメンションなど、インポートする VDB ファイルのグリッドに関する情報を表示します。 |
SVT のインポートおよび作成にかかる時間は、ソース VDB ファイルのディメンションおよびフレーム数によって異なります。
スパース ボリューム テクスチャ アセットは、インポート プロセス時に作成されます。ファイルを開くと、ボリュームの解像度、ミップ レベルの数、フレーム数などの情報が表示されます。
サンプラのアドレス指定方法またはタイリング方法を変更すると、ランタイム SVT データを再生成する必要があるため、時間がかかる場合があります。
マテリアルでスパース ボリューム テクスチャを使用する
マテリアルは、Sparse Volume Texture Object ノードと Sparse Volume Texture Sample ノードを使用してスパース ボリューム テクスチャをサンプリングできます。
SVT は 異種ボリューム、ボリュメトリック フォグ、および ボリュメトリック クラウド で使用できます。そのマテリアルは、マテリアル ドメインを ボリューム に、ブレンド モードを 加算 に設定することで、同様に設定されます。
Sparse Volume Texture Sample ノードは、UV 座標 (3D である必要がある) を受け取り、Attributes A と Attributes B 出力ピン (どちらも float4) から結果を取得します。SVT をマテリアル グラフのパラメータとして使用し、あらゆる種類のマテリアルでサンプリングすることができますが、異種ボリューム、ボリュメトリック フォグ、ボリュメトリック クラウドなど、ボリュームに設定されたマテリアル ドメインを使用してマテリアルで使用するときに最も便利です。
SVT をサンプリングするボリューム マテリアルの例を以下に示します。この例では、ワールド空間での位置に基づいて 3D UV 座標を計算しています。このロジックは SVT に特有ではなく、オプションです。UV 入力ピンが割り当てられていない場合、UV は次の画像に表示されているものと同じロジックを使用して自動的に計算されます。SVT サンプル ノードには 2 つの float4 出力 (Attribute A と Attribute B) がありますが、この例では、使用している SVT の密度が含まれている最初のチャンネルだけが使用されています。
これは、マテリアルでスパース ボリューム テクスチャをサンプリングする場合の最もシンプルな設定の例です。
スパース ボリューム テクスチャの UV 座標
スパース ボリューム テクスチャは 3D UV 座標でサンプリングされます。 標準の 2D テクスチャと同様に、UV 空間はすべての 3D (XYZ) で 0 から 1 に拡張します。 UV 空間は、SVT アセットを開くときに調査できる Volume Resolution プロパティに応じて広がります。
UV 空間は個々のフレームのバウンディング ボックスの結合として定義されます。 この結果として、異なるフレームで使用される同じ UV 座標が同じワールド空間のボクセルにインデックスを設定するので、バウンディング ボックスのサイズを考慮する必要がなくなります。
さらに、Texture Property ノードを使用して、2D テクスチャと同様にテクスチャ サイズとテクセル サイズをクエリすることができます。ブループリントから SVT のボリュームをクエリすることもできます。
Sparse Volume Texture ノードのミップ値
Sparse Volume Texture Sample ノードでは、ミップ値を処理する他のテクスチャ サンプリング ノードと同様に、ミップ値がサポートされています。
エンジン ソースのスパース ボリューム マテリアルの例
Unreal Engine には、SVT アセットを適用できる、設定済みの空のサンプル SVT マテリアルが付属しています。これは、コンテンツ ブラウザの [Engine (エンジン)] > [Engine Materials (エンジン マテリアル)] (名前は SparseVolumeMaterial) の下にあります。このマテリアルのコピーを作成して、そのインスタンスを作成します。
マテリアル インスタンスを開いたら、SparseVolumeTexture パラメータをオーバーライドし、インポートした SVT アセットを割り当てスロットに適用します。
異種ボリュームで SVT を表示する
異種ボリュームで SVT を使用するには、以下の手順を実行します。
- 異種ボリューム アクタをシーンに追加します。
- [Details] パネルで [Materials (マテリアル)] セクションに移動します。
- SVT ベースのマテリアルを [Element 0 (要素 0)] スロットに割り当てます。
異種ボリュームとそのプロパティの詳細については、「異種ボリューム」を参照してください。
ボリュメトリック フォグで SVT を表示する
ボリュメトリック フォグで SVT を使用するには、以下の手順を実行します。
- 指数関数的高さフォグ をシーンに追加します。
- [Details] パネルで [Volumetric Fog (ボリュメトリックフォグ)] を有効にします。
-
SVT マテリアルをメッシュに適用します。
メッシュが必要であれば、[Shape (形状)] カテゴリにある [Place Actors (アクタを配置)] パネルで キューブ 形状を使用します。
SVT はボリュメトリック フォグの解像度よりも多くのディテールを含むことができるので、よりよい結果を得るには、メッシュを拡大することが必要になる場合があります。 また、これらのコンソール変数を使用してボリュメトリック フォグの解像度を上げることが必要になる場合もあります。
r.VolumetricFog.GridPixelSize 4(デフォルトは 8)r.VolumetricFog.GridSizeZ 256(デフォルトは 128)
アニメートされたスパース ボリューム テクスチャを再生する
アニメートされた SVT を再生するには、ブループリントで マテリアル インスタンス ダイナミクス (MID) を使用する必要があります。SVT アニメーションは、そのマテリアル内で Sparse Volume Texture Parameter ノードを使用して駆動されます。これにより、アニメートされた SVT の各フレーム自体が静的な SVT であると考えて、SVT パラメータのすべてのティックを切り替えることができるようになります。
SVT をアニメートするロジックの設定時に考慮することが 2 点あります。
- Event BeginPlay は、アニメートされたスパース ボリューム テクスチャ コントローラーを作成します。これは、アニメートされた SVT を再生するための機能を備えたクラスです。これを容易にするには、割り当てられた SVT からフレームを抽出します。抽出されたフレームでは SVT シェーダー インターフェースも実装されているため、それ自体を SVT マテリアル パラメータにバインドできます。MID は、SVT パラメータを更新するために必要です。
- Event Tick はコントローラー変数の更新を呼び出します。これは、現在のフレームをフェッチしてマテリアル インスタンス ダイナミックの Sparse Volume Texture Parameter ノードに適用します。
次の例では、メッシュに適用され、ボリュメトリック フォグを使用してレンダリングされる SVT マテリアルの設定方法を示しています。これはワークフローの一例に過ぎません。ボリュメトリック クラウドを使用したい場合やアニメートされた SVT を使用したい他のユースケースでは、マテリアルのレンダリングに使用されるアクタやコンポーネントに MID を割り当てる必要があります。たとえば、クラウド マテリアルでは、ボリュメトリック クラウド コンポーネントのクラウド マテリアルを更新します。
異種ボリュームは例外です。そのコンポーネントですでにこのロジックがすべて実装されているため、SVT パラメータでマテリアルを作成し、アニメートされた SVT をこれに割り当てるだけで済みます。異種ボリューム コンポーネントは自動的にバックグラウンドで MID を作成し、SVT パラメータを更新します。
ボリュメトリック フォグで使用する、マテリアル インスタンス ダイナミック コンストラクションのブループリント ロジックを設定するには、以下の手順を実行します。
- SVT マテリアルで、グラフ内の Sparse Volume Texture Sample Parameter ノードを使用します。
- アクタ ブループリント を作成します。
- [Components (コンポーネント)] パネルで [+Add (+追加)] ボタンをクリックし、リストから キューブ メッシュを選択します。
- イベント グラフ で、Event BeginPlay ノードをドラッグして、Construct Object from Class ノードを追加します。
- Construct Object from Class で、クラスを [Animated Sparse Volume Texture Controller (アニメートされたスパースボリュームテクスチャコントローラー)] に設定します。
- Construct Object from Class ノードで [Return Value (戻り値)] を右クリックして [Promote to Variable (変数に昇格)] を選択します。
- [My Blueprint (マイブループリント)] パネルの [Components (コンポーネント)] 内で、名前 NewVar を「Controller」に変更します。
- Set Controller ノードをドラッグして、Set Sparse Volume Texture ノードを追加します。
- Set Controller ノードの出力ピンを Set Sparse Volume Texture ノードの Target 入力に接続します。
- Set Sparse Volume Texture ノードで Sparse Volume Texture ピンを右クリックして、[Promote to Variable] を選択します。
-
[My Blueprint] パネルの [Components] 内で Sparse Volume Texture 変数をクリックします。[Details] パネルの [Default Value (デフォルト値)] の下 で スパース ボリューム テクスチャ を設定します。
[Sparse Volume Texture] スロットを空のままにすると、SVT マテリアルはそのアニメーションを更新および再生しなくなります。
-
Set Sparse Volume Texture ノードをドラッグして、Play ノードを追加します。
Play ノードを使用すると、コントローラー上の Update() を呼び出すたびに、コントローラーが内部タイマーを更新するようになります。このタイマーによって、現在のフレームを抽出するときに「現在のフレーム」としてみなされるフレームが決まります。SVT の再生を制御できる Pause ノードと Stop ノードもあります。
- Set Controller ノードで、コントローラーの出力ピンをドラッグし、Play ノードの Target ピンに接続します。
- Play ノードをドラッグして、Create Dynamic Material Instance ノードを追加します。
- Create Dynamic Material Instance ノードで、[Parent (親)] ドロップダウンを SVT マテリアル に設定します。
- Create Dynamic Material Instance ノードで Return Value ピンを右クリックして [Promote to Variable] を選択します。
- [My Blueprint] パネルの [Components] 内で、名前 NewVar を「MID」に変更します。
- Set MID ノードの Return Value ピンをドラッグして、Set Material (Cube) ノードを追加します。
この部分のブループリント ロジックは次のようになります。
画像をクリックすると拡大表示されます。
SVT の各フレームを再生するようにブループリント ロジックを設定するには、以下の手順を実行します。
- [My Blueprint] パネルの [Components] で Controller 変数をグラフにドラッグし、[Get Controller (コントローラーを取得)] を選択します。
- Controller ノードをドラッグして、Update ノードを追加します。
- Event Tick の実行ピンを Update に接続します。
- Event Tick Delta Seconds ピンを Update ノードの Delta Time ピンに接続します。
- Update ノードをドラッグして、Get Current Frame ノードを追加します。
- Controller ノードをドラッグし、これを Get Current Frame ノードの Target ピンに接続します。
- [My Blueprint] パネルの [Components] 内で MID 変数をグラフにドラッグし、[Get MID (MID を取得)] を選択します。
- Get MID ノードをドラッグして、Set Sparse Volume Texture Parameter Value ノードを追加します。
- Get Current Frame ノードの Return Value ピンをドラッグして、Set Sparse Volume Texture Parameter Value ノードの Value ピンに接続します。
- Set Sparse Volume Texture Parameter Value で、Parameter Name を、SVT マテリアルの Sparse Volume Texture Sample Parameter の名前に設定します。
この部分のブループリント ロジックは次のようになります。
画像をクリックすると拡大表示されます。
シミュレート または プレイ イン エディタ (PIE) を実行すると、SVT はそのアニメーションをループ再生します。
ボリュメトリック フォグとともに使用されるアニメートされた SVT。
よい結果を得るには、いくつか調整が必要になる場合があります。
- ブループリントで、ボリュメトリック フォグの使用時により適切なボリューム解像度になるように、メッシュのサイズを調整します。前述の例では、キューブ メッシュを元のサイズの 20 倍に拡大しています。
- SVT マテリアルで、より大きい乗数値を使用して最後の乗算を行ってから、Extinction 入力に接続します。前述の例では、元の値 2.5 ではなく 7.5 を使用しています。
前述の例に加え、以下の操作を実行することもできます。
- コントローラーで使用可能な他の関数を使用して、フレーム インデックスまたは現在の時間を直接設定します。
- 再生速度は、コントローラーの Frame Rate プロパティを調整して設定します。デフォルトは 24 fps です。
- または、現在のフレームを取得するために、Get Current Frames For Interpolation 関数を使用して、最も近い 2 つのフレームと 0 と 1 の間の値を返して、それらの間で補間します。この方法を使用して 2 つの SVT パラメータ、線形補間アルファのスカラー パラメータを作成し、マテリアル グラフで Interpolation ノードを使用します。
アニメートされたスパース ボリューム テクスチャをシーケンサーで使用する
前述のセクションで作成されたアニメートされた SVT ブループリントを使用して、シーケンサーで再生を制御できるように拡張できます。[Expose to Cinematics (シネマティックスに公開)] として設定されている新しい変数を作成して Event Tick ロジックの一部を置き換えます。このワークフローは、スケルタルメッシュのアニメーション ブループリントをシーケンサーで制御する 方法と同様です。
アニメートされた SVT ブループリントの再生をシーケンサーで制御するように拡張するには、以下の手順に従います。
- アニメートされた SVT ブループリントを開きます。
- [My Blueprint] パネルの [Components] の下で Controller 変数をグラフにドラッグアンドドロップし、リストから [Get Controller (コントローラーを取得)] を選択します。
- Get Controller ノードをドラッグして、Get Duration ノードを追加します。
- Event Tick ノードの実行ピンを Get Duration ノードに接続します。
- Get Duration ノードをドラッグして、Set Time ノード ([Animated Sparse Volume Texture Controller] カテゴリにある) を追加します。
- Get Controller ノードを Set Time ノードの Target ピンに接続します。
- Get Duration ノードの Return Value ピンをドラッグして Multiply ノードを追加します。
- Multiply の出力ピンをドラッグして、Set Time ノードの Time 入力ピンに接続します。
- グラフ内で右クリックして、Fraction ノードを追加します。
- Fraction ノードの A 入力ピンを右クリックして [Promote to Variable] を選択します。変数を「Animation Alpha」という名前にします。
- Set Time ノードをドラッグして、Get Current Frame ノードを追加します。
- Controller ノードをドラッグし、これを Get Current Frame ノードの Target ピンに接続します。
- [My Blueprint] パネルの [Components] の下で MID 変数をグラフにドラッグし、[Get MID (MID を取得)] を選択します。
- Get MID ノードをドラッグして、Set Sparse Volume Texture Parameter Value ノードを追加します。
- Get Current Frame ノードの Return Value ピンをドラッグして、Set Sparse Volume Texture Parameter Value ノードの Value ピンに接続します。
- Set Sparse Volume Texture Parameter Value ノードで、Parameter Name を、SVT マテリアルで使用される Sparse Volume Texture Sample Parameter の名前に設定します。
- [My Blueprint] パネルの [Components] の下で AnimationAlpha 変数を選択します。 [Details] パネルで [Expose to Cinematics (シネマティックスに公開)] のボックスを選択します。
- コンパイルして保存します
アニメートされた SVT ブループリント ロジックは、Event Tick パスでは次のようになります。
画像をクリックすると拡大表示されます。
このロジックを設定して、アニメートされた SVT ブループリント のシーケンサーに トラック を追加すると、トラックの横にある [+Add (+追加)] アイコンをクリックしたときに、AnimationAlpha 変数がリストに表示されます。
追加すると、変数は [Sequencer (シーケンサー)] パネルでキー設定できます。
ストリーミング パフォーマンスに関する注記
- アニメートされた SVT のリアルタイム再生
- アニメートされた SVT のリアルタイム再生は、ボリューム データの解像度とスパースの度合いに大きく左右されます。データをストリーミングするのに時間がかかる場合、レンダリングはより粗いミップ レベルにフォールバックし、ビジュアルの忠実度が低下します。これを回避する方法を以下に示します。
- VDB のインポート時により小さいピクセル形式を使用すると、ストリーミング パフォーマンスが向上します(通常、リアルタイムのユースケースでは 32 ビットは大きすぎます)。
- アニメーションのフレームレートを下げます。
- より低い解像度のミップ レベルを使用します。
- この方法を使用する場合は、アニメートされた SVT コントローラーまたは異種ボリューム コンポーネント設定でミップ レベルを設定する必要があります。Sparse Volume Texture Sample ノードで MipLevel 入力ピンを設定すると、指定されたミップ レベルでサンプリングしようとしますが (ストリーミングされていた場合)、ストリーミング自体はそこでは制御されません。 ストリーミング パフォーマンスを調整するのに役立つコンソール変数
r.SparseVolumeTexture.Streaming.NumPrefetchFramesは、特定のフレームがストリーミング システムでリクエストされたときにプリフェッチするフレーム数です。デフォルトは 3 フレームです。ほとんどの場合で正しく機能しますが、値は SVT によって異なります。値を非常に高く設定すると、リクエストでストリーミング システムが停止する場合があります。この値が小さすぎると、レンダリングに必要な時間までにフレームが十分にストリーミングされなくなる可能性があります。r.SparseVolumeTexture.Streaming.PrefetchMipLevelBiasは、プリフェッチされたフレームのミップ レベルにバイアスを適用します。プリフェッチはさらに高いミップ レベル (低い解像度) で行われます。このバイアスは、フレームがプリフェッチされるレベルにミップ レベルを変更する際に使用できます。負の値に設定するとフレームはより高い解像度のミップ レベルでプリフェッチされ、正の値にするとフレームはより低い解像度のミップ レベルでプリフェッチされます。r.SparseVolumeTexture.Streaming.PrintMemoryStatsは、ストリーミング システムに登録されているすべての SVT に関するメモリ情報を出力します。ストリーミング パフォーマンスは、通常、30 ~ 50 MB より大きい SVT フレームの場合に下がります。デフォルトのフレームレートである 24 で再生しようとする場合、パフォーマンスは、使用しているプラットフォームおよび PC によって大きく異なります。ストリーミング パフォーマンスは、現在ストリーミングしている SVT の数にも依存します。
- 再生をブロックする
- 特定のユースケース (オフライン プロダクション) では、前述の方法で妥協したくない場合があります。現在のフレームをレンダリングするときにすべてのミップがストリーミングされることを保証するため、ストリーマーではリクエストのブロックをサポートしています。リクエストがブロックされると、指定したフレームへロードするための IO リクエストが発行され、すぐにそれが完了するのを待機します。リクエストのブロックはフレーム レートに影響を与える可能性があり、現在のゲーム時間を使用してアニメーション再生を制御すると、フレームが「スキップ」される場合があります。しかし、シーケンサーを使用してフレームをレンダリングすると、シーケンサーがレンダリングする SVT フレームを指定するため、前のフレームと現在のフレームをレンダリングする間にリアルタイムで 5 分間経過しても、このスキップの問題は発生しません。通常、これは SVT アセットをデバッグする方法であるため、SVT ビューアには適用されません。
- 確率的ミップ フィルタリング
- これは、最も近い 2 つのミップ レベルが確率的にサンプリングされるバーチャル テクスチャと類似した最適化です。これによって、テクスチャのサンプル数が実質的に半分に減るため、パフォーマンスが向上します。「空中爆発」の 5 つのインスタンスがある次のシーンを 2GB/秒の I/O 帯域幅でストリーミングする場合を例にとると、このシーンには、帯域幅リミッターなしで、投影スクリーン空間サイズに応じたスケーリングなしでは、約 25GB/秒の帯域幅が必要になります。

制限事項
- ページ テーブル テクスチャのサイズは 2 GB (ギガバイト) に制限されており、最大仮想 SVT 解像度は、X および Y の範囲では 32k 単位を超えることはできません。Z 軸は 16k 単位に制限されています。
- たとえば、32k x 100 x 100 単位のボリューム、100 x 32k x 100 単位のボリューム、または 100 x 100 x 16k 単位のボリュームにすることができます。この例の 100 は、ページ テーブルのサイズが 2GB の上限を下回ったままになる、十分に低い値です。
- アニメートされた SVT のリアルタイム再生は、ボリューム データの解像度とスパースの度合いに大きく左右されます。データをストリーミングするのに時間がかかる場合、レンダリングはより粗いミップ レベルにフォールバックし、ビジュアルの忠実度が低下します。これに対処するには、アニメーションのフレーム レートを下げるか、より低い解像度のミップ レベルを使用します。VDB ファイルのインポート時により小さいピクセル形式を選択すると、ストリーミング パフォーマンスも向上することがあります。
- サポートされているプラットフォーム:
- 現時点では、シェーダー モデル 5 (SM5) およびシェーダー モデル 6 (SM6) を使用して、DX11 および DX12 を備えた Windows でサポートされています。
- 現時点では、VDB インポートは Windows エディタ ビルドでのみ機能します。クック済みビルドでは、SVT のストリーミングおよびレンダリングに必要なパフォーマンスを備えたプラットフォームで SVT がサポートされています。
- SVT はモバイル レンダラでは機能しません。
その他のリソース
- このページのサンプルで使用されている VDB ファイルは、EmberGen で作成された JangaFX の無料の VDB セットです。
- 無料のサンプルは、こちら でダウンロードできます。





