Chapter5 开始Unity Shader
一、最简单的顶点/片元着色器
1.第一个简单代码
Shader "Custom/Chapter5_SimpleShader"
{
SubShader{
Pass{
CGPROGRAM //由CGPROGRAM和ENDCG包含的CG代码片段
#pragma vertex vert
#pragma fragment frag
//这两行告诉Unity,哪个函数包含了顶点着色器的代码,哪个函数包含了片元着色器的代码
//#pragma vertex name —— name即为函数名
//#pragma fragment name
float4 vert(float4 v : POSITION) : SV_POSITION{
//vert函数输入v包含了这个顶点的位置,是通过POSITION这个语义指定的,返回float4类型的值,是该顶点在裁剪空间中的位置
//POSITION 和 SV_POSITION都是不可省略的,告诉用户输入输出是什么
//POSTION告诉unity把模型顶点坐标填充到输入参数中
//SV_POSITION告诉输出是裁剪空间中的顶点坐标
return mul (UNITY_MATRIX_MVP, v); //把顶点坐标从模型空间坐标转换到裁剪空间
}
fixed4 frag():SV_Target{
//SV_Target告诉用户输出颜色存储到一个渲染目标中(这里输出到默认的帧缓存)
return fixed4(1.0, 1.0, 1.0, 1.0); //白色的fixed4类型的变量
}
ENDCG
}
}
}
- 可以得到一个白色的球
2.想要得到顶点纹理坐标和法线方向
定义一个结构体
Shader "Custom/Chapter5_SimpleShader"
{
SubShader{
Pass{
CGPROGRAM //由CGPROGRAM和ENDCG包含的CG代码片段
#pragma vertex vert
#pragma fragment frag
//这两行告诉Unity,哪个函数包含了顶点着色器的代码,哪个函数包含了片元着色器的代码
//#pragma vertex name —— name即为函数名
//#pragma fragment name
//使用一个结构体来定义顶点着色器的输入
struct a2v{
//a2v表示把数据从应用阶段传递到顶点着色器中
//POSITION告诉unity,用模型空间的顶点坐标填充vertex变量
float4 vertex : POSITION;
//NORMAL告诉unity,用模型空间的法线方向填充normal变量
float3 normal : NORMAL;