ランタイム仮想テクスチャリング

ランタイム仮想テクスチャの有効化と使用についての概要です。

Windows
MacOS
Linux

ランタイム仮想テクスチャ (RVT) は、実行時に GPU を使用してオンデマンドでテクセル データを作成し、従来のテクスチャ マッピングと同じように機能します。RVT は、広い領域にわたるシェーディング データをキャッシュするので、テレインに沿って適用できるデカール型のマテリアルやスプラインを使用するランドスケープ シェーディングに適しています。

ワークフロー

プロジェクトにランタイム仮想テクスチャを設定し、使用する基本の手順は次のとおりです。

  1. コンテンツ ブラウザで Runtime Virtual Texture (ランタイム仮想テクスチャ) アセットを作成します。これはすべてのコンポーネント (アクタ、RVT ボリューム、RVT マテリアル) を連携して、ランタイム仮想テクスチャをレンダリングする目的で使用されます。

  2. [Modes (モード)] パネルから [Runtime Virtual Texture Volume (ランタイム仮想テクスチャ ボリューム)] をシーンに追加します。これは、シーンへの RVT アセットの配置に使用されます。

  3. RVT アセットに書き込みを行うようにマテリアルを設定します。

  4. RVT アセットからサンプリングするようにマテリアルを設定します。

  5. RVT アセットにレンダリングする Primitives アクタまたは Landscape アクタを 1 つ以上設定します。

RVT を設定する詳細な手順については、「Runtime Virtual Texturing Quick Start (ランタイム仮想テクスチャリング クイック スタート ガイド)」を参照してください。このガイドでは、ランタイム仮想テクスチャリングで使用するランドスケープ マテリアルと追加のシーン アクタを設定します。

ランタイム仮想テクスチャリングのコンポーネント

Unreal Engine 4 (UE4) プロジェクトでランタイム仮想テクスチャを設定し、操作するには、次のコンポーネントを使用します。

ランタイム仮想テクスチャ アセット

ランタイム仮想テクスチャ アセットには、シーンに RVT を作成するときに使われる詳細なコンフィギュレーション情報が保持されています。これは RVT システムの基軸と言えるもので、RVT にレンダリングする、シーン内のマテリアルとアクタを連携します。

RVT アセットは、以下のコンポーネントによって参照されます。

  1. シーンに配置された各 ランタイム仮想テクスチャ ボリューム は、1 つの RVT アセットに割り当てられます。

  2. 個々のシーン アクタ に割り当てられる RVT アセットの数には制限はなく、割り当てられた RVT アセットの 1 つを使用するボリュームの境界内にあるときは、ランタイム仮想テクスチャにレンダリングされます。

  3. RVT ボリュームから RVT にアクタをレンダリングする前に、アクタの マテリアル仮想テクスチャ マテリアル ドメインを使用するか、適切に設定された RVT マテリアル式を使用しておく必要があります。

右クリックのコンテキスト メニューまたは [Add New (新規追加)] ボタンを使用して、コンテンツ ブラウザから RVT アセットを新規作成します。[Materials & Textures (マテリアル・テクスチャ)] カテゴリから [Runtime Virtual Texture (ランタイム仮想テクスチャ)] を選択します。

クリックしてフルサイズ表示

追加されたアセットをダブルクリックして開き、そのアセット専用のエディタ ウィンドウで設定を構成します。

RVT_Asset_Window.png

このウィンドウを使用して、ランタイム仮想テクスチャがサポートするマテリアルのサイズ、タイル サイズ、タイプを定義します。

これらの設定の詳細と使い方については、「Virtual Texture Settings (仮想テクスチャの設定)」ページを参照してください。

ランタイム仮想テクスチャ ボリューム

ランタイム仮想テクスチャ ボリューム は、シーンへの RVT アセットの配置に使用されます。このボリュームには、マテリアルが作成された時点でレンダリングするアクタが含まれます。通常、このマテリアルは、ランドスケープまたはサーフェス テレイン型プリミティブです。

Modes_RVTVolume.png

