预定义着色器预处理宏

编译着色器程序时,Unity 会定义几个预处理宏。

目标平台

此外,当目标着色语言为 GLSL 时定义 SHADER_TARGET_GLSL(当定义了 SHADER_API_GLES 时总是为真;在使用了 #pragma glsl 后,SHADER_API_OPENGL 可以为真)。

为“移动”平台 (iOS/Android) 进行编译时,为 SHADER_API_GLES 定义 SHADER_API_MOBILE;在为“桌面”(本地客户端)进行编译时不定义。

平台差异帮助

由于不是特别有前瞻性,因此不建议直接使用这些平台的宏。例如,如果您正在编写检查 D3D 的着色器,那么也许将来该检查应扩展到包括 D3D11。相反,Unity 定义了一些帮助宏(在 HLSLSupport.cginc 中)来对此提供 帮助。

阴影贴图宏

在不同的平台上,阴影贴图的声明和采样可能非常不同。因此 Unity 有几个宏可为此提供 帮助:

常量缓冲区宏

Direct3D 11 将所有着色器变量集合到“常量缓冲区”中。大多数 Unity 内置变量都已经集合了,但对于您自己的着色器变量而言,更理想的方法是根据期望的更新频率将其放入不同的常量缓冲区中。

为此,使用 CBUFFER_START(name)CBUFFER_END 宏:

    CBUFFER_START(MyRarelyUpdatedVariables)
    float4 _SomeGlobalValue;
    CBUFFER_END

表面着色器通道标志

编译表面着色器时,着色器以产生用于不同通道照明的大量代码结束。编译每个通道时,定义下列宏之一:

Page last updated: 2013-06-28