UnityShader从入门到放弃(四)漫反射—逐顶点光照

在UnityShader的标准光照模型中共分为四种 : 自发光

                                                                                    高光反射

                                                                                    漫反射

                                                                                    环境光

下边的代码将实现逐顶点光照的漫反射效果

Shader "Luoxiaoxiao/Shader_4"{
    Properties{
		_DiffuseColor("Diffuse Color",Color)=(1,1,1,1)
	}
	SubShader{
	    Tags{"LightMode"="ForwardBase"}//引入LightMode标签 使系统捕捉光照信息
		Pass{
			CGPROGRAM
			#include "Lighting.cginc"//引入Unity内置的一些光照的变量
			#pragma vertex vert
			#pragma fragment frag 
			fixed4 _DiffuseColor;
			struct a2v{
				float4 vertex:POSITION;
				float3 normal:NORMAL;
			};
			struct v2f{
				float4 position:SV_POSITION;
				float3 color:COLOR0;
			};

			v2f vert(a2v v){
				v2f f;
				f.position=UnityObjectToClipPos(v.vertex);

				fixed3 normalDir=normalize(mul(v.normal,(float3x3)unity_WorldToObject));//将模型的发现从模型的坐标转换到世界坐标
				fixed3 lightDir=normalize(_WorldSpaceLightPos0.xyz);//对于每个顶点来说 光的位置就是光的方向  因为是平行光
				fixed3 diffuse=_LightColor0.rgb*max(dot(normalDir,lightDir),0)*_DiffuseColor.rgb;//顶点法线的颜色和设置的物体本身的颜色的融合  用相乘  对亮度几乎没有影响 
				f.color=diffuse;
				return f;
			}
			fixed4 frag(v2f f):SV_TARGET{
			     return fixed4(f.color,1);
			}
			ENDCG
		} 
	}
	Fallback "VertexLit"
}

效果如下

UnityShader从入门到放弃(四)漫反射—逐顶点光照_第1张图片

第四个与之前的相比较,已经有了明暗的变化,对于背光面会较暗。

你可能感兴趣的:(UnityShader从入门到放弃(四)漫反射—逐顶点光照)