Shader笔录003在这里插入图片描述
Shader "ZhuangClass\L03\Lambert" {
Properties {
}
SubShader {
Tags {
"RenderType"="Opaque"
}
LOD 100
Pass {
Name "FORWARD"
Tags {
"LightMode"="ForwardBase"
}
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
#pragma multi_compile_fwdbase_fullshadows
#pragma multi_compile_fog
#pragma target 3.0
struct VertexInput {
float4 vertex : POSITION; // 将模型顶点信息输入进来
float3 normal : NORMAL; // 将模型法线信息输入进来
};
struct VertexOutput {
float4 pos : SV_POSITION; // 由模型顶点信息换算而来的顶点屏幕位置
float3 nDirWS : TEXCOORD0; // 由模型法线信息换算而来的世界空间法线信息
};
// vert(顶点shader) 会将输入结构转换成输出结构
// 输入结构>>>>顶点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 lightDir=normalize(_WorldSpaceLightPos0.xyz);
// 获取世界空间的灯光方向
float v=dot(nDir,lightDir);
// 法线方向点乘世界光线
float Lambert=max(0.0,v);
// 截断负值
return float4(Lambert,Lambert,Lambert,1.0);
// 输出最终颜色
}
ENDCG
}
}
FallBack "Diffuse"
}
以上是我学习B站庄懂老师做的笔记以及注释.