在表面着色器中定制照明模型
Surface Shaders中有两个内置的光照模型:Lambert用于diffuse lighting(漫反射),BlinnPhong用于specular lighting(镜面反射).
Lighting.cginc这个文件在Unity中定义了这些模型.
如果你想使用自定义照明模型可以用Surface Shaders 做到这一点.一个灯光模型仅是一堆Cg/HLSL函数,他们匹配一些约定.
灯光模型说明
灯光模型是由具有Lighting开头的常规函数组成,您可以在着色器文件的任何地方生命它,或者其中一个包含文件.
- half4 Lighting<Name> (SurfaceOutput s, UnityGI gi):使用这个不依赖于视图方向的灯光模型在forward rendering中.
- half4 Lighting<Name> (SurfaceOutput s, half3 viewDir, UnityGI gi):依赖于视图方向的灯光模型在forward rendering中.
- half4 Lighting<Name>_Deferred (SurfaceOutput s, UnityGI gi, out half4 outDiffuseOcclusion, out half4 outSpecSmoothness, out half4 outNormal):在延迟光照路径中使用。
- 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);