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);

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