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里的意义不同,在这里就是平行光的颜色。
上一篇: 缺乏安全感会令用户体验度过低
下一篇: unity 后处理优化整理