Version: 2019.2
ディファードシェーディングレンダリングパス
旧 Deferred Lighting レンダリングパス

フォワードレンダリングパスの詳細

このページでは フォワード レンダリングパス を詳しく説明します。

フォワードレンダリングパスは各オブジェクトを、1 つ、または複数のパスでレンダリングします。パス数は、オブジェクトに作用するライトによって決まります。フォワードレンダリングによるライトの扱いも、ライトの設定と強度によって異なります。

実装の詳細

フォワードレンダリングでは、各オブジェクトに作用する最も明るいライトのいくつかは、完全にピクセル単位のライティングモードでレンダリングされます。次に最大で 4 つのポイントライトが頂点ごとに計算されます。他のライトは球面調和として計算され、時間的にはずっと短縮されますが近似値になります。ライトがピクセル単位となるかどうかは以下に依存します。

  • Render Mode を Not Important に設定したライトは常に頂点ごとか、球面調和 として計算されます。
  • 最も明るいディレクショナルライトは常にピクセル単位に計算されます。
  • Render Mode を Important (重要) に設定したライトは常にピクセル単位に計算されます。
  • 上記を行った結果、現在の Quality Settings (品質設定) の Pixel Light Count (ピクセルライト数) よりライト数が減る場合は、さらにいくつかのライトが、明るさの順にピクセル単位でレンダリングされます。

各オブジェクトのライティングは以下のように行われます。

  • 1 つのピクセル単位のディレクショナルライトと、すべての頂点単位や球面調和によるライトにベースパスが適用されます。
  • 他のピクセル単位のライトは、加算パスでレンダリングされ、各ライトに 1 つのパスが使用されます。

例えば、複数のライトから影響を受けるオブジェクト (下の図の円の部分。ライト A から H のすべてから影響を受けます) について考えてみましょう。

ライト A から H が同じ色と強度を持ち、すべての Render Mode が Auto に設定されている(レンダリングモードが自動である) と仮定すると、このオブジェクトに関して、この順番のとおりにソートされます。まず、最も明るいライト (A から D) はピクセル単位のライティング (Per-pixel)、それから、4 つのライト (D から G) は頂点単位のライティング (Per-vertex)、最後に残りのライト (G から H) が球面調和によるライティング (SH) でレンダリングされます。

ライトのグループは重複していることに注意してください、例えば最後のピクセル単位のライトは頂点単位のライティングモードにブレンドするため、オブジェクトやライトが動き回る際に、急なライトの変化は少なくなります。

ベースパス

ベースパスでは、1つのピクセル単位のディレクショナルライトとすべての球面調和/頂点ライトでオブジェクトをレンダリングします。このパスにはさらに、シェーダーからのライトマップ、アンビエントライティング、エミッシブライティングすべてが追加されます。このパスでレンダリングされるディレクショナルライトには影があります。ライトマップを適用したオブジェクトは球面調和ライトから照明されないことに注意してください。

OnlyDirectional pass flag がシェーダーで使用されると、フォワードベースパスは、メインのディレクショナルライト、アンビエント/ライトプローブ、ライトマップだけをレンダリングします (球面調和と頂点ライトはパスデータに含まれません)。

加算パス

加算パスは、オブジェクトに影響する追加のピクセル単位ライトごとにレンダリングされます。 multi_compile_fwdadd_fullshadows バリアントショートカットを使用しない限り、これらのパスのライトにはデフォルトでは影がありません(その結果、フォワードレンダリングで影があるのは 1つのディレクショナルライトのみです)。

パフォーマンスの考慮点

球面調和ライトは 非常に 速くレンダリングされます。CPU のコストがごくわずかであり、GPU を適用する場合も 事実上コストなし です (つまり、ベースパスは常に球面調和ライティングを計算しますが、球面調和ライトの性質から、球面調和ライトの数にかかわらずコストはまったく同じです)。

球面調和ライトには以下のような欠点があります。

  • 球面調和ライトはオブジェクトのピクセルでなく、頂点で計算されます。つまり、ライトのクッキーや法線マップはサポートしません。
  • 球面調和ライトは非常に低周波です。そのため、急なライティングを変化させることができません。また、拡散ライティングにしか作用しません (スペキュラーハイライトには低周波すぎます)。
  • 球面調和ライティングは局所的ではありません。つまり、球面調和ライトで表面に近い、ポイントあるいはスポットライトを作成すると、見た目に違和感があります。

まとめると、球面調和ライトは小さい動的オブジェクトにはだいたい十分です。

ディファードシェーディングレンダリングパス
旧 Deferred Lighting レンダリングパス
Copyright © 2023 Unity Technologies
优美缔软件(上海)有限公司 版权所有
"Unity"、Unity 徽标及其他 Unity 商标是 Unity Technologies 或其附属机构在美国及其他地区的商标或注册商标。其他名称或品牌是其各自所有者的商标。
公安部备案号:
31010902002961