シェーダ - ユニティレンダリングパイプライン

外観(材料特性)は、照明計算はシェーダに内蔵されなければならないので、シェーダオブジェクトとその光学応答を定義するために使用されるが、照明の多くの種類が存在してもよい、非常に面倒なシェーダを書き込む一つです。準備ユニティシェーダを簡素化するために、サーフェスシェーダが提供され、それはすべての照明、影、光マップは、前方に自動的にレンダリングし、処理遅延をレンダリングするでしょう。

採用によって異なりどのようなレンダリングパスレンダリングパス(合格)とどのように照明アプリケーションを選択する方法。Shaer各パスはLightModeのPassTagsによって定義されているパスをレンダリングの種類に適しています。
ユニティ・レンダリング・パス含まれています。

レンダリングパス サポートされているLightMode
Forwawrdレンダリング(前方レンダリング) ForwardBaseとForwardAddパスが使用されます
遅延シェーディング(遅延シェーディング) 繰延パスが使用されます
レガシー繰延照明(レガシー遅延光) PrepassBaseとPrepassFinalパスが使用されます
レガシー頂点点灯(左頂点ライティング) バーテックス、VertexLMRGBMとVertexLMパスが使用されます
影または深さテクスチャをレンダリングするために、前述の経路のいずれかをレンダリングする、ShadowCasterパスが使用されます

フォワードレンダリングパス(フォワードレンダリングパス)
フォワードレンダリングパスは、影響を受けるすべてのオブジェクトに照らして、画素ランプ点灯方法によって最も明るいピクセルの一部は、その後、4つの頂点ごとのやり方光点灯が存在するであろう残りの光は、SH(球面調和関数)ようにレンダリングされるであろう。次のように主なルールは以下のとおりです。

1.将渲染模式设置为"Not Important"的灯始终是按顶点或者SH进行渲染
2.最亮的平行光会以逐像素的方式进行渲染。
3.将渲染模式设置为“Important”的灯始终为逐像素进行渲染。
4.最多会有4个光源按照逐顶点的方式进行渲染
5.经过以上操作后,如果逐像素渲染的灯光个数小于Quality Setting设置中Pixel Light Count的数量话,会按照亮度从高到低的顺序,选择合适的灯光数量,进行逐像素渲染。

次のようにレンダリングプロセスは次のとおりです。

1.Forward Base Pass 会执行最亮的逐像素平行光和所有的逐顶点/SH灯光渲染。
2.Forward Add Pass 会在每个逐像素灯光(除逐像素平行光以外的)进行一次渲染。 

例:
ここに画像を挿入説明
上記の図は、オブジェクト(円)Aの光Hによる影響する、HのAは同一の色及び強度を有すると仮定され、それらは、物体距離に応じて順序付けされるように、すべてのライトは、自動モードにレンダリングされ、光の前にレンダリングされるピクセルワイズように(ADを、特定の数は、データ品質の設定に応じて設定される)、および副頂点照明レンダリング(DGは、4つの光の大部分を)は、残りの光になりますレンダリングのための方法でSH(GH)。図:
ここに画像を挿入説明

注意,在不同的模式渲染中有重叠渲染的部分,这样当物体和光线移动时,不会出现太多的"灯光跳跃"
除A灯光外,其余逐像素渲染灯光会调用Forward Add Pass。

ForwardBase:平行光を用いて画素ごと全てSH /頂点シェーダはまた、このプロセスでは、レンダーターゲット発光からテクスチャシェーダ光、周囲光を加算します。この描画処理で指向遮光を(ノートライトマップオブジェクトは照明灯SHを取得していない)を有していてもよいです。
「OnlyDirectional」ラベルを渡し、ForwardBaseのみ主チャネル指向性光をレンダリングする、アンビエント/光検出器および光テクスチャ(SH光と頂点データパスに含まれていない)場合。
ForwardAddは:(メイン平行光を除く)オブジェクトの一次影響により、全ての画素の光源をレンダリングします。コンパイラは複数の変異体を生成するためにこのようなmulti_compile_fwdadd_fullshadows、シェーダプログラムのディレクティブない限り、デフォルトでは、これらのプロセスは、光の影ではありません。
適切なシェーダパス(すなわちForwardBase ForwardAddなしでは存在しない)、レンダリング中のオブジェクトに対して同じレンダリング言語頂点点灯・パスを提供する場合ではありません。

