Unity Shader——Writing Surface Shaders(2)——Custom Lighting models in Surface Shaders
Surface Shader中的自定義光照模型
當你在編寫?Surface Shaders?時,是在描述一個表面的屬性(反射顏色、法線……),而且光的交互過程是由一個光照模型來計算的。內建的光照模型有Lambert(漫反射光照)和BlinnPhong(鏡面光照)。
有時候,你可能想要使用一個自定義的光照模型,這在Surface Shader中是可能的。光照模型其實就是一些滿足某些約定的Cg/HLSL函數。Unity內建的光照模型Lambert和BlinnPhong定義在Lighting.cginc文件中。這個文件在:
- Windows:{Unity安裝目錄}/Data/CGIncludes/Lighting.cginc
- Mac:/Applications/Unity/Unity.app/Contents/CGIncludes/Lighting.cginc
光照模型聲明
光照模型是一系列名字以Lighting開頭的約定函數。它們能夠聲明在shader文件或者包含的文件中的任何地方。這些函數是:
注意:你不需要聲明所有的函數。光照模型要么使用視線方向,要么不使用。同樣的,如果光照模型不工作在延遲光照中,就不要聲明?_PrePass函數,而且所有使用它的shader只會編譯到正向渲染中。
解碼光照貼圖
用于正向渲染和延遲光照的光照貼圖數據的解碼可以被自定義在類似光照函數的方式中。根據光照模型是否依賴視線方向,選擇下面其中一種函數。要解碼標準的Unity光照貼圖紋理數據(傳入到color,?totalColor,indirectOnlyColor?和scale?參數中),請使用內建的DecodeLightmap函數。
自定義解碼單張光照貼圖的函數是:
自定義解碼兩張光照貼圖的函數是:
自定義解碼方向光照貼圖的函數是:
例子
Surface Shader Lighting Examples
轉載于:https://www.cnblogs.com/dreamlofter/p/4504468.html
總結
以上是生活随笔為你收集整理的Unity Shader——Writing Surface Shaders(2)——Custom Lighting models in Surface Shaders的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: pdf格式怎么转换成word格式
- 下一篇: layoutSubviews何时被调用