格式
c++
#pragma shader_feature_base描述
执行了该命令的 着色器(shader)将会同时套用多个基础变体。其中包括定向光相关的变体,以及雾效相关的变体。
套用变体
| 变体 | 描述 |
USE_DIRECTIONAL_LIGHT | 该变体不会影响内置宏,您可以判断该变体被定义后编辑受 定向光(Directional Lights)影响的效果。 |
FOG_LINEAR 或 FOG_EXP 或 FOG_EXP2 | 系统会根据雾效的不同模式套用不同的变体。 · 当雾效模式是 线性(Linear)模式时套用 FOG_LINEAR 变体。· 当雾效模式是 指数(Exponential)模式时套用 FOG_EXP 变体。· 当雾效模式是 指数平方(Exponential Squared)模式时套用 FOG_EXP2 变体。 套用上述变体系统会根据雾效模式计算出对应模式下 顶点着色器(Vertex Shader)的 雾化因子(Fog Factor),随后您可以通过内置宏 CALC_FOG_FACTOR(z) 读取当前雾效模式下距离摄像机距离为 z 位置的雾化因子值,关于该宏的详细描述请参阅 内置宏 章节。 |
代码示例
c++
#pragma shader_feature_base
#ifdef USE_DIRECTIONAL_LIGHT
//当前示例一定会执行此处逻辑;
#endif
#if defined(FOG_LINEAR) || defined(FOG_EXP) || defined(FOG_EXP2)
#if defined(FOG_LINEAR)
//当雾效模式是 线性(Linear)模式时,执行此处逻辑;
#elif defined(FOG_EXP)
//当雾效模式是 指数(Exponential)模式时,执行此处逻辑;
#elif defined(FOG_EXP2)
//当雾效模式是 指数平方(Exponential Squared)模式时,执行此处逻辑;
#endif
#endif在多个 着色器(shader)套用同一个 头文件(Header File)的时候 shader_feature_base 命令将非常便捷,判断该命令套用的变体被定义后执行特定逻辑,即使套用同一个头文件,受 定向光(Directional Lights)和雾效影响的着色器(执行此命令)与不受定向光和雾效影响的着色器(不执行此命令)也会有不同的效果。
假设命名为 "Game/Default/GetLightNFog" 的 着色器(Shader)代码如下:
c++
#pragma name "Game/Default/GetLightNFog"
#pragma shader_feature_base
#include "Game_Common.h"命名为 Game_Common.h 的 头文件(Header File)代码如下:
c++
#pragma once
//这里可以编辑多个着色器通用的逻辑;
#ifdef USE_DIRECTIONAL_LIGHT
//执行 shader_feature_base 命令的着色器会执行的逻辑;
#endif
#if defined(FOG_LINEAR) || defined(FOG_EXP) || defined(FOG_EXP2)
//执行 shader_feature_base 命令的着色器会执行的逻辑;
#if defined(FOG_LINEAR)
//当雾效模式是 线性(Linear)模式时,执行此处逻辑;
#elif defined(FOG_EXP)
//当雾效模式是 指数(Exponential)模式时,执行此处逻辑;
#elif defined(FOG_EXP2)
//当雾效模式是 指数平方(Exponential Squared)模式时,执行此处逻辑;
#endif
#endif