どのくらいの光SHそうにかかわらず、(ForwardBase SH照明チャンネルが常にSHの作品から、計算されているSH(球面調和)のレンダリング速度が非常にブロックされていない、とコストが、実際には、CPUにGPUを適用して自由に低いですコストは)同じです。
SHの欠点は以下のとおりです。

1.它们是在顶点的基础上进行计算,所以不支持Cookie和法线贴图
2.SH照明频率很低,无法有明显的照明过度。也只影响漫反射光照(镜面高管的频率太低)。
3.SH照明不是局部的,靠近某些表面的球谐函数点光源或聚光灯会看起来有些别扭。

(レンダリングパス遅延を着色)パスレンダリングシェーディング延期
遅延シェーディングを使用する場合、照明がないゲームオブジェクトの制限数に影響を与えることができるが、全ての光が画素の方法によって光画素によって評価され、それらが正しく全て、同様に正常なタイトル図に切り替えることができますクッキーは、光と影を持つことができます。
繰延シェーディング利点:

照明的处理开销与光照的像素数量成正比,这是由场景中光的大小决定,而不是它照亮了多少游戏物体,因此可以通过保持较小的光线来提高性能。
延迟着色也具有高度一致和可预测的行为,每个光的效果都是按像素计算的,因此没有在大三角形上分解的光照计算。

繰延シェーディング短所:

延迟照明没有真正的抗锯齿支持,也无法处理半透明的GameObject(这些是使用Forward Rendering渲染的)。
Mesh Render(网格渲染器)和Receive Shadows(接收阴影)标志也不支持。
剔除遮蔽图的支持方式有限(最多可以使用四个剔除遮蔽图,即:剔除层遮蔽图必须至少包含减去 4 个任意层后的所有层,所以 32 层中必须设置 28 层。否则会得到图形假象。)。

要件:

1.需要具有多个渲染目标(MRT)的显卡,Shader Model 3.0(或以上)的图形卡,并支持深度渲染纹理。2006年后大多数pc显卡都支持延迟着色,从GeForce 8xxx,Radeon x2400,Intel G45开始。
2.移动设备上不支持,主要由于使用MRT格式(某些GPU支持多个渲染目标,但只支持非常有限的位数)。
3.使用正交投影时,不支持延迟渲染。如果相机的投影模式设置为'Orthographic(正交)',则相机会退回到“Forward Rdndering”。

パフォーマンス:
かかわらず、非常に小さいので、光やパフォーマンス上の利点にスポットライトを指すシーンの複雑さのリアルタイムで頭上の照明光着色レンダリングピクセルの数に比例した遅延、。彼らはゲームオブジェクトのシーンを完全または部分的にブロックされている場合は、より良い結果を得ることができます。
より多くのパフォーマンスを過ごすために無光影の照明よりも、網掛け、レンダリングの遅延、ゲームオブジェクトは影がまだ1回以上レンダリング各投影光の影のために必要とされるキャスト。また、オーバーヘッド影描画を使用しない場合よりも高い光影シェーダのアプリケーション。

詳細:

使用延迟渲染着色时,Unity中的渲染过程分为两步:
G-buffer Pass:游戏对象被渲染成具有漫反射色、高光色、平滑度、世界空间法线、发射和深度的屏幕空间缓冲器。
Lighting Pass:先前生成的缓冲区用于将照明添加到发射缓冲区。

処理遅延(オブジェクト)をレンダリング着色しない、プロセスが完了した後にレンダリングされたフォワードレンダリングパスを使用します。

