スパース ボリューム テクスチャ (SVT) は、3D データ構造体でテクセル (ボクセル) を格納するテクスチャです。データは 3D UV 座標でインデックス化でき、この点で SVT は 3D テクスチャとボリューム テクスチャと同様です。通常の (密度の高い) ボリューム テクスチャと異なり、SVT は「重要な」データを含むボリュームの領域でメモリを費やすだけで済みます。ボリューム テクスチャの密度と比較すると、より大きなボリュームまたは同じ範囲でメモリの消費を抑えることができます。
スパース ボリューム テクスチャの種類
スパース ボリューム テクスチャは、静的ボリュームまたはアニメートされたボリュームとして表現できます。静的な SVT は単一のボリュームで、アニメートされた SVT はフリップブック アニメーションと同様に再生できる一連のボリューム (フレーム) です。
左は静的な単一のボリュームの SVT で、右はアニメートされた SVT です。
これらの SVT は、異種ボリューム アクタを使用してレンダリングされます。これらの使用方法の詳細については、「異種ボリューム」を参照してください。
スパース ボリューム テクスチャのコンポジション
スパース ボリューム テクスチャは複数のテクスチャで構成されています。これには、ボリュームを構成する 物理的なタイル データ テクスチャへの間接参照として機能する ページ テーブル テクスチャが含まれています。これらのタイル データ テクスチャは、ボリュームにテクスチャ データを格納するものであり、最大 2 つのテクスチャを使用して、属性 A と属性 B としてデータおよびボリュームの属性を格納します。
属性 A と B のそれぞれが RGBA テクスチャ チャンネルを使用してデータを格納し、データ格納用に最大 8 つのチャンネルが提供されます。データはテクスチャ ルックアップ (SVT に応じて合計 2 つまたは 3 つのルックアップの場合、ページ テーブル用に 1 つのルックアップ、物理タイルデータごとに 1 つのルックアップ) を介して取得されます。つまり、SVT は、ページ テーブルとタイル データ テクスチャが 1 対 1 の関係ではなく、両方の物理タイル データ テクスチャに対して単一のページ テーブル ルックアップを共有します。
SVT (属性 A と B) の 2 つのタイル データ テクスチャには、異なるピクセル形式 (16 ビット、32 ビット、8 ビットの unorm) があります。RGBA テクスチャ チャンネルのいずれかが属性リストのいずれかで使用されない場合、チャンネルがより少ないピクセル形式の使用が試みられます。チャンネルが使用されない場合、メモリを消費しません。
| テクスチャ形式 | テクスチャ | Unreal Engine での表現 |
|---|---|---|
| ページ テーブル | ![]() |
![]() |
| 物理的な 3D タイル | ![]() |
![]() |
スパース ボリューム テクスチャを表示する方法
以下のように、スパース ボリューム テクスチャを操作できます。
- ボリュームドメインのマテリアル
- 異種ボリューム アクタ
- ボリュメトリック フォグ
- ボリュメトリック クラウド
- スパース ボリューム テクスチャ ビューア
異種ボリューム アクタとコンポーネント
異種ボリュームは、スパース ボリューム テクスチャ マテリアル ノードをボリュームドメインのマテリアルに取り入れることで、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 の場合、[Animate (アニメート)] チェックボックスを使用して SVT のフレームのループを再生します。Frame Rate プロパティは、再生の fps 数を指定します。デフォルトでは、プレビューアは 24 fps に設定されています。Animate プロパティにチェックを入れないでおくと、Animation Frame プロパティ値を使用して、SVT でフレームをスクラブ再生できます。
左はアニメーションのない SVT プレビューで、右はアニメートされたフレームでループしている SVT です。
SVT ビューアでは、一度に単一のテクスチャ チャンネルを表示します。最も便利なのは SVT アセットの単一のチャンネルを調査することで、ボリューム テクスチャに格納されたデータに応じて適切に動作します。インポートされた速度データは密度として表示され、予期しない結果を返します。
Preview Attribute 選択ボックスを使用して、プレビューする属性チャンネルを選択します。最初のチャンネル [AttributesA Red] がデフォルトで使用されます。
スパース ボリューム テクスチャ ビューアには以下のプロパティがあります。
| プロパティ | 説明 |
|---|---|
| Sparse Volume Texture Preview | プレビューアで使用される SVT アセット。 |
| Animate | プレビューアが SVT アセットのフレームの再生をループするかどうかを切り替えます (複数ある場合)。 |
| Reverse Playback | アニメートされた SVT のフレームを逆再生します。[Animate] チェックボックスも設定する必要があります。 |
| Blocking Streaming Requests | SVT ストリーミング マネージャーにすべてのストリーミング リクエストを送信後すぐにブロック (待機) するように通知します。このプロパティの効率的な使用の詳細については、「ストリーミングのパフォーマンスに関する注記」セクションを参照してください。 |
| Animation Frame | 値を入力するか、スライダーをドラッグして、アニメートされた SVT のフレームをスクラブ再生します。Animate が無効の場合、このプロパティは編集可能です。 |
| Frame Rate | この SVT アニメーションを再生するフレーム レートを指定します。たとえば、24、30、48、60 です。Animate が有効の場合、このプロパティは編集可能です。 |
| Animation Time | Frame Rate 設定に関する SVT のアニメーションの長さ。 |
| Preview Attribute | プレビューする属性を選択します。1 つの SVT に複数含まれている場合でも、一度にプレビューできるのは 1 つだけです。 |
| Mip Level | レベルの値を設定すると、ビューアのボリューム テクスチャの品質が表示されます。 |
| Extinction | ボリュームの透明度を設定します。Extinction は吸収 (パーティクルをヒットして吸収される光線) と散乱 (パーティクルをヒットし、カメラに到達しない別の方向に散乱 / 偏向した光線) の合計です。大きな値を使用すると、小さな値より透明に見えます。 |
スパース ボリューム テクスチャを操作する
スパース ボリューム テクスチャは、インポートされた VDB (ボクセル データ ベース) ファイルから作成されます。これらは、スパース ボリューム データを格納するために広く使用されている形式です。VDB データが Unreal Engine にインポートされると、スパース ボリューム表現に変換されます。
VDB ファイルには、いわゆる「グリッド」 (ボリュームの別名) が含まれています。これらのグリッドには、密度、速度、温度など、さまざまなタイプのコンポーネントがあります。SVT は次のタイプのグリッド / ボリュームのインポートをサポートしています:浮動小数 (float、float2、float3、float4)、倍精度 (double、double2、double3、double4)、および半精度 (half, half2, half3, half4)。
Unreal Engine ではすべてのタイプの VDB のインポートをサポートしていますが、現在、SVT は倍精度形式をサポートしていません。インポート時にデータは 8/16/32 ビットに変換されます。また、インポートされたトランスフォームはまだサポートされておらず、すべてのグリッドは同じ (アイデンティティ) トランスフォームを使用していると想定されています。結果の SVT 解像度 / ディメンションは、インポートされたグリッドすべてのディメンションの結合です。
VDB ファイルをインポートする
VDB ファイルをインポートするには、以下のいずれかの操作を実行します。
- VDB を直接コンテンツ ブラウザにドラッグアンドドロップします。
- コンテンツ ブラウザで [Import (インポート)] ボタンを使用します。
VDB には、静的な VDB ファイルおよびアニメートされた VDB ファイルをインポートするためのインポート ウィンドウがあります。
番号の付いたフレーム以外に同じ名前を含むアニメートされた VDB ファイルをインポートする場合、アニメートされたシーケンスから 1 つのファイルをインポートするだけで済み、インポータはこれを VDB のシーケンスに属するものとして認識します。アニメートされた VDB シーケンスのすべてのファイルを選択し、一度にすべてをインポートする場合、各ファイルはそのシーケンスを作成するため、複数のアニメートされた同じ SVT が作成されます。
![]() |
![]() |
|---|---|
| SVT インポート オプション:静的な単一のフレーム VDB | SVT インポート オプション:アニメートされた VDB シーケンス |
インポート オプションには、以下の情報と設定があります。
| プロパティ | 説明 |
|---|---|
| Import Static / Animated | インポートする VDB のタイプ (静的またはアニメート済み) を表示します。 |
| Current Asset | インポートされる VDB のファイル パス。 |
| Import Sequence | 順にラベルが付いた複数の VDB ファイルを単一のアニメートされたスパース ボリューム テクスチャ シーケンスとしてインポートします。 |
| Attributes A | ユーザーはソース グリッドから個々のチャンネルを結果の SVT の (RGBA) チャンネルに割り当てることができます。各属性はページ テーブル テクスチャによって読み取られるタイル データ テクスチャを表します。このプロパティの横にある形式ドロップダウンでは、各タイル データ テクスチャが使用する形式の種類 (6 ビットの浮動小数、32 ビットの浮動小数、および 8 ビットの unorm) を選択します。8 ビットの unorm は、0 から 1 の範囲にあるデータ / 属性に使用します。 |
| Attributes B | ソース ファイルにあるグリッドを示し、ユーザーがソース グリッドから結果の SVT の (RGBA) チャンネルに個々のチャンネルを割り当てるのを許可します。各属性はページ テーブル テクスチャによって読み取られるタイル データ テクスチャを表します。このプロパティの横にある形式ドロップダウンでは、各タイル データ テクスチャが使用する形式の種類 (6 ビットの浮動小数、32 ビットの浮動小数、および 8 ビットの unorm) を選択します。8 ビットの unorm は、0 から 1 の範囲にあるデータ / 属性に使用します。 |
| 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 固有ではありません。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 のボリュームをクエリすることもできます。
エンジン ソースのスパース ボリューム テクスチャの例
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 点あります。
- BeginPlay イベントはアニメートされたスパース ボリューム テクスチャ コントローラーを作成します。これは、アニメートされた SVT を再生するための機能を備えたクラスになります。これを容易にするには、割り当てられた SVT からフレームを抽出します。抽出されたフレームは SVT シェーダー インターフェースも実装し、それ自体を SVT マテリアル パラメータにバインドできます。MID は、SVT パラメータを更新するために必要です。
- Event Tick はコントローラー変数の更新を呼び出します。これは、現在のフレームをフェッチしてマテリアル インスタンス ダイナミックの Sparse Volume Texture Parameter ノードに適用します。
この例は、メッシュに適用され、ボリュメトリック フォグを使用してレンダリングされた SVT マテリアルの設定方法を示しています。これは 1 つの方法にすぎません。ボリュメトリック クラウドを使用したい場合や、アニメートされた SVT を使用したい他のユースケースでは、MID をマテリアルのレンダリングに使用されるすべてのアクタ / コンポーネントに割り当てる必要があります。たとえば、クラウド マテリアルでは、ボリュメトリック クラウド コンポーネントのクラウド マテリアルを更新します。
異種ボリュームは例外です。そのコンポーネントがこのロジックすべてを実装しているので、SVT パラメータでマテリアルを作成し、アニメートされた SVT をこれに割り当てるだけで済みます。異種ボリューム コンポーネントは自動的にバックグラウンドで MID を作成し、SVT パラメータを更新します。
ボリュメトリック フォグで使用するために、マテリアル インスタンス ダイナミック コンストラクションのブループリント ロジックを設定するには、以下の手順に従います。
- SVT マテリアルで、グラフ内の Sparse Volume Texture Sample Parameter ノードを使用します。
- アクタ ブループリント を作成します。
- [Components (コンポーネント)] パネルで [+Add (+追加)] ボタンをクリックし、リストから キューブ メッシュを選択します。
- [Event Graph (イベント グラフ)] で 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 Material (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 上の、SVT マテリアルで Parameter Name を 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 のインポート時に小さいピクセル形式を使用すると、ストリーミング パフォーマンスが改善されます。
- アニメーションのフレーム レートを下げます。
- 低い解像度のミップ レベルを使用します。
- この方法を使用すると、ミップ レベルをアニメートされた 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 によって大きく異なります。
- ストリーミング パフォーマンス
- ストリーミング マネージャーがリクエストに対応できない場合 (フレーム レートが高すぎるか、各フレームがストリーミングするデータに対して大きすぎる)、ストリーマーがより粗いミップ レベルにフォールバックします。これは、通常、より小さい形式 (32 ビットはこの問題を示すのに適切ではありません) を使用するか、より低いフレーム レートを使用することで、あるいはその両方を行って修正できます。
- 特定のユースケース (オフラインのプロダクション) で、この方法で妥協したくない場合があります。現在のフレームをレンダリングするときにすべてのミップをストリーミングする保証も必要です。この目的のために、ストリーマーはリクエストのブロックをサポートしています。リクエストされたフレーム / ミップでロードする IO リクエストを発行し、すぐに IO リクエストが完了するのを待機します。これはフレーム レートに影響を与える可能性があり、現在のゲーム時間を使用してアニメーション再生を制御すると、フレームが「スキップ」される場合があります。しかしながら、シーケンサーを使用してフレームをレンダリングすると、シーケンサーがレンダリングする SVT フレームを正確に指定するので、前のフレームと現在のフレームのレンダリング間でリアルタイムで 5 分間経過しても、このスキップの問題は発生しません。通常、これは SVT のデバッグする方法であるため、SVT ビューアに適用されません。
制限事項
- ページ テーブル テクスチャのサイズは 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 の制限を下回るようにしています。
- X が 32k 以内かつ Y が 32k 以内かつ Z が 16k 以内になる制限を計算します。
- マテリアルの異なる部分で同じ SVT リソースを呼び出す場合、同じリソースを共有しているため、警告が表示されます。
- アニメートされた SVT のリアルタイム再生は、ボリューム データの解像度とスパースの度合いによって異なります。データをストリーミングするのに時間がかかる場合、レンダリングはより粗いミップ レベルにフォールバックし、ビジュアルの忠実度が低下します。これに対処するには、アニメーションのフレーム レートを下げるか、より低い解像度のミップ レベルを使用します。VDB のインポート時に小さいピクセル形式を選択すると、ストリーミング パフォーマンスも改善されます。
- 対応プラットフォーム:
- 現在、シェーダー モデル 5 (SM5) とシェーダー モデル 6 (SM6) を使用して、DX11、DX12 で Windows およびコンソールでサポートされています。
- VDB インポートは、Windows エディタ ビルドでのみ機能します。クックされたビルドは、ストリーミングとレンダリングに必要なパフォーマンスに対応したプラットフォーム上で SVT をサポートしています。
- SVT はモバイル レンダラで機能します。
その他のリソース
- このページの例で使用される VDB ファイルは、EmberGen で作成された JangaFX の無料の VDB セットです。
- 無料サンプルは、ここ でダウンロードできます。





