关联 编辑器
然后双击 shader 代码就会启动vscode。
最简单的shader代码
UnityObjectToClipPos
用来确定在屏幕中的位置。其他的都是不重要、用来声明的。
兰伯特代码
- 点乘
dot
结果是一个标量float
- vscode代码提示 插件
Shaderlab
- float 可自动转化为 float4
- 获取法向量:
UnityObjectToWorldNormal(模型法向量)
- 获取光方向:
normalize(_WorldSpaceLightPos0.xyz)
//输入结构 模型数据
struct VertexInput {
float4 vertex : POSITION;
float3 normal : NORMAL;
};
//输出结构
struct VertexOutput {
float4 pos : SV_POSITION;
float3 nDirWS : TEXCOORD0;
};
//顶点-->输出结构 传入的是模型数据
VertexOutput vert (VertexInput v) {
VertexOutput o = (VertexOutput) 0; //新建一个输出结构
o.pos = UnityObjectToClipPos( v.vertex );//获取屏幕坐标,用于在屏幕中显示
o.nDirWS =UnityObjectToWorldNormal(v.normal);//获取世界坐标系的法线向量,存入输出结构体
return o; //传给 frag函数
}
//输出结构-->像素 i 就是VertexOutput 返回的数据
float4 frag(VertexOutput i) : COLOR {
float3 nDirWS = i.nDirWS;//接收 法线向量
float3 lightDirection = normalize(_WorldSpaceLightPos0.xyz); //光向量
float nDot = dot(nDirWS,lightDirection);
float Lambert = max(0.0,nDot)
float halfLambert = nDot*0.5+0.5; //半兰伯特
return float4(lambert);//输出,返回
}