第2篇 讓你的應用更炫彩 - unity 中的照明 - Unity 3D ShaderLab開發實踐
chapter 5 第一個被執行的pass
Rendering Path其實指的就是渲染場景中光照的方式。
unity支援三種RenderingPath:VertexLit,Forward,Deffered Lighting,為Pass中使用的LightMode标簽有:Vertex,ForwardBase,ForwardAdd,PrepassBase,PrepassFinal等。
VertexLit:基于頂點的光照計算方式,是Forward的子集;
Forward:前向渲染是内置渲染管線中的預設渲染路徑。它是一個通用的渲染路徑。在每個像素進行光照計算,渲染次數依賴于光源數量;如果光源的RenderMode設定成了Not Important,那麼總是per-vertex計算或采用球諧函數(每個vertex上最多有4個點光源,其餘采用球諧波函數,TODO??);平行光總是per-pixel,RenderMode為important的光源總是per-pixel;如果上述結果導緻燈光少于目前像素燈光計數品質設定,那麼會有更多個光源按照亮度遞減的順序,進行per-pixel渲染;
Deffered Lighting:延遲着色是内置渲染管線中光照和陰影保真度最高的渲染路徑。并不支援半透物體。不支援正交投影。不支援硬體抗鋸齒,如果您的項目有大量實時燈光并且需要高水準的照明保真度,并且您的目标硬體支援延遲着色,那麼此渲染路徑可能是您項目的不錯選擇。
可以參見:【原】實時渲染中常用的幾種Rendering Path - 桑果 - 部落格園 (cnblogs.com),Unity3D光照前置知識——Rendering Paths(渲染路徑)及LightMode(光照模式)譯解 - oayx - 部落格園 (cnblogs.com)
chapter 6 VertexLit渲染路徑
頂點照明,就是基于物體的每一個頂點進行光的照明計算,然後根據頂點的光照資訊,對面片上的像素光照進行線性插值。即,在頂點着色器中計算顔色,然後片段着色器中的顔色是頂點顔色插值得到的。是以Vertex Lighting的效果和效率與物體的網格密度有關,密度大,效果就貼近實物。Edit/Render Settings指令有相關的參數設定。
unity内置着色器變量見:内置着色器變量 - Unity 手冊
在
LightMode = Vertex
的pass内,
unity_LightPosition[4]
和
unity_LightColor[4]
是存取光源資料最可靠的第一首選手段。

上述代碼中,隻使用了第一個光源進行着色。
chapter 7 Forward渲染路徑
ForwardAdd這個Pass和ForwardBase需要一起使用,否則會被忽略。
Unity Shader入門教程(十) :多光源的光照處理以及光照衰減_程式猴子sy的部落格-CSDN部落格_unity 多光源
簡單了解:一個unity shader通常會定義一個Base Pass(可以是多個)。一個BasePass(
Tags { "LightMode" = "ForwardBase" }
)僅會執行一次(定義多個basePass除外),而一個Additional Pass(
Tags { "LightMode" = "ForwardAdd" }
)會根據影響該物體其他逐像素光源的數目多次調用,即每個逐像素光源會執行一次Additional Pass。
chapter 8 lightmapping
參見:unity燈光Lightmapping、LightProbes - MrZivChu - 部落格園 (cnblogs.com)
其他資料
Unity3D -- 光照常用函數和變量(Shader學習之二)_陽仔部落格-CSDN部落格
版權說明
作者: grassofsky
出處: http://www.cnblogs.com/grass-and-moon
本文版權歸作者,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出, 原文連結 如有問題, 可郵件([email protected])咨詢.