Skip to content

格式

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;
}