Skip to content

简介

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]
设置颜色通道遮罩。