Fragment Shader 的输入值

内置输入列表

Vertex Shader 向 Fragment Shader 传递了许多常用变量,列表如下:

Fragment Shader 输入值 类型 使用时需要开启的宏 含义
FSInput_worldPos vec3 N/A World Position 世界坐标
FSInput_worldNormal vec3 N/A World Normal 世界法线
FSInput_faceSideSign float N/A Two Side Sign 物理正反面标记,可用于双面材质
FSInput_texcoord vec2 N/A UV0
FSInput_texcoord1 vec2 N/A UV1
FSInput_vertexColor vec4 N/A Vertex Color 顶点颜色
FSInput_worldTangent vec3 N/A World Tangent 世界切线
FSInput_mirrorNormal float N/A Mirror Normal Sign 镜像法线标记
FSInput_localPos vec4 CC_SURFACES_TRANSFER_LOCAL_POS Local Position 局部坐标
FSInput_clipPos vec4 CC_SURFACES_TRANSFER_CLIP_POS Clip Position 投影/裁切空间坐标

宏开关

当需要使用带有宏开关的输入参数时,需要在 macro-remapping 代码段中开启相应的宏,示例代码如下:

CCProgram macro-remapping %{
    ...
    //使用 FSInput_localPos
    #define CC_SURFACES_TRANSFER_LOCAL_POS 1
    //使用 FSInput_clipPos
    #define CC_SURFACES_TRANSFER_CLIP_POS 1
    ...
}

使用说明

在任意函数中直接调用即可。

自定义传递值

在制作一些特殊效果时,需要 Vertex Shader 向 Fragment Shader 传递更多信息,此时需要我们自定义传递变量。

新增一个自定义的传递变量非常简单,我们以新增一个 testVec3 为例。

首先,在 Vertex Shader 中声明一个带 out 标记的变量,示例代码如下:

CCProgram surface-vertex %{
    ...
    out vec3 testVec3;
    ...
}

再在 Fragment Shader 声明对应的带 in 标记的变量即可,示例代码如下:

CCProgram surface-fragment %{
    ...
    in vec3 testVec3;
    ...
}

接下来就可以在 Fragment Shader 的代码中使用 testVec3 了。

条与 "" 相匹配的结果

    没有与 "" 匹配的结果