Unity3D-Shader-自定义光照模型lighting model

一个最常见的的光照模型例子

#pragma surface surf BasicDiffuse

inline float4 LightingBasicDiffuse (SurfaceOutput s, fixed3 lightDir, fixed atten){
    float difLight = max(0, dot (s.Normal, lightDir));
    float4 col;
    col.rgb = s.Albedo * _LightColor0.rgb * (difLight * atten * 2);
    col.a = s.Alpha;
    return col;
}

1.在#pragma surface surf 光照模型名称

2.光照模型函数命名规则是“Lighting”+“自定义的光照名称”。

3.光照模型的5个原型

half4 LightingName (SurfaceOutput s, fixed3 lightDir, half atten);
half4 LightingName (SurfaceOutput s, fixed3 lightDir, fixed3 viewDir, half atten);
half4 LightingName_PrePass (SurfaceOutput s, half4 light);
half4 LightingName_DirLightmap(SurfaceOutput s, fixed4 color, fixed4 scale, bool surfFuncWritesNormal);
half4 LightingName_DirLightmap(SurfaceOutput s, fixed4 color, fixed4 scale, fixed3 viewDir, bool surfFuncWritesNormal,out half3 specColor);

4.第一种原型。第一个参数是输出结构,第二个参数是光线方向,也就是光源到物体表面上的点的向量,是单位向量,第三个参数衰减度,attenuation的缩写,因为光线被物体反射之后,会有能量损失,所以会有衰减。_LightColor0也是Unity内置的一个变量,它在不同的render path和pass里的意义不同,在这里就是平行光的颜色。

你可能感兴趣的:(Unity,Shader)