天天看點

第2篇 讓你的應用更炫彩 - unity 中的照明 - Unity 3D ShaderLab開發實踐

第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]

是存取光源資料最可靠的第一首選手段。

第2篇 讓你的應用更炫彩 - unity 中的照明 - Unity 3D ShaderLab開發實踐

上述代碼中,隻使用了第一個光源進行着色。

chapter 7 Forward渲染路徑

ForwardAdd這個Pass和ForwardBase需要一起使用,否則會被忽略。

第2篇 讓你的應用更炫彩 - unity 中的照明 - Unity 3D ShaderLab開發實踐

Unity Shader入門教程(十) :多光源的光照處理以及光照衰減_程式猴子sy的部落格-CSDN部落格_unity 多光源

簡單了解:一個unity shader通常會定義一個Base Pass(可以是多個)。一個BasePass(

Tags { "LightMode" = "ForwardBase" }

)僅會執行一次(定義多個basePass除外),而一個Additional Pass(

Tags { "LightMode" = "ForwardAdd" }

)會根據影響該物體其他逐像素光源的數目多次調用,即每個逐像素光源會執行一次Additional Pass。

第2篇 讓你的應用更炫彩 - unity 中的照明 - Unity 3D ShaderLab開發實踐

chapter 8 lightmapping

參見:unity燈光Lightmapping、LightProbes - MrZivChu - 部落格園 (cnblogs.com)

其他資料

Unity3D -- 光照常用函數和變量(Shader學習之二)_陽仔部落格-CSDN部落格

版權說明

作者: grassofsky

出處: http://www.cnblogs.com/grass-and-moon

本文版權歸作者,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出, 原文連結 如有問題, 可郵件([email protected])咨詢.