默认g-buff布局:
RT0,ARGB32格式:漫反射颜色(RGB),遮挡(A)。
RT1,ARGB32格式:镜面反射颜色(RGB),粗糙度(A)。
RT2,ARGB2101010格式:世界空间标准(RGB),未使用(A)。
RT3,ARGB2101010(非HDR)或ARGBHalf(HDR)格式:Emission+lighting+lightmaps+reflectin 侦探 缓冲。
深度+模板缓冲区。

默认的g缓冲区布局时160位/像素(非HDR)或192位/像素(HDR)。
相机不使用HDR时,Emission+lighting缓冲区(RT3)以对数方式编码,以提供比ARGB32纹理通常可能的更大的动态范围。
注意,相机使用HDR渲染时,没有为Emission +光照缓冲区(RT3)创建单独的渲染目标; 相反,Camera渲染的渲染目标(即传递给图像效果的渲染目标)用作RT3。

Gバッファパスは:
たびにゲームオブジェクト、拡散および鏡面色、表面平滑性、及びワールド空間通常の環境放出+ + +は、Gバッファレンダリングライトマップテクスチャを反映レンダリング。G-バッファは、後でアクセスシェーダのために、テクスチャシェーダグローバル属性に提供され、

パス照明:
Gイルミネーションバッファー照明や奥行きベースのコンピューティング。照明は、画面空間で計算され、処理時間は、シーンの複雑さとは無関係です。発光がバッファに追加されます。
点光源の近くにカメラ平面とスポットライトを通過せずに3次元形状としてレンダリングされ、部分的にまたは完全にポイントが非常に光スポットを有し、かつ高速なブロックをレンダリングするようにブロックされたZバッファテストシナリオを有効にします。周辺の平面の点を通過すると、フルスクリーンプレゼンテーション四角形として指向ランプ/スポットライトを有します。
光が影になっている場合、彼らはレンダリングされ、このプロセスで使用される、影は「自由」が表示されません。私たちは、影のプロジェクターをレンダリングし、より洗練されたライティングシェーダを使用する必要があります。
のみ照明モデルが利用可能である標準的な、異なるモデル必要な場合は、照明チャンネルシェーダを変更することができ、内蔵ファイル内部-DeferredShading.sharderシェーダの修正バージョンは、編集/プロジェクト、資産/リソースフォルダを配置しました設定は、/グラフィックウィンドウには、「カスタムシェーダ」、シェーダオプションを使用することで、この変更に変更し、「繰延します」。

レガシー繰延照明レンダリングPaht(古い照明がパス遅延レンダリング):
彼はレンダリング機能のいくつか(例えば、標準シェーダ、反射検出器など)をサポートしていないため、同様の繰延shadering、Unity5.0版からは、伝統的な機能であると考えられています。

遅延光を使用する場合は、レンダリング処理のUnityは、3つのステップに分割されます。

1.Base Pass:渲染对象以生成具有深度,法线和镜面反射功率的屏幕空间缓冲区。
2.Light Pass:使用前面生成的缓冲区用于计算照明到另一个屏幕空空间缓冲区(唯一可用的照明模型为Blinn-Phong)。
3.Final Pass:再次渲染对象。它们获取计算出的光照,将其与颜色纹理相结合,并添加任何环境/发光照明。

頂点点灯レンダリングパス(頂点照明経路)
頂点点灯経路は、典型的には、各オブジェクトの単一パスでレンダリングされ、オブジェクトの頂点は、全ての光源の照度を計算しました。
バーテックス点灯最速のレンダリングパスであり、かつ最も広範なハードウェアサポートを(コンソールと一緒に使用しないでください)持っています。
影がサポートされていない、法線マップ、クッキーと非常に繊細な鏡面ハイライト:光レベルにおけるすべての頂点が計算されるので、このように、このパスを描画するピクセル作用の大部分でサポートされていません。

公開された28元の記事 ウォン称賛18 ビュー20000 +

おすすめ

転載: blog.csdn.net/qq_18192161/article/details/90544284