US2S3L8——顶点-片元着色器基本结构
US2S3L8——顶点-片元着色器基本结构
顶点着色器的基本结构
首先需要使用 #pragma vertex 来指定实现顶点着色器的函数
最基础的顶点着色器函数要求:
-
参数类型为
float4
,它代表传入的顶点的坐标,该参数需要由POSITION
语义修饰,它代表**把模型的顶点坐标填充到这个参数当中** -
返回值类型为
float4
,它代表经过变换的顶点坐标,返回值需要由SV_POSITION
语义修饰,它代表**输出的内容是裁剪空间中的顶点坐标** -
函数内部需要对传入的模型空间的顶点坐标转换到裁剪空间后再返回出去
可以使用
mul(UNITY_MATRIX_MVP, *)
,其中mul()
是CG提供的内置的矩阵和向量的乘法运算函数,
UNITY_MATRIX_MVP
代表一个变换矩阵,是Unity内置的模型M,观察V,投影P矩阵的集合上面的写法是旧写法,在Unity2022内,它将被Unity自动替换为
UnityObjectToClipPos(v)
,它是Unity封装的函数,效果是一样的
关于语义是什么,详见:US2S3L9——语义
1 | CGPROGRAM |
片元着色器的基本结构
首先需要使用 #pragma fragment 来指定实现片元着色器的函数
最基础的片元着色器函数要求:
-
返回值类型为
fixed4
,它代表这个片元(像素)的颜色,返回值需要由SV_Target
语义修饰,它代表把用户输出颜色存储到一个渲染目标中
SV_Target
在这里将输出到默认的帧缓存中 -
函数内部经过处理需要去返回一个
fixed4
颜色,表示模型在屏幕上的某个像素显示什么颜色最简单的片元着色器可以直接返回一个固定的颜色,相应的使用对应Shader的材质将最终完全显示为这个颜色
1 | CGPROGRAM |
最简单的顶点/片元着色器示例
下面的顶点/片元着色器只完成了让模型空间下的顶点坐标转换到裁剪空间,同时让使用该着色器的材质直接完全显示为某种颜色
1 | Shader "TeachShader/Lesson20" |
使用该Shader的材质的效果:
使用此Shader的材质的模型的显示效果: