Surface Shaders的個人總結

在表面着色器中定製照明模型

Surface Shaders中有兩個內置的光照模型:Lambert用於diffuse lighting(漫反射),BlinnPhong用於specular lighting(鏡面反射).
Lighting.cginc這個文件在Unity中定義了這些模型.
如果你想使用自定義照明模型可以用Surface Shaders 做到這一點.一個燈光模型僅是一堆Cg/HLSL函數,他們匹配一些約定.

燈光模型說明

燈光模型是由具有Lighting開頭的常規函數組成,您可以在着色器文件的任何地方生命它,或者其中一個包含文件.

  1. half4 Lighting<Name> (SurfaceOutput s, UnityGI gi):使用這個不依賴於視圖方向的燈光模型在forward rendering中.
  2. half4 Lighting<Name> (SurfaceOutput s, half3 viewDir, UnityGI gi):依賴於視圖方向的燈光模型在forward rendering中.
  3. half4 Lighting<Name>_Deferred (SurfaceOutput s, UnityGI gi, out half4 outDiffuseOcclusion, out half4 outSpecSmoothness, out half4 outNormal):在延遲光照路徑中使用。
  4. half4 Lighting<Name>_PrePass (SurfaceOutput s, half4 light):在light prepass(遺留延遲的)光照路徑中使用此功能。

注意:您不需要聲明所有函數.照明模型要麼使用視圖方向,要麼不使用.類似的,如果照明模型只在forward rendering中工作,則不要聲明_Deferred或_Prepass函數.這確保使用它的着色器只編譯forward rendering.

Custom GI

聲明以下函數以自定義解碼lightmap數據和調查:
1.half4 Lighting<Name>_GI (SurfaceOutput s, UnityGIInput data, inout UnityGI gi);

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章