欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-06-10 23:47:34
...

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

#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里的意义不同,在这里就是平行光的颜色。