Deferred Shading レンダリングパス
旧 Deferred Lighting レンダリングパス

Forward Rendering パスの詳細

このページでは Forward レンダリングパス の詳細について説明します。

Forward Rendering パスは各オブジェクトを、オブジェクトに作用するライトにもとづいて、ひとつかそれ以上のパスにレンダリングします。ライトそのものは、設定および強度によって、Forward Rendering により別々に扱われます。

実装の詳細

Forward Rendering では、各オブジェクトに作用する、いくつかの最も明るいライトは、完全なピクセルライティングモードでレンダリングされます。次に最大で 4 つのポイントライトが頂点ごとに計算されます。他のライトは球面調和( SH )として計算され、近似値になりますがより速くなります。ライトがピクセルライティングとなるかどうかは次のことに依存します。

  • Render Mode を Not Important に設定したライトは常に頂点ライティングか SH となります。
  • 最も明るい指向性ライトは常にピクセルライティングです。
  • Render Mode を Important に設定したライトは常にピクセルライティングになります。
  • もし上の結果により、現在の Pixel Light Count 画質設定 より少ないライトの数となった場合、明るさを抑えるために、より多くのライトがピクセルライティングとなります。

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

  • Base Pass は一つのピクセルごとの指向性ライトおよびすべての頂点ごと/ SH ライトを適用します。
  • 他のピクセルライトは、Additional Pass (追加のパス)でレンダリングされ、ひとつのライトごとにひとつのパスを使用します。

例えば、もし複数のライトにより影響を受けるオブジェクトがある場合(下の絵で丸をつけた部分がライト A から H に作用されている):

ライト A から H が同じカラーと強度であると仮定した場合、すべて自動レンダリングモードであるため、このオブジェクトにおいて、この順番のとおりにソートされます。最も明るい光( A から D )はピクセルライティングでレンダリングされ、4 つのライト( D から G )が頂点ライティングとなり、最後に残りのライト( G から H )が球面調和( SH )となります。

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

Base Pass

ベースパスはオブジェクトをひとつのピクセル指向性ライトと残りすべて SH ライトでレンダリングします。このパスではさらに他のライトマップ、環境光ライティング、および自己発光ライティング、を追加します。このパスでレンダリングされる指向性ライトは影があります。ライトマップされたオブジェクトは SH ライトから照らされないことに注意してください。

Additional Passes

Additional Passes (追加のパス)は、このオブジェクトに作用する、各々の追加されたピクセルライトでレンダリングされます。これらのパスのライトは影を持てません(結果として Forward Rendering がサポートするのはひとつの指向性ライトと影です)。

パフォーマンスの考慮点

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

SH ライトの欠点は:

  • オブジェクトのピクセルでなく、頂点で計算されます。これにより、Light Cookie や法線マップはサポートしません。
  • SH ライトは非常に低周波です。急なライティングの遷移を行うことができません。また、拡散ライティングしか作用しません(鏡面ハイライトには低周波すぎます)。
  • SH ライトはローカルではありません。表面に近い、ポイントあるいはスポットの SH ライトは、“何か間違っているように見えます”。

まとめると、SH ライトは小さく動的なオブジェクトには向いてません。

Deferred Shading レンダリングパス
旧 Deferred Lighting レンダリングパス