フォワード シェーダー レンダリング

フォワード シェーダー レンダリングを使用する利点を説明します。

Unreal Engine はディファード レンダラを使用するデフォルト設定なので、多様性を高め、より多くのレンダラ機能へのアクセスが保証されます。 ただし、ディファード レンダラにはトレードオフもあります。すべての VR 体験に適しているというわけではありません。 フォワード レンダリング は、レンダリング パスが速くなることで基準値も上がるので、VR プラットフォーム上でのパフォーマンスが良くなる場合があります。 また、速くなるだけではなく、提供されているアンチ エイリアシング オプションを使うとビジュアルも一層きれいになります。

フォワード レンダリングを有効にする

フォワード シェーディング レンダラを有効にするには、以下の操作を行います。

  1. [Edit (編集)] メニューで、[Project Settings (プロジェクト設定)] を開きます。

  2. 左欄の [Rendering] タブを選択し [Forward Shading] カテゴリを探します。

  3. [Forward Shading] を有効にします。

EnableForwardShading.png

エディタを再起動するように促されます。再起動後、フォワード レンダラのオプションと機能が使えるようになります。

Multisample Anti-Aliasing を有効にする

Multisample Anti-Aliasing (MSAA) を使用するには以下の操作を行います。

  1. [Edit (編集)] メニューで、[Project Settings (プロジェクト設定)] を開きます。

  2. 左欄の [Rendering] タブを選択し [Forward Shading (フォワード シェーディング)] カテゴリを探します。

  3. Anti-Aliasing Method プロパティを MSAA に設定します。

EnableMSAA.png

フォワード レンダリングは、マルチサンプル アンチエイリアシング (MSAA) とテンポラル アンチエイリアシング (TAA) の両方をサポートしていますが、ジオメトリ エイリアシングとスペキュラ エイリアシングの両方を除去するため、ほとんどのケースで TAA が好まれます。 ただし VR では、ヘッド トラッキングでサブピクセルが絶えず移動するため不必要なぼやけが発生するので、MSAA が正しい選択かもしれません。 MSAA を使用するプロジェクトでは、スペキュラ エイリアシングを軽減するためのコンテンツのビルドをお勧めします。 さらに、Normal to Roughness 機能を使うと、詳細な法線マップからスペキュラ エイリアシングを削減し、スタティックメッシュ用の自動 LOD 生成機能により遠くのメッシュの形状を平坦にして、小さなトライアングルからのエイリアシングを削減できます。

我々のテスト結果では、TAA の代わりに MSAA を使った場合、GPU フレームが約 25% 増加しました (値はコンテンツによって変わります)。

以下は、Temporal AA を有効にした場合と 4X MSAA を有効にした場合の例です。

Temporal AA

4X MSAA

コンソール変数 r.MSAACount を使って、ピクセルごとに計算する MSAA サンプル数を調節し、r.MSAACount 1 で MSAA を無効にできます。 r.MSAACount 0 を代入すると Temporal AA を使用する設定に戻ります。アンチエイリアシング メソッドとの切り替えが簡単になります。

パフォーマンスと機能

ディファード レンダラからフォワード レンダラへ切り替により、プロジェクトのパフォーマンスが改善する場合があります。

コンテンツによっては、ディファード レンダリングよりもフォワード レンダリングの方が速い場合があります。ほとんどのパフォーマンスは、マテリアルごとに機能を無効にすると改善します。 マテリアルが高品質の反射を選択していない限り、最も近い反射キャプチャのみがデフォルトでパララックスなしで適用されます。また、Height Fog (高さフォグ) は頂点ごとに計算され、それを有効にするマテリアルのみに Planar Reflection が適用されます。

ForwardShading.png

Epic の新しい VR ゲーム Robo Recall ではこれらのオプションを使用して、NVIDIA 970 GTX でのフォワード レンダラがディファード レンダラよりも約 22% 速くなりました。

ExampleImage.png

フォワード レンダラは、ライトと反射キャプチャを視界外のスペースグリッドへのカリング処理で行われます。その後で、フォワード パスの各ピクセルが影響を与えているライトと反射キャプチャをイタレートして、マテリアルを共有します。 Stationary light (固定ライト) の動的シャドウは予め計算されて、スクリーン空間シャドウ マスクのチャンネルにパックされ、オーバーラップする 4 つの Stationary light (固定ライト) 限界部分を強化します。

ディファード レンダラからフォワード レンダラへ切り替えた時には、Unreal Engine の [Profiling]() ツールを使ってゲームのパフォーマンスを必ず評価してください。 特に [Profiling GPU]() の GPU 負荷の詳細、およびプロファイリング エフォートで補助するための [Stat Commands]() の使用場所に注目してみると良いでしょう。

サポート対象の機能

現在フォワード レンダラでサポートされている機能は以下のとおりです。

  • 事前計算された背景のシャドウでブレンドするムーバブル オブジェクトの動的シャドウを含む Stationary Lights (固定ライト) をフルサポート。

  • 視差補正で複数の反射キャプチャをまとめてブレンド処理

  • 部分的なシーンの平面反射を反射キャプチャに合成

  • DBuffer デカール

  • ライティングとスカイライトの事前計算

  • 任意の数のシャドウなし Movable Light (可動ライト)

  • カプセルシャドウ

  • マスク付マテリアルの Alpha To Coverage

  • インスタンス化されたステレオとの互換性

  • 最高 4 つまでシャドウキャスト Movable Light (可動ライト)

  • シャドウ キャスト ライト上のライト機能

周知の問題とよくある質問

フォワード レンダラの使用中は、以下の機能は サポートされません:

  • Screen 空間技術 (SSR、SSAO、Contact Shadows)。

  • 動的シャドウのついた半透明

  • Stationary Light (固定ライト) から背景シャドウをかぶせた半透明

  • D-Buffer デカールおよびモーション ブラーへの MSAA の適用

以下は、フォワード レンダラの実験版を使用した場合によくある質問 / 問題点です。

  • フォワード レンダラに切り替えたらマテリアルが壊れてしまいました。GBuffer シーン テクスチャに何か問題があるのでしょうか?

    • フォワード レンダラでテクスチャ サンプリングのため GBuffer へはアクセスできません。ディラード レンダラのみになります。

  • フォワード レンダリングはディファード レンダリングよりもテクスチャ サンプリングが少なくなりますか?

    • フォワード レンダラはすべての機能が 1 つのシェーダーに入っているので、マテリアルに使用できるテクスチャ サンプリングが少なくなります。

    • シェーダー サンプルを使えば、通常この問題を解決することができます。

  • なぜ MSAA では Atmospheric Fog のサンプルが見つからないのでしょうか。

    • Atmospheric Fog では MSAA をまだ正しく処理しません。

    • Height Fog の場合、Vertex Fogging を使えばこの問題を回避できます (フォワード シェーディングを有効にするとデフォルトで有効になります)。

    • つまり、Forward BasePass で計算されてから正しくアンチエイリアシングを行います。

    • Atmosphere の計算には、分解処理されたシーン深度の Deferred Pass がまだ使われるので、正しいアンチエイリアシングが行えません (今後のアップデートで解決したいと思っています)。

Unreal Engine のドキュメントを改善するために協力をお願いします!どのような改善を望んでいるかご意見をお聞かせください。
調査に参加する
キャンセル