欢迎加入Unity业内qq交流群:956187480
一个简单的顶点/片元着色器
// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)'
Shader "a幻世界/顶点片元着色器"
{
//暴露在外面的属性栏
Properties{
//声明一个color属性
_Color("Color",Color) = (1,1,1,1)
}
//针对显卡a的shubshader
SubShader{
Pass{
//设置渲染状态和标签
//开始CG代码片段
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
//为了在cg代码段访问_Color属性,我们必须在这里定义一个跟Properties里面相对应的变量,名称和类型必须一致
float4 _Color;
//使用一个结构体来定义顶点着色器的输入
struct a2v {
float4 pos:POSITION;//用模型空间的顶点填充pos变量
float4 color:COLOR0;//用模型空间的颜色填充color
float4 normal:NORMAL;//用模型的法线方向填充normal变量
float4 texcoord:TEXCOORD0;//用模型的第一套纹理坐标填充texcoord变量
};
//使用一个结构体来定义顶点着色器的输出,在顶点着色器跟片元着色器之间传递信息
struct v2f {
float4 pos:SV_POSITION;//SV_POSITION语义告诉unity,pos里面包含了顶点在裁剪空间里的位置信息
float4 color:COLOR0;//COLOR0语义存储颜色信息
};
//写一个输出模型空间信息输出裁剪空间信息的函数
v2f vert(a2v v) {
v2f o;//创建一个顶点着色器输出的结构体
o.pos = UnityObjectToClipPos(v.pos);//把模型空间的顶点位置转换到裁剪空间的位置
o.color = v.normal*0.5f + fixed4(0.5, 0.5, 0.5,0.5);//把模型空间的法线方向分量[-1,1]映射到裁剪空间传递给片元着色器
return o;
}
//片元着色器接收到顶点信息后通过插值把颜色渲染到屏幕上
float4 frag(v2f i):SV_Target{
float4 c = i.color;
c *= _Color.rgba;
return fixed4(c);
}
ENDCG
}
//其他需要的pass
}
Fallback "Diffuse"
}