Version: Unity 6.0 (6000.0)
语言 : 中文
基于着色器模型的分支
基于 Unity 版本的分支

基于平台功能的分支

不鼓励直接使用这些平台宏,因为它们并非始终有助于代码的未来验证。例如,如果您正在编写一个检查 D3D11 的着色器,您可能希望确保在将来将这项检查扩展为包含 Vulkan。可改用 Unity 定义的几个 helper 宏(在 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) 将特定_类型_的变量_名称_初始化为零。
UNITY_COMPILER_HLSL, UNITY_COMPILER_HLSL2GLSL, UNITY_COMPILER_CG 指示正在使用哪个着色器编译器来编译着色器。有关更多详细信息,请参阅有关着色器编译的文档。如果您遇到编译器之间有非常具体的着色器语法处理差异,并希望为每个编译器编写不同的代码,请使用此宏。
  • UNITY_REVERSED_Z - 在使用反转 Z 缓冲区的平台上定义。存储的 Z 值的范围是 1 到 0,而不是 0 到 1。

其他资源

基于着色器模型的分支
基于 Unity 版本的分支