Verification Checklist (検証チェックリスト)
このチェックリストでは、RenderStream と Unreal Engine を扱う際の推奨プラクティスを扱います。プロジェクトをステージに持ち込む前に、このチェックリストを実行してください。アルファ、フロントプレート、分割レンダリングの設定については、Scene Optimisation を参照してください。
Validation Framework
Section titled “Validation Framework”Netflix の ValidationFramework プラグインは、プロジェクトに潜在的な nDisplay および RenderStream の問題がないかをチェックします。より広くは、in-camera VFX (ICVFX) や VR スカウティングなど、バーチャルプロダクションのワークフローにおける潜在的な問題をチェックします。
- ValidationFramework プラグインがプロジェクトの
Pluginsフォルダーにインストールされ、有効になっている。 - 各自動修正が、適用前に確認されている。このフレームワークは一部の問題を自動的に修正できますが、その修正によってシーンの見た目が変わることがあります。
サポートされる Unreal Engine バージョン
Section titled “サポートされる Unreal Engine バージョン”ValidationFramework プラグインは、次の Unreal Engine バージョンをサポートしています。
- UE4.27+: v1.0.1 のみサポート ✅
- UE5.0: テスト中 ❗
- UE5.1: v1.1.0+ サポート ✅
- UE5.2: v1.2.0+ サポート ✅
- UE5.3: v1.3.0+ サポート ✅
- UE5.4: v1.4.0+ サポート ✅
- UE5.5: v1.5.0+ サポート ✅
- UE5.6: v1.6.0+ サポート ✅
- UE5.7: v1.7.0+ サポート ✅
プロジェクトのチェック
Section titled “プロジェクトのチェック”- RenderStream プラグインがプロジェクトの
Pluginsフォルダーにあり、プロジェクトに必要なすべてのプラグイン(nDisplay など)が有効になっている。
Channel Definitions
Section titled “Channel Definitions”- シーン内の各 Cine Camera Actor に RenderStream Channel Definition が追加されている。
Frontplate
Section titled “Frontplate”- フロントプレートのカメラが Default Visibility Hidden に設定されている。
- フロントプレートに表示するコンポーネントがすべて Force Visible セクションに追加されている。
- フロントプレートのチャネルで、Channel Definition の Show Flag Settings の Fog と Atmosphere が無効になっている。バックプレートでは引き続き必要なため、フォグとアトモスフィアのアクター自体は削除も無効化もしないでください。
アルファ設定とフロントプレートのチャネルについては、Scene Optimisation を参照してください。
ソース管理へのプッシュの準備
Section titled “ソース管理へのプッシュの準備”ソース管理へのプッシュの前、特に変更を加えた後は、Designer から RenderStream を起動して Unreal シーンをテストします。
- オペレーターのカメラ移動中にフレームドロップがないか確認します。
- 公開パラメーターをトリガーしたときにフレームドロップがないか確認します。
- すべての公開パラメーターを Designer の RenderStream Layer からトリガーしてテストし、nDisplay と RenderStream がアーティストの意図どおりに処理することを確認します。
- すべてのフロントプレートオブジェクトをテストし、アーティストの意図どおりにレンダリングされることを確認します。一部のオブジェクトは、特定のライティングをアタッチできるよう Actor Blueprint として構築する必要があります。これにより、バックプレートとフロントプレートの両方でライティングが正しく保たれます。
- すべてのビューモードを順に確認し、負荷の高いシェーダー、クアッドオーバードロー、ライトの複雑さ、ライトマップ密度をチェックします。ビューモードの詳細については、Epic のドキュメントを参照してください。最適化に最も関連するビューモードは次のとおりです。
- Light Complexity
- Lightmap Density
- Stationary Light Overlap
- Shader Complexity
- Shader Complexity & Quads
- Quad Overdraw
- フレームドロップが解決しない場合は、Unreal Insights を使用して原因を特定します。Unreal Insights に関するドキュメントは、Epic のこちらで入手できます。
Derived Data Cache
Section titled “Derived Data Cache”Disguise での Derived Data Cache (DDC) の構成については、DDC Setup を参照してください。
DDC Pak
Section titled “DDC Pak”Epic Games Store から Unreal Engine をダウンロードすると、エンジンには DDC Pak(.ddp)が付属します。DDC Pak にはすべてのエンジンコンテンツの派生データが含まれているため、シェーダーをコンパイルせずに作業を開始できます。一部のサンプルも同じ理由で DDC Pak とともに提供されます。
- Engine DDC Pak。例:
EngineDir/DerivedDataCache/Compressed.ddp - Project DDC Pak。例:
ProjectDir/DerivedDataCache/Compressed.ddp
最適化は、次のような複数の変数の影響を受ける複雑な題材です(これらに限りません)。
- メッシュ Actor とライティング Actor の Mobility
- レンダー設定
- マテリアルの複雑さ
- Material Instance と比較した、使用される Parent Material の数
- メッシュの複雑さ、および Unreal Engine 5 の場合は Nanite メッシュかどうか
- ライティング Actor の複雑さと、シーン内のライティング Actor の数
変更を加える前にプロファイリングしてください。Unreal Insights はフレームタイムがどこで消費されているかを示し、Unreal Engine の stat コマンドは作業中にパフォーマンスの数値を報告します。
- Oodle Texture 圧縮を使用して、パッケージサイズと読み込み時間を削減します。パッケージが小さくなると、レベルストリーミングや World Partition などで再生中にコンテンツが読み込まれる際のフレームタイムのスパイク(ヒッチ)も軽減できます。
- GPU Lightmass でできるだけ多くのライティングをベイクし、リアルタイムのレイトレーシングエフェクトは避けることを検討します。GPU Lightmass には Support Hardware Ray Tracing(Project Settings › Rendering › Hardware Ray Tracing)が必要ですが、Ray Traced Shadows と Ray Traced Skylight は無効のままで構いません。
- 使用するライトはできるだけ少なくします。Stationary または Movable に設定された Rect Light は、一部はシャドウキャストのために、同じ Mobility の Point Light や Spot Light よりもレンダリングコストが大幅に高くなるのが一般的です。ライティングが変化しない場合は、Rect Light を Static に設定してベイクします。フォワードレンダラーは Rect Light をサポートしていないため、プロジェクトがフォワードレンダラーを使用している場合(MSAA のためなど)は、代わりに Spot Light または Point Light を使用します。
- 不要な場合は、個々の Light Actor で Cast Shadows を無効にします。
- シーンによりシャープな反射が必要でない限り、Reflection Capture Resolution(Project Settings › Rendering)は 512 以下に保ちます。これはすべての reflection capture のキューブマップ解像度を設定するもので、非常に高い値はメモリとパフォーマンスに影響することがあります。
- フレームをレンダーノード間で分割しない場合は、Temporal Super Resolution (TSR) を検討し、使用する際はスクリーンパーセンテージを下げます。
- フレームをレンダーノード間で分割する場合、テンポラルアンチエイリアシング(TAA、Temporal Upsampling、TSR)はタイルの境界付近でゴーストやシームを生じることがあります。これが発生する場合は、代わりに FXAA を使用するか、プロジェクトがフォワードレンダラーを使用している場合は MSAA を使用します。分割レンダリングの制限事項を参照してください。
- タイルレンダリングで Lumen を使用している場合は、シームがないか確認してください。Lumen のスクリーンスペーストレースは各タイルの境界で切り取られます。
- フレームをレンダーノード間で分割する場合は、Screen Space Global Illumination (SSGI) に頼らないでください。各タイル内のピクセルしか参照できないため、分割線に沿ってシームが生じることがあります。ベイクされたライティングを使用すると、Lumen と SSGI のシームを回避できます。グローバルイルミネーションを参照してください。
Nanite
Section titled “Nanite”スタティックメッシュでは、フォリッジ、樹木、密度の高い環境ジオメトリを含め、デフォルトで Nanite を有効にします。Nanite は Preserve Area などの設定とともに、マスクマテリアルとフォリッジをサポートします。例外は次のとおりです。
- 半透明マテリアル: Nanite は標準の半透明パスをレンダリングしません。
- World Position Offset (WPO): 動きの激しいフォリッジなど、WPO でアニメーションするメッシュでは、World Position Offset Disable Distance を設定します。アニメーションするメッシュは Virtual Shadow Map に再描画する必要があり、そのキャッシュが無効化されて GPU コストが増加します。この無効化距離により、アニメーションが小さすぎて見えない遠方のメッシュでは WPO が停止します。メッシュで WPO アニメーションを維持しつつシャドウキャッシュの無効化を止めるには、メッシュコンポーネントの Shadow Cache Invalidation Behavior を Rigid に設定します。その場合、シャドウはアニメーションと一致しなくなることがあります。
- 非常に単純なメッシュ: 単純なボックスなどの基本的なプリミティブでは、Nanite による効果はほとんどありません。
描画コール数を最適化する
Section titled “描画コール数を最適化する”UE[4] はシーンの可視性を計算し、フレームの最終画像に表示されないオブジェクトをカリングします。ただし、カリング後のシーンに依然として数千のオブジェクトが含まれている場合、描画コールがパフォーマンスの問題になる可能性があります。ポリゴン数の少ないメッシュをレンダリングしても、描画コールが多すぎると、GPU 用に各描画コールをセットアップする CPU 側のコストのために、主要なパフォーマンスのボトルネックになる可能性があります。UE4 と GPU ドライバーはどちらも描画コールごとに処理を行います。
ただし、描画コールの削減はバランスの取れた作業です。多数の小さなメッシュの代わりに少数の大きなメッシュを使って描画コールを削減することにした場合、小さなモデルから得られるカリングの粒度を失います。
- 描画コールを減らすために Actor の結合を検討します。
- 結合されたメッシュはマテリアルごとに 1 回の描画コールになるため、結合する Actor が同じマテリアルを共有している場合に描画コールが最も削減されます。
- コンソール変数エディターを使用します。
現場での全般的なアドバイス
Section titled “現場での全般的なアドバイス”- オブジェクトが見えないなら、レンダリングしないでください。
- 樹木は、特にシーンを埋め尽くす場合に最大の課題になります。複数のマテリアルスロットを持つハイポリの樹木アセットは、描画コール(マテリアルスロットごとに 1 回)と GPU コストを増加させます。
- 視覚的な LOD システムが役立ちます。カメラに近いほど高品質なアセットを、背後には低品質なものを配置します。背景には樹木の並びのテクスチャプレーンが便利です。
- すべてのシャドウを無効にしてから体系的に再度有効にしていくことで、望ましい効果をより軽量なプロジェクトで実現できます。その結果ハイライトが平坦に見える場合を補うには、Directional Light のライト関数を変更して、わずかな葉の影を疑似的に作ります。
- シーン内で時間帯が変化しない場合は、Sky Atmosphere と Volumetric Cloud のアクターを、unlit マテリアルを持つ球体に置き換える方法がよく機能します。
- バンディングなどのボリュメトリックフォグのアーティファクトを軽減するには、Exponential Height Fog コンポーネントの Volumetric Fog 設定で View Distance を下げ、深度スライスがカバーする距離を短くします。値を大きくするとフォグはより遠くまで広がりますが、サンプリング不足によるアーティファクトが現れます。次のコンソール変数も、フォグボリュームのサンプリング方法を制御します。
r.VolumetricFog.GridSizeZ: 深度スライスの数。値を大きくすると品質は向上しますが、コストも増加します。r.VolumetricFog.GridPixelSize: 各フォグセルの画面ピクセル単位のサイズ。たとえば8は、1 つのセルが 8 × 8 ピクセルのブロックをカバーすることを意味します。値を小さくするとジオメトリ周辺のフォグがシャープになりますが、コストも増加します。r.VolumetricFog.DepthDistributionScale: カメラからの距離に応じて深度スライスをどのように配置するか。スライスはカメラに近いほど密に配置されます。
- 公開パラメーターでアニメーションさせるライトなど、急激に変化するライトは、ボリュメトリックフォグ内にライティングの軌跡を残すことがあります。これはフォグのテンポラルリプロジェクションによる副作用です。ライトのフォグへの寄与をなくすには、そのライトの Volumetric Scattering Intensity を
0に設定します。
まずプロジェクトをプロファイリングしてフレームタイムがどこで消費されているかを特定し、その上で Epic の最適化ガイドを使用して対処します。
- Unreal Insights in Unreal Engine: Unreal Insights でプロジェクトのパフォーマンスをプロファイリングします。
- Optimizing and Debugging Projects for Real-Time Rendering in Unreal Engine: Unreal Engine の機能とツールを使用して、リアルタイムレンダリング向けにプロジェクトを最適化・デバッグするための概念とアプローチ。
- Scene Optimisation: アルファ、フロントプレート、分割レンダリングなど、RenderStream で使用する際に特に重要となる Unreal Engine のシーン設定。