`Shader “Unity Shaders/Chapter2/SecondDiffuseShader”{ Properties{ _Diffuse(“Diffuse”,Color)=(1.0,1.0,1.0,1.0)
} SubShader{ Pass{ Tags{"LightMode"="ForwardBase"} CGPROGRAM #pragma vertex vert #pragma fragment frag #include "Lighting.cginc" fixed4 _Diffuse; struct a2v{ float4 vert:POSITION; float3 normal:NORMAL; }; struct v2f{ float4 pos:SV_POSITION; float3 worldNormal:TEXCOORD0; }; v2f vert(a2v v){ v2f o; o.pos=mul(UNITY_MATRIX_MVP,v.vert); o.worldNormal=mul(v.normal,(float3x3)_World2Object); return o; } fixed4 frag(v2f i):SV_Target{ fixed3 ambient=UNITY_LIGHTMODEL_AMBIENT; fixed3 worldNormal=normalize(i.worldNormal); fixed3 worldLight=normalize(_WorldSpaceLightPos0.xyz); fixed3 diffuse=_LightColor0.rgb*_Diffuse.rgb*saturate(dot(worldNormal,worldLight)); fixed3 color=ambient+diffuse; return fixed4(color,1.0); } ENDCG } } FallBack "Diffuse"}`
基本上逐像素漫反射的代码就这些了,这个和逐顶点的没有什区别,只不过是把部分代码转移到了frag函数中,而且由于我们需要在片段着色器中用到顶点着色器输出的变量,修改了顶点着色器的输出结构体,关于漫反射就到这里,没办法,太菜了,下面我要开始写高光着色器的代码了。