简介
SandMod 的 着色器(Shader)提供了内置的 命令(Command),您可以使用这些 命令(Command)在执行着色器程序之前设置系统的渲染状态、模式、内容。
执行格式
SandMod 支持执行命令的方式为使用 #pragma 预处理指令,然后空格后指定命令语句,然后空格后指定该命令语句支持的字段,有些命令支持多个字段。以下为执行命令的案例:
c++
//着色器(Shader)必须要有的 name 命令;
#pragma name "Game/Example_Shader"
//命令语句为 vertex,字段 vert;
#pragma vertex vert
//命令语句为 property,后分别用于指定材质属性类别、指定材质属性命名的多个字段;
#pragma property texture2D _MainTex内置命令
编译命令
| #pragma once |
| 当前 着色器(shader)作为 头文件(Header File)被引入后,仅会被展开一次。(通常在头文件中使用) |
| #pragma nocommon |
| 强制当前 着色器(shader)编译时不导入命令库,其他命令将会失效。 |
定义名字命令
| #pragma name [SNAME] |
| 为当前 着色器(shader)命名。 |
套用变体命令
| #pragma shader_feature_base |
| 着色器(shader)将会同时套用多个基础变体。 |
| #pragma shader_feature_additional_light |
| 着色器(shader)将会套用点光源和聚光灯光源类型变体。 |
| #pragma shader_feature_shadow |
| 着色器(shader)将会套用阴影变体。 |
| #pragma shader_feature_fog |
| 着色器(shader)根据不同的 雾效模式(Fog Model)套用不同雾效变体。 |
| #pragma shader_feature [FEATURES] |
| 着色器(shader)将会套用您自定义的变体。 |
渲染配置命令
| #pragma renderqueue [VALUE] |
| 指定 着色器(shader)的 渲染队列(Render Queue)。 |
| #pragma cull [CTYPE] |
| 配置三角面片剔除方法。 |
| #pragma offset [FACTOR],[UNITS] |
| 指定 多边形深度偏移(Polygon Offset)的参数。 |
属性定义与读取
| #pragma property [PTYPE] [NAME] [DVALUE] |
| 指定 着色器(Shader)中支持的材质属性,材质属性是可用于着色器内的变量,也可在编辑器上通过 材质(Material)访问。 |
| #pragma using [BUILDIN_UNIFORMS] |
| 指定 着色器(Shader)内引用的内置全局 Uniform。 |
指定指令命令
| #pragma vertex [NAME] |
| 指定作为 顶点着色器(Vertex Shader)输入的函数。 |
| #pragma fragment [NAME] |
| 指定作为 片元着色器(Fragment Shader)输入的函数。 |
深度测试方法
| #pragma zwrite [ENABLE] |
| 设置 深度缓冲(Depth Buffer)区写入模式。 |
| #pragma zclip [ENABLE] |
| 设置 深度剪辑(Depth Clip)模式。 |
| #pragma ztest [CF] |
| 设置 深度测试(Depth Testing)模式。 |
模板测试配置
| #pragma stencil [ENABLE] |
| 设置是否启用 模板测试(Stencil Test)。 |
| #pragma stencil_args [SARGS] [VALUE] |
| 配置模板测试,以及向模板缓冲区写入的内容。 |
混合配置
| #pragma blend [SrcBT] [DstBT] |
| 启动和配置颜色、透明度混合效果。 |
| #pragma blendop [BO] |
| 颜色、透明度混合的方式。 |
| #pragma alphaToMask [ENABLE] |
| 设置是否启用 Alpha 到覆盖模式。 |
颜色遮罩命令
| #pragma colorMask [CM] |
| 设置颜色通道遮罩。 |
