Shader "Custom/Lambert"
{
Properties {
}
SubShader {
Tags {
"RenderType"="Opaque"
}
LOD 200
Pass {
Name "FORWARD"
Tags {
"LightMode"="ForwardBase"
}
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
#pragma multi_compile_fwdbase_fullshadows
#pragma target 3.0
//输入结构
struct VertexInput {
float4 vertex : POSITION; //获取模型顶点信息
float4 normal : NORMAL; //获取模型法线信息
};
//输出结构
struct VertexOutput {
float4 pos : SV_POSITION; //获取屏幕顶点位置
float3 nDirWS : TEXCOORD0; //获取世界空间法线信息
};
//顶点shader
VertexOutput vert (VertexInput v) {
VertexOutput o = (VertexOutput)0; //新建输出结构
o.pos = UnityObjectToClipPos( v.vertex ); //把模型顶点信息放到屏幕
o.nDirWS = UnityObjectToWorldNormal(v.normal); //把模型法线放到世界空间
return o;
}
//像素shader
float4 frag(VertexOutput i) : COLOR {
float3 nDir = i.nDirWS; //获取法线方向
float3 lDir = normalize(_WorldSpaceLightPos0.xyz); //获取光方向(反向)
float Dot1 = dot(nDir,lDir); //点乘
float lambert = max(0.0,Dot1); //取大于0
return float4(lambert,lambert,lambert,1.0); //输出最终颜色
}
ENDCG
}
}
FallBack "Diffuse"
}
lambert
最新推荐文章于 2024-06-11 17:17:05 发布