ランタイム仮想テクスチャからサンプリングされるプリミティブや、ランタイム仮想テクスチャに書き込むプリミティブは、ボリュームの境界内にある必要があります。RVT ボリュームを配置するときは、レベルの [Details (詳細)] パネルの [Transform from Bounds (境界からトランスフォーム)] のパラメータを使用すると、選択したアクタに対してボリュームの配置やスケーリングをすばやく実行できます。通常、これは、シーン内のランドスケープなどのアクタになります。

  1. [Modes (モード)] パネルから [Runtime Virtual Texture Volume (ランタイム仮想テクスチャ ボリューム)] をシーンにドラッグします。

  2. ボリュームが選択されている状態で、レベルの [Details (詳細)] パネルの [Transform from Bounds (境界からトランスフォーム)] カテゴリを参照し、 [Source Actor (ソース アクタ)] からアセットを選択するか、スポイト アイコンを使ってシーン内の任意のアクタを選択します。

  3. [Copy Rotation (回転をコピー)] および [Copy Bounds (境界をコピー)] ボタンを使用して、ボリュームの位置やスケール、回転をすばやく設定します。

RVT にレンダリングされるオブジェクトは、RTV ボリュームの Z 軸の負方向への垂直投影を使用してレンダリングされます。

ランタイム仮想テクスチャ マテリアル式

RVT アセットに割り当てられているシーン アクタについては、マテリアルを設定して以下のアクションを有効にする必要があります。

  • [Material Domain (マテリアル ドメイン)][Virtual Texture (仮想テクスチャ)] に設定します。これだけで他に設定をしなくても、アクタはシーン内の RVT へ書き込まれます。

  • RVT アセットへの書き込みを有効にするマテリアル ロジックを追加します。これで、オブジェクトがシーン内の最終的な RVT に合成されます。

[Material Domain (マテリアル ドメイン)]: [Virtual Texture (仮想テクスチャ)]

[Details (詳細)] パネルを使用して、 [Material Domain (マテリアル ドメイン)][Virtual Texture (仮想テクスチャ)] に設定し、シーン内の RVT にレンダリングされるようにします。

RVT_1_MaterialDomainVT.png

Main Material ノードは、RVT ボリュームとシーン アクタに割り当てられているものと同じ RVT アセットを使用するシーン内で、バインドされている RVT への書き込みに使用されます。特に追加で設定をしなくても、マテリアルやアクタがシーン内の RVT にレンダリングされます。

ランタイム仮想テクスチャの書き込みとサンプリング

シーン内の RVT への書き込みまたは RVT からのサンプリングを行うには、まず、マテリアルに対するこれらの操作を処理する RVT 式を設定する必要があります。

  • 仮想テクスチャへの書き込みと仮想テクスチャからのサンプリングの両方を行う単一のマテリアルを定義するには、Runtime Virtual Texture Output (ランタイム仮想テクスチャの出力) 式を使用します。既存のマテリアル ロジックはこのノードに接続します。

    Mat_RVTOutput.png

  • Runtime Virtual Texture Sample (ランタイム仮想テクスチャのサンプル) 式は、サンプリングする割り当てられた RVT アセットを取得し、このマテリアル用に出力します。

    Mat_RVTSample.png

以下は、バインドされている RVT アセットに対して書き込みとサンプリングを行うランドスケープ マテリアルの例です。このマテリアルでは、プラットフォームが仮想テクスチャリングをサポートしていない場合、フォールバックして従来のランドスケープのレンダリングを実行するロジックも使用しています。

クリックしてフルサイズ表示

その他のマテリアル式

マテリアルは、RVT と使用する場合、以下の 2 種類のコンテキストのいずれかでコンパイルされます。

  • RVT へレンダリング

  • 他のパスへレンダリング

マテリアル ロジックの一部を RVT にレンダリングする場合は、Runtime Virtual Texture Replace (ランタイム仮想テクスチャの置換) 式が最適です。

Mat_RVTReplace.png

View Property (プロパティの表示) 式にも RVT 固有のオプションが 2 つほどあります。

  • Virtual Texture Output Level (仮想テクスチャの出力レベル) ノードは、現在レンダリング中の RVT のミップ レベルを出力します。

    Mat_ViewPropertyVTOutputLevel.png

  • Virtual Texture Output Derivative (仮想テクスチャの出力の成果物) ノードは、現在の仮想テクスチャ出力の単一のテクセルがカバーするワールド空間の X および Y のサイズを出力します。

    Mat_ViewPropertyVTOutputDerivative.png

