格式
c++
#pragma fragment [NAME]描述
执行该命令用于给作为 片元着色器(Fragment Shader)输入的函数命名,是对屏幕上对象占据的每个像素运行的程序,通常用于计算和输出每个像素的颜色。一般情况下屏幕上有数百万个像素,并且 片元着色器(Fragment Shader)将针对所有像素进行逻辑处理,优化片元着色器是整体游戏性能优化工作的重要组成部分。
被 材质(Material)所引用的 着色器(Shader)必须执行此命令,并且需要此函数最终返回对应片元的颜色数据,否则该 着色器(Shader)无法通过编译。
字段
| 字段名 | 是否必须 | 字段值 | 描述 |
| [NAME] | 是 | < 自定义函数名 > | 给作为 片元着色器(Fragment Shader)输入的函数命名,便于在后续着色器的逻辑中使用。 |
代码示例
片元着色器(Fragment Shader)需要 顶点着色器(Vertex Shader)的结果作为输入,因此代码示例中将加入 顶点着色器(Vertex Shader)的相关逻辑,关于 顶点着色器(Vertex Shader)的输入函数相关内容您可以参阅 vertex 命令章节。
c++
//使用命名为 vert 的函数作为顶点着色器;
#pragma vertex vert
//使用命名为 frag 的函数作为片元着色器;
#pragma fragment frag
//通过结构体构造用于顶点着色器处理的顶点数据构成的新类型,类型命名为 vrt;
struct vrt
{
vec4 pos : POSITION;
};
//通过结构体构造用于由顶点着色器输出至片元着色器的新类型,类型命名为 v2f;
struct v2f
{
vec4 vertex : SV_POSITION;
};
//顶点着色器输入的函数;
v2f vert(vrt i)
{
v2f v;
//顶点位置信息的处理示例,不同着色器有不同处理逻辑;
v.vertex = vec4((i.pos.xy * 2.0),0.0,1.0);
return v;
}
//将顶点着色器的输出结果作为片元着色器的输入;
float4 frag(v2f f)
{
//片元叠加颜色信息的处理示例,不同着色器有不同处理逻辑;
vec4 color = _Color;
//返回片元着色器的处理结果;
return color;
}