版本:Unity 6 (6000.0)
语言:English
基于着色器模型进行分支
基于 Unity 版本进行分支

基于平台特性进行分支

不建议直接使用这些平台宏,因为它们并不总是有助于代码的未来兼容性。例如,如果您正在编写一个检查 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_HLSLUNITY_COMPILER_HLSL2GLSLUNITY_COMPILER_CG 指示用于编译着色器的着色器编译器。有关更多详细信息,请参阅有关 着色器编译 的文档。如果您遇到编译器之间非常具体的着色器语法处理差异,并且想要为每个编译器编写不同的代码,则可以使用此宏。
  • UNITY_REVERSED_Z - 在使用反向 Z 缓冲区的平台上定义。存储的 Z 值范围为 1..0 而不是 0..1。

其他资源

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