これらの式のユースケースの例としては、RVT での距離ベースのシェーディングの使用を模倣することが挙げられます。RVT シェーディングはカメラに依存しないため、このタイプのシェーディングは直接表現できません。ただし、シェーディングをミップ レベルに依存させることで、同様の効果を得ることができます。Runtime Virtual Texture Replace (ランタイム仮想テクスチャの置換) ノードは、ミップ レベルに依存するシェーディング パスの実装に使用できますが、対象になるのは Runtime Virtual Texture Output (ランタイム仮想テクスチャの出力) ノードのみです。

Virtual Texture Feature Switch (仮想テクスチャ) は、仮想テクスチャリングがサポートされていない場合に、代替パスを使用するマテリアル ロジックを用意する場合に有効です。

シーン アクタの出力のプロパティ

シーンに配置されているアクタは RVT にレンダリングできます。RVT へのレンダリングに適したアクタは、以下の通りです。

RVT へのレンダリングに最適なアクタ

RVT へのレンダリングに適さないアクタ

  • ランドスケープおよびランドスケープ スプライン

  • スタティック メッシュおよびインスタンス化スタティック メッシュ

  • フォリッジ インスタンス (デカール スキャタリング)*

  • スケルタル メッシュ

  • ムーバブル スタティック メッシュ

  • アニメーション化されたメッシュ

RVT コンテンツは実質的にシェーディング キャッシュになるため、フレームごとに更新されません。つまり、RVT にレンダリングされるオブジェクトの可動性は スタティック になることが想定されています。スキニングされ、アニメーション化されたプリミティブは、RVT へのレンダリングには適していません。

アクタの [Details (詳細)] パネルの [Render to Virtual Textures (バーチャル テクスチャへレンダリング)] 配列を使用して、シーンでレンダリングできる RVT アセットを指定します。アクタは複数の RVT に割り当てることができます。RVT へのレンダリングは、RVT アセットが、シーンに配置済みの RVT ボリュームに割り当てられていて、アクタのマテリアルが適切に設定された場合にのみ実行されます。

例については、「Runtime Virtual Texture Quick Start (ランタイム仮想テクスチャのクイック スタート ガイド)」を参照してください。また、「Virtual Texture Setting Reference (仮想テクスチャ設定リファレンス)」 も参照してください。

シーンでの RVT へのレンダリング時のアクタのビヘイビアをさらに制御するには、以下のセクションを参照してください。

Virtual Texture Pass Type (仮想テクスチャのパス タイプ)

プロジェクトで仮想テクスチャリングに関して、ランドスケープとプリミティブのレンダリングを制御するには、[Virtual Texture Pass Type (仮想テクスチャのパス タイプ)] のオプションを使用します。プリミティブが RVT にレンダリングされるか、仮想テクスチャリングをサポートしないプラットフォームでプロジェクトを実行する必要がある場合は、主パスを変更する必要がある場合があります。

このオプションを使うと、RVT にレンダリングするオブジェクトを制御できます。

RVT_Actor_RVTAsset_PassType.png

オプション

説明

Virtual Texture Only (仮想テクスチャのみ)

主パスにアクタをレンダリングしません。そのため、シーンに RVT がない場合は、アクタは一切レンダリングされません。このオプションは、仮想テクスチャがサポートされていない場合は不要なアイテム (デカール型のマテリアルなど) に使用します。例えば、RVT に出力されるマテリアルがあるスタティック メッシュ平面では、デカールのようなマテリアルを RVT ランドスケープ マテリアルに書き込みます。プラットフォームまたは機能レベルが仮想テクスチャリングをサポートしていない場合、スタティック メッシュ平面は主パスにレンダリングされません。

Virtual Texture OR Main Pass (仮想テクスチャまたは主パス)

仮想テクスチャのサポート状態に応じて、アクタを RVT または主パスにレンダリングします。例えば、道路のメッシュとマテリアルをレンダリングするランドスケープ スプラインは RVT に書き込み、スプラインに沿ってマテリアルを適用します。ただし、シーンに有効な RVT がないか、仮想テクスチャリングの機能レベルのサポートがない場合でも、スプラインの道路メッシュはランドスケープに表示されます。

