====== Unity’s Rendering Pipeline? Unity的渲染路徑 ======
=== Description 描述 ===
著色器定義了一個對象如何被他自身(材質屬性)與光照所影響。因為光照計算必須內置在著色器中,同時又很多光照類型與陰影類型,所以編寫一個滿足需求且高質量的著色器是一個復雜的任務。為了是這一切變得更加簡單,Unity提供了(Surface Shaders)表面著色器,使用它能使光照、陰影、光照貼圖、向前vs延遲渲染自動化處理。
本文檔描述Unity的光照與渲染路徑的特性,以及在場景中表面著色器是如何工作。
===Rendering Paths? 渲染路徑===
光照是如何被應用以及著色器中的哪一個通道(Passed)被使用,是依賴于何種渲染路徑(Rendering Path)被使用。每一個著色器中的通道鑒別其光照類型是通過通道標簽(Pass Tags)。
1.在前向渲染(Forward Rendering)中,F(xiàn)orwardBase 與ForwardAdd通道會被使用。
2.在延遲著色渲染(Deferred Shading)中,Deferred通道會被使用。
3.在傳統(tǒng)延遲光照渲染(Legacy Deferred Lighting)中,PrepassBase和PrePassFinal通道會被使用。
4.傳統(tǒng)頂點光照渲染(Legacy Vertex Lit),Vertex,VertexLMRGBM和VertexLM通道會被使用。
5.除了以上之外,渲染陰影或者深度貼圖,ShadowCast通道會被使用。
=== Forward Rendering path 前向渲染路徑===
ForwardBase通道渲染自然光,光照貼圖,主方向光和非重要(頂點/SH)光。ForwardAdd通道被用來處理所有附加的逐像素光照;一次調用使逐個物體發(fā)光。在Forward Rendering中查閱詳細資料。
如果前向渲染被使用,但是著色器沒有一個合適的forward通道(forwardBase和forwardAdd都沒被提供),那么該對象以頂點光照路徑形式進行渲染,下同。
=== Deferred Shading path? 延遲渲染路徑 ===
Deferred 通道渲染所有光照所需要的信息(內置的shader中:漫反色顏色,鏡面反色顏色,光滑度,世界空間法線,自發(fā)光)。同時他在自發(fā)光處理中增加了光照貼圖、反色試樣和環(huán)境光照。在Deferred Shading中查詢詳細資料。
=== Legacy Deferred Lighting Path 傳統(tǒng)延遲光照路勁 ===
PrepassBase 通道渲染法線與高光指數;PrepassFinal 通道通過合并貼圖渲染最終顏色,渲染光照與自發(fā)光材質屬性。所有普通場景中,光照實在空間中分別進行的。
=== Legacy Vertex Lit Rendering path===
因為頂點光照被更多的用在那些不支持可編程著色器的平臺上,Unity不能創(chuàng)建多個著色器的排列在內部處理lightmapped和non-lightmapped對象,因此多通道處理必須被顯示的先寫。
1.Vertex 通道被用來處理非光照對象,所有的光照只被渲染一次,通過使用一個固定功能的OpenGL與Direct3D光照模型(Blinn-Phong)。
2.VertexLMRGBM 通道被用來處理光照對象,當光照貼圖使用過RGBM編碼(PC平臺)。當沒有實時光照備用使用的情況下,通道被期望混合貼圖與光照貼圖。
4.VertexLMM 通道被用來處理光照對象,當光照貼圖是都變了——LDR編碼(移動平臺)。當沒有實時光照情況下,通道被期望混合貼圖與光照貼圖。
===See Also? 更多===
1.Graphics Command Buffers 展示Unity如何開展渲染路徑。