コンテンツにスキップ

Verification Checklist (検証チェックリスト)

このチェックリストでは、RenderStream と Unreal Engine を扱う際の推奨プラクティスを扱います。プロジェクトをステージに持ち込む前に、このチェックリストを実行してください。アルファ、フロントプレート、分割レンダリングの設定については、Scene Optimisation を参照してください。

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+ サポート ✅
  • RenderStream プラグインがプロジェクトの Plugins フォルダーにあり、プロジェクトに必要なすべてのプラグイン(nDisplay など)が有効になっている。
  • シーン内の各 Cine Camera Actor に RenderStream Channel Definition が追加されている。
  • フロントプレートのカメラが 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 のこちらで入手できます。

Disguise での Derived Data Cache (DDC) の構成については、DDC Setup を参照してください。

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 を有効にします。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 による効果はほとんどありません。

UE[4] はシーンの可視性を計算し、フレームの最終画像に表示されないオブジェクトをカリングします。ただし、カリング後のシーンに依然として数千のオブジェクトが含まれている場合、描画コールがパフォーマンスの問題になる可能性があります。ポリゴン数の少ないメッシュをレンダリングしても、描画コールが多すぎると、GPU 用に各描画コールをセットアップする CPU 側のコストのために、主要なパフォーマンスのボトルネックになる可能性があります。UE4 と GPU ドライバーはどちらも描画コールごとに処理を行います。

ただし、描画コールの削減はバランスの取れた作業です。多数の小さなメッシュの代わりに少数の大きなメッシュを使って描画コールを削減することにした場合、小さなモデルから得られるカリングの粒度を失います。

  • 描画コールを減らすために Actor の結合を検討します。
  • 結合されたメッシュはマテリアルごとに 1 回の描画コールになるため、結合する Actor が同じマテリアルを共有している場合に描画コールが最も削減されます。
  • コンソール変数エディターを使用します。
  • オブジェクトが見えないなら、レンダリングしないでください。
  • 樹木は、特にシーンを埋め尽くす場合に最大の課題になります。複数のマテリアルスロットを持つハイポリの樹木アセットは、描画コール(マテリアルスロットごとに 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 の最適化ガイドを使用して対処します。