Virtual Texture AND Main Pass (仮想テクスチャと主パス)

仮想テクスチャのサポート状態にかかわらず、アクタを RVT と主パスにレンダリングします。これは、RVT への書き込みと RVT からのサンプリングが必要なオブジェクト (ランドスケープなど) に最適です。例えば、RVT へのデータの書き込みと、最終的な RVT のレンダリングの両方が設定されているランドスケープ マテリアルは、常に表示される必要があります。

RVT にレンダリングされるプリミティブのシャドウのキャストとコリジョンは無効にすることをお勧めします。これらは自動的には無効になりません。

LOD とミップの設定

仮想テクスチャの詳細設定を展開して表示されるプロパティを使用すると、詳細度 (LOD) とカリングのビヘイビアを設定して、アクタを RVT にどのようにレンダリングするかを制御できます。これらのパラメータには、アクタのレベルの [Details (詳細)] パネルからアクセスします。

シーン内のプリミティブの場合は、以下のプロパティを調節します。

RVT_Actor_LODSettings.png

プロパティ

説明

Virtual Texture LOD Bias (仮想テクスチャの LOD バイアス)

RVT へのレンダリングの LOD を設定します。この LOD は、レンダリングされるプリミティブがカバーする仮想テクスチャのページの範囲を基に自動的に選択されます。このオプションを使うことで、適用するバイアスを調整できます。値を高くすると、詳細度の低い LOD が強制的に使用されます。

Virtual Texture Skip Mips (仮想テクスチャでスキップするミップ)

RVT 内で解像度の最も低いミップからここで指定した個数までのミップについて、当該プリミティブのレンダリングをスキップします。指定された描画距離を超えてプリミティブをレンダリングする必要がないことがたしかな場合、このオプションを使うと、RVT にレンダリングするコストを削減できます。

Virtual Texture Min Coverage (仮想テクスチャの最小カバレッジ)

この値を設定すると [Virtual Texture Skip Mips (仮想テクスチャでスキップするミップ)] のパラメータを無視し、RVT ミップのプリミティブを、そのミップでの予想される投影サイズを基にカリングします。この値の単位はピクセルですが、対数領域になります。例えば、値「3」を設定した場合、投影サイズが 8 ピクセル未満であれば、プリミティブがカリングされます。

シーン内のランドスケープの場合は、以下のプロパティを調節します。

RVT_Actor_Landscape_LODSettings.png

プロパティ

説明

Virtual Texture Num LODs (仮想テクスチャの LOD 数)

ランドスケープ コンポーネントの RVT へのレンダリングに使用される LOD 数です。「0」を設定すると、各ランドスケープ コンポーネントは単一のクワッドとして RVT にレンダリングされます。「0」は GPU に対して最適な設定です。ランドスケープ マテリアルに高周波頂点補間データが必要な場合は、値を高くする必要があります。

Virtual Texture LOD Bias (仮想テクスチャの LOD バイアス)

RVT へのレンダリング時に、選択した LOD に適用されるバイアス。

オブジェクト ソート プロパティ

シーンで RVT に複数のプリミティブをレンダリングすると、オブジェクト レイヤのソートで問題が起きる可能性があります。Z バッファが使用されず、アクタのマテリアルはアルファ ブレンドを利用することがあるため、ソート順の定義が必要になる場合があります。

レベルの [Details (詳細)] パネルを使用して、シーンで選択されているアクタの [Translucency Sort Priority (透過処理のソートの優先順位)] を設定します。

RVT_Actor_TranslucenySortPriority.png

どのアクタでも、デフォルト値は 「0」 に設定されています。値が小さいほど先 (下のレイヤー) にレンダリングされ、大きいほど後 (上のレイヤー) にレンダリングされます。

Translucency Sort Priority | Spline: 1 | Decal: 0

Translucency Sort Priority | Spline: 1 | Decal: 2

値が同じアクタのレンダリング順は定義されていません。シーンで RVT にアクタが表示されていない場合は、まず [Translucency Sort Priority (透過処理のソートの優先順位)] を確認してください。

最適化、統計、デバッグ

