版权声明:本文为博主原创文章,未经博主允许不得转载。如有问题,欢迎指正。 https://blog.csdn.net/qq_37352817/article/details/85113333
- 逐像素:
Shader "_MyShader/Diffuse/fragment"
{
Properties
{
_Diffuse ("color1",COLOR) = (1,1,1,1)
}
SubShader
{
pass{
Tags {"LightMode" = "ForwardBase"}
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "Lighting.cginc"
fixed4 _Diffuse;
struct a2v{
float4 vertex:POSITION;
float3 normal:NORMAL;
};
struct v2f{
float4 pos:SV_POSITION;
float3 worldNormal:POSITION1;
};
v2f vert(a2v v){
v2f o;
o.pos = mul(UNITY_MATRIX_MVP,v.vertex);
//将法线转换到世界坐标中
o.worldNormal=normalize(mul(v.normal,(float3x3)_World2Object));
return o;
}
fixed4 frag (v2f i):SV_Target{
//环境光的颜色
fixed4 amb = UNITY_LIGHTMODEL_AMBIENT;
//得到世界坐标中的光源颜色
fixed3 worldLight=normalize(_WorldSpaceLightPos0);
//漫反射
fixed3 diffuseColor = _LightColor0 * _Diffuse * saturate(dot(worldLight,i.worldNormal));
//半兰伯特
//fixed3 diffuseColor = _LightColor0 * _Diffuse * (0.5*dot(worldLight,i.worldNormal)+0.5);
return fixed4(diffuseColor,1)+amb;
}
ENDCG
}
}
FallBack "Diffuse"
}
- 逐顶点
Shader "_MyShader/Diffuse/vertex"
{
Properties
{
_Diffuse ("color1",COLOR) = (1,1,1,1)
}
SubShader
{
pass{
Tags {"LightMode" = "ForwardBase"}
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "Lighting.cginc"
fixed4 _Diffuse;
struct a2v{
float4 vertex:POSITION;
float3 normal:NORMAL;
};
struct v2f{
float4 pos:SV_POSITION;
float3 color:COLOR;
};
v2f vert(a2v v){
v2f o;
o.pos = mul(UNITY_MATRIX_MVP,v.vertex);
//环境光的颜色
fixed3 amb = UNITY_LIGHTMODEL_AMBIENT;
//将法线转换到世界坐标中
fixed3 worldNormal=normalize(mul(v.normal,(float3x3)_World2Object));
//得到世界坐标中的光源颜色
fixed3 worldLight=normalize(_WorldSpaceLightPos0);
//漫反射
fixed3 diffuseColor = _LightColor0 * _Diffuse * saturate(dot(worldLight,worldNormal));
//半兰伯特
//fixed3 diffuseColor = _LightColor0 * _Diffuse * (0.5*dot(worldLight,worldNormal)+0.5);
o.color = diffuseColor+amb;
return o;
}
fixed4 frag (v2f i):SV_Target{
return fixed4(i.color,1);
}
ENDCG
}
}
FallBack "Diffuse"
}