- 我们接着上节写逐像素漫反射着色器,逐像素漫反射着色器和逐顶点漫反射着色器差不多,我们可以再原来的代码的基础上面进行适当的修改,开始撸代码:
`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函数中,而且由于我们需要在片段着色器中用到顶点着色器输出的变量,修改了顶点着色器的输出结构体,关于漫反射就到这里,没办法,太菜了,下面我要开始写高光着色器的代码了。