最简单的顶点、片元着色器_02
2020-06-02 本文已影响0人
Rayson
shader 的输入输出流程:
1.由Mesh传入顶点数据,进入顶点着色器函数(vert),每个顶点执行一次这个函数.
2.顶点变换(顶点乘以UNITY_MATRIX_MVP矩阵,这个是untiy内置变量)把顶点信息输出到片元着色器函数(frag),片 元函数是逐个象素执行的,即每个象素都执行一次.
3.它的输入是顶点函数经过差值后的信息(这个是GPU自己处理的).输出的就是我们在屏幕上看到的图像。
//shader的路径
Shader "Unity Shaders/Shader1" {
SubShader {
Pass {
//shader正文要包含在 CGPROGRAM-ENDCG 语句块里
CGPROGRAM
//顶点着色器函数名 vert
#pragma vertex vert
//片元着色器函数名 frag
#pragma fragment frag
//函数的输入v包含了这个顶点的位置,这是通过POSITION 语义指定的
//POSITION 将告诉Unity,把模型的顶点坐标填充到输入参数v中
float4 vert(float4 v : POSITION) : SV_POSITION {
//返回值该顶点在裁剪空间中的位置
//SV_POSITION 将告诉Unity,顶点着色器的输出是裁剪空间中的顶点坐标
//return mul (UNITY_MATRIX_MVP, v);
return UnityObjectToClipPos (v);//等价于上边那行
}
fixed4 frag() : SV_Target {
//SV_Target 把用户的输出颜色存储到一个渲染目标(render target)中,这里将输出到默认的帧缓存中
return fixed4(1.0, 1.0, 1.0, 1.0);
}
ENDCG
}
}
}
//shader的路径
Shader "Unity Shaders/Shader1" {
SubShader {
Pass {
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
float4 vert(float4 v : POSITION) : SV_POSITION {
return UnityObjectToClipPos (v);
}
fixed4 frag() : SV_Target {
return fixed4(1.0, 1.0, 1.0, 1.0);
}
ENDCG
}
}
}
输出效果如下:
渲染效果.png