不建议直接使用这些平台宏,因为它们并不总是有助于代码的未来兼容性。例如,如果您正在编写一个检查 D3D11 的着色器在 GPU 上运行的程序。 更多信息
参见 术语表,您可能希望确保将来该检查扩展到包括 Vulkan。相反,Unity 定义了一些辅助宏(在 HLSLSupport.cginc
中)
宏 | 用法 |
---|---|
UNITY_BRANCH |
在条件语句之前添加此宏,以告知编译器应将其编译为实际分支。在 HLSL 平台上扩展为 [branch] 。 |
UNITY_FLATTEN |
在条件语句之前添加此宏,以告知编译器应将其展平以避免实际的分支指令。在 HLSL 平台上扩展为 [flatten] 。 |
UNITY_NO_SCREENSPACE_SHADOWS |
在不使用级联屏幕空间阴影贴图的平台(移动平台)上定义。 |
UNITY_NO_LINEAR_COLORSPACE |
在不支持线性颜色空间的平台(移动平台)上定义。 |
UNITY_NO_RGBM |
在未使用 RGBM 压缩一种存储数据的方法,可减少其所需的存储空间。请参见 纹理压缩、动画压缩、音频压缩、构建压缩。 参见 术语表 用于光照贴图预渲染的纹理,包含场景中静态物体上光源的效果。光照贴图覆盖在场景几何体上以创建照明效果。 更多信息 参见 术语表 的平台(移动平台)上定义。 |
UNITY_NO_DXT5nm |
在不使用 DXT5nm 法线贴图压缩的平台(移动平台)上定义。 |
UNITY_FRAMEBUFFER_FETCH_AVAILABLE |
在“帧缓冲区颜色获取”功能可用的平台(通常是 iOS 平台)上定义。 |
UNITY_USE_RGBA_FOR_POINT_SHADOWS |
在点光源阴影贴图使用带有编码深度的 RGBA 纹理的平台上定义(其他平台使用单通道浮点纹理)。 |
UNITY_ATTEN_CHANNEL |
定义光衰减纹理的哪个通道包含数据;用于逐像素光照代码。定义为 'r' 或 'a'。 |
UNITY_HALF_TEXEL_OFFSET |
在将纹理映射到像素计算机图像中的最小单位。像素大小取决于屏幕分辨率。像素照明是在每个屏幕像素处计算的。 更多信息 参见 术语表时需要半像素偏移调整的平台上定义。 |
UNITY_UV_STARTS_AT_TOP |
始终定义为 1 或 0 的值。值为 1 的平台上,纹理 V 坐标在纹理的“顶部”为 0。类似 Direct3D 的平台使用值为 1;类似 OpenGL 的平台使用值为 0。 |
UNITY_MIGHT_NOT_HAVE_DEPTH_Texture |
如果平台可能通过手动将深度渲染到纹理中来模拟阴影贴图或深度纹理,则定义。 |
UNITY_PROJ_COORD(a) |
给定一个 4 分量向量,此宏返回适合投影纹理读取的纹理坐标。在大多数平台上,此宏直接返回给定值。 |
UNITY_NEAR_CLIP_VALUE |
定义为近裁剪平面限制相机从其当前位置所能看到的远近距离的平面。相机的可见范围在远裁剪平面和近裁剪平面之间。请参见远裁剪平面和近裁剪平面。 更多信息 参见 术语表的值。类似 Direct3D 的平台使用 1.0,而类似 OpenGL 的平台使用 –1.0。 |
UNITY_VPOS_TYPE |
定义像素位置输入 (VPOS) 所需的数据类型:D3D9 上为 float2 ,其他平台上为 float4 。 |
UNITY_CAN_COMPILE_TESSELLATION |
当着色器编译器“理解”细分着色器 HLSL 语法时定义(目前仅限于 D3D11)。 |
UNITY_INITIALIZE_OUTPUT(type,name) |
将给定 type 的变量 name 初始化为零。 |
UNITY_COMPILER_HLSL 、UNITY_COMPILER_HLSL2GLSL 、UNITY_COMPILER_CG |
指示用于编译着色器的着色器编译器。有关更多详细信息,请参阅有关 着色器编译 的文档。如果您遇到编译器之间非常具体的着色器语法处理差异,并且想要为每个编译器编写不同的代码,则可以使用此宏。 |
UNITY_REVERSED_Z
- 在使用反向 Z 缓冲区的平台上定义。存储的 Z 值范围为 1..0 而不是 0..1。