Unity3D-シェーダー-フォワードレンダリングパス



Unity3d Shader Forward Rendering Path



レンダリングの詳細:

  1. フォワードレンダリングは、オブジェクトに影響を与える光源に応じて、単一または複数のチャネルを使用してオブジェクトをレンダリングします
  2. フォワードレンダリングでは、光源自体は、設定と強度に応じて異なる方法で処理されます。
  3. 実装の詳細:レンダリングチャネル:ForwardBaseとForwardAddは、フォワードレンダリングパスでオブジェクトをレンダリングするために特別に設計された2種類のパスです。 ForwardBaseは、ForwardAddレンダリングよりも優先されます。
    • フォワードレンダリングでは、オブジェクトの最も明るい部分に影響を与えるいくつかの光源は、ピクセルごとの照明モードを使用します。
    • 次に、頂点ごとのレンダリングで最大4つの点光源が計算されます。
    • 他の光源は、球形ジャンプを使用して計算されます。
    • 光源がピクセルごとの光源であるかどうかを判断するための基礎:
      • レンダリングモードが重要でないように設定されている光源は、ピクセルごとの照明モードでは計算されません。
      • 最も明るい方向光源はピクセルごとです。最も明るい指向性ライトは常にピクセルごとです。
      • 上記の規則に従ったピクセル光源の数が以下の場合 品質設定 ピクセルライトカウントでは、明るさを下げるために、ピクセルごとにレンダリングする光源が増えます。上記の結果、現在のピクセルライト数よりも少ないライトになる場合 品質設定 、次に、輝度が低い順に、ピクセルごとにより多くのライトがレンダリングされます。
  4. チャネルの詳細:
    以下は光源の公式な扱いです
    • ForwardBase:Base Passは、ピクセルごとに1つの指向性ライトと、頂点/ SHごとにすべてのライトを適用します。 ForwardBaseチャネルは、ピクセルごとの指向性ライトとすべての頂点/球面調和関数をレンダリングします。このチャネルは、シェーダー、アンビエントライト、および自己照明でライトマップをレンダリングする役割も果たします。このチャネルでレンダリングされた指向性ライトは、シャドウを生成する可能性があります。
    • ForwardAdd:他のピクセルごとのライトは、ライトごとに1つのパスで、追加のパスでレンダリングされます。他のピクセルは追加のチャネルで広くレンダリングされ、各ソースにはチャネルが必要です。これらのチャネルでレンダリングされた光源は、シャドウを生成できません。
    • ご覧のとおり、フォワードレンダリングは、シャドウを生成する指向性ライトをサポートしています。その結果、フォワードレンダリングはシャドウ付きの1つの指向性ライトをサポートします

ソースAからHが同じ色と強度を持ち、それらのレンダリングモードが自動であると仮定すると、それらは名前で正確にソートされます。最も明るい光源はピクセルごとの照明モード(AからD)でレンダリングされ、次に最大4つの光源が頂点ごとの照明モード(DからG)でレンダリングされ、その他の光源がレンダリングされます。球状ブレンド(GからH)



ForwardBaseでは、4番目のポイントチャネルの詳細によって、1つのピクセルごとの方向ライトAとすべての球面調和関数ライトのみがレンダリングされていることがわかります。つまり、A E F GHの他のライトはForwardAddでレンダリングされます。

関係者は、球面調和関数が非常に効率的で効率的であることを強調しています。



第二に、注意を払う

* ForwardBase、ForwardAdd LightModeは、Came for Forward、DeferredLightingのレンダリングモードでのみ実行できます。
* ForwardAdd this PassはForwardBaseで使用する必要があります。そうしないと、Unityによって無視されます。
* ForwardBaseは、1つのアクティブライトに対して1回だけ実行されます
* ForwardAddは、ForwardBaseで使用されるライトを除くすべての有効なライトを実行するため、複数回実行されます。

_WorldSpaceLightPos0、_LightColor0 in LightMode = Forward
*ライトはForcePixelモードでのみ有効です
*平行ライトが1つしかない場合、ForwardAddではライトデータは使用されません。
* ForwardBaseのパスの場合、ライトは指向性ライトである必要があります
* ForwardAdd優先ポイント光源、
* ForwardAdd優先度ライトは暗く、ForwardBase優先度は明るくなります。彼らは正反対です

unity_4LightPosZ0 [3]、unity_4LightAtten0 [3]、unity_LightColor [3]、LightMode = ForwardBaseのunity_LightColor3(これの場合のみ)
*ポイントソースにのみ有効
*ライトはForcePixel、ForceVertexモードで有効であり、ForcePixelが推奨されます
*光の範囲はターゲットをカバーする必要があります
*ライトは0より大きくなければなりません
*光の強度、光の優先度を並べ替えます。

unity_LightColor [3]、LightMode = ForwardBaseのunity_LightColor3(ForwardAdd、Blend Zero Oneを含む)
*スポットライトにのみ有効
* ForcePixel、ForceVertexは、光の点が1つしかない場合に有効です
*複数の光点がある場合、ForceVertexがある場合。 ForceVertexのみが有効で、ForcePixelは無効です
※複数のライトがある場合はForceVertexです。効果的
*光データは世界座標にあります

unity_LightColor [3]、LightMode = ForwardAdd(Blend One Zero)のunity_LightColor3
*最初に、前提条件として2つのForcePixel指向性ライトまたはForcePixelスポットライトが必要です
*効果を発揮するには、ForceVertexのポイントライトである必要があります
*最初に複数の満足効果がある場合、そのうちの1つを1に設定しても満足できません。unity_LightColor[3]は未クリーンなデータを残すため、unity_LightColor3を使用することをお勧めします。

unity_LightPosition [3]、Unity_LightAtten [3] in LightMode = ForwardBase(これの場合のみ)
*データなし

unity_LightPosition [3]、Unity_LightAtten [3] in LightMode = ForwardAdd(Blend One Zero)
*データなし
*他のシェーダーがある場合、unity_LightPosition [3]はそれらの残差データを表示します



転送元: https://www.cnblogs.com/xhg986/p/7504132.html