プロジェクトのランタイム仮想テクスチャを最適化およびデバッグする方法については、以下のセクションを参照してください。

統計

統計情報を有効にするには、バッククォート (`) キーを使用してコンソールを開き、以下のコマンドを入力します。

仮想テクスチャリングのシーンについて、ミリ秒 (ms) 単位のコストとページ テーブルのカウンタを確認するには、stat virtualtexturing を使用します。

Stat_VirtualTexturing.png

現在のシーンでの仮想テクスチャリングの使用に関連するメモリ カウンタを表示するには、stat virtualtexturememory を使用します。

Stat_VirtualTextureMemory.png

メモリ

仮想テクスチャリングのメモリ プール サイズは、BaseEngine.ini 構成ファイルにより設定します。プールはテクスチャ圧縮形式とタイル サイズごとに設定します。プール サイズのコンフィギュレーションは、プロジェクトの最大メモリ予算を指定することで決まります。これらの設定は [/Script/Engine.VirtualTexturePoolConfig] 以下にあります。

独自の値を設定する場合は、手始めに、タイル サイズが 128 または 256、境界線が 4 テクセルのコンフィギュレーションを使用することをお勧めします。以下に例を示します。

[/Script/Engine.VirtualTexturePoolConfig]
+Pools=(SizeInMegabyte=36, TileSize=136, Format=PF_DXT1)
+Pools=(SizeInMegabyte=72, TileSize=136, Format=PF_BC5)
+Pools=(SizeInMegabyte=72, TileSize=136, Format=PF_DXT5)
+Pools=(SizeInMegabyte=34, TileSize=264, Format=PF_DXT1)
+Pools=(SizeInMegabyte=68, TileSize=264, Format=PF_BC5)
+Pools=(SizeInMegabyte=68, TileSize=264, Format=PF_DXT5)

このコンフィギュレーションは、約 100 メガバイト (MB) のコストで 64x64 128 サイズのタイルまたは 32x32 256 サイズのタイルのプールに変換されます。

RVT のコンテンツ タイプに従って、BC5 および DXT5 プールのどちらか 1 つのみが使用されます。

仮想テクスチャリングの物理メモリ プールを構成する場合は、stat virtualtexturing コマンドを使用して、キャッシュ ロードなど、仮想テクスチャリング システムの動的な使用状況を確認します。また、仮想テクスチャリング システムについての多くの情報を出力ログにダンプするには、r.VT.ListPhysicalPools コマンドを入力します。

デバッグ

プロジェクトの仮想テクスチャリングをデバッグするには、以下のコンソール変数を使用します。

コンソール変数

説明

r.VT.Flush

仮想テクスチャリング システム内の物理キャッシュをすべてフラッシュするには、このコマンドを使用します。このコマンドは、キャッシュの無効化が適切に処理されていないことが原因で、問題が起きていると考えられる場合に役立ちます。

r.VT.MaxUploadsPerFrame

1 フレームあたりの最大ページ アップロード数を設定するには、このコマンドを使用します (デフォルトでは「64」)。負荷スパイクを防ぐために、フレーム内で更新するランタイム仮想テクスチャ タイルの数を調整する場合に有用です。

追記および制限

  • Unreal Engine 4.23 では、モバイル プラットフォームは現在サポートされていません。

  • RVT は現在最大 256 KiTexels をサポートします。

  • 将来のリリースでは、ストリーミング仮想テクスチャリングとランタイム仮想テクスチャリングの併用をサポートする可能性があります。RVT の低解像度のミップはベイクしてストリーミングし、高解像度のミップは実行時にレンダリングすることで、処理効率を向上できる可能性があります。

  • 将来のリリースでは、RVT のコンテンツ タイプを増やすほか、高さレイヤーを追加してディスプレイスメント マッピングを利用可能にする可能性があります。

Select Skin
Light
Dark

新しい Unreal Engine 4 ドキュメントサイトへようこそ!

あなたの声を私たちに伝えるフィードバックシステムを含め、様々な新機能について開発をおこなっています。まだ広く使える状態にはなっていないので、準備ができるまでは、ドキュメントフィードバックフォーラムで、このページについて、もしくは遭遇した問題について教えていただけると助かります。

新しいシステムが稼働した際にお知らせします。

フィードバックを送信