版本: Unity 6 (6000.0)
语言 : 英语
ShaderLab: 旧版顶点数据通道映射
HLSL 编译目标命令引用

HLSL 编译指示引用

标准编译指示

Unity 支持所有作为标准 HLSL 一部分的 #pragma 指令,只要这些指令位于常规包含文件中。有关这些指令的更多信息,请参阅 HLSL 文档:pragma 指令.

表面着色器

如果您正在编写 表面着色器一种编写内置渲染管线着色器的高效方式。 更多信息
参见 词汇表
,请使用此指令告诉编译器使用哪个函数作为 表面函数,并将数据传递给该函数。

语句 函数
#pragma surface <surface function> <lighting model> <optional parameters> 使用给定名称编译函数作为表面着色器,以便它与给定的光照模型一起使用。有关更多信息,请参阅 表面着色器.

着色器阶段

如果您正在编写常规图形 着色器在 GPU 上运行的程序。 更多信息
参见 词汇表
,请使用这些指令告诉编译器使用哪些函数来执行不同的着色器阶段。#pragma vertex#pragma fragment 指令是必需的,但其他阶段是可选的。

语句 函数
#pragma vertex <name> 使用给定名称编译函数作为顶点着色器。将 <name> 替换为函数名称。此指令在常规图形着色器中是必需的。
#pragma fragment <name> 使用给定名称编译函数作为片段着色器。将 <name> 替换为函数名称。此指令在常规图形着色器中是必需的。
#pragma geometry <name> 使用给定名称编译函数作为几何着色器。将 <name> 替换为函数名称。此选项会自动启用 #pragma require geometry;有关更多信息,请参阅 在 HLSL 中针对着色器模型和 GPU 功能.

注意:Metal 不支持几何着色器。
#pragma hull <name> 使用给定名称编译函数作为 DirectX 11 外壳着色器。将 <name> 替换为函数名称。这会自动添加 #pragma require tessellation;有关更多信息,请参阅 在 HLSL 中针对着色器模型和 GPU 功能.
#pragma domain <name> 使用给定名称编译函数作为 DirectX 11 域着色器。将 <name> 替换为函数名称。此选项会自动启用 #pragma require tessellation;有关更多信息,请参阅 在 HLSL 中针对着色器模型和 GPU 功能.

着色器变体和关键字

使用这些指令告诉着色器编译器如何处理 着色器变体和关键字。有关更多信息,请参阅 在 HLSL 中声明和使用着色器关键字.

指令 描述
#pragma multi_compile <keywords> 声明一组关键字。编译器将所有关键字包含在构建中。

您可以使用后缀(如 _local)来设置其他选项。

有关更多信息和支持的后缀列表,请参阅 在 HLSL 中声明和使用着色器关键字.
#pragma shader_feature <keywords> 声明一组关键字。编译器将从构建中排除未使用的关键字。

您可以使用后缀(如 _local)来设置其他选项。

有关更多信息和支持的后缀列表,请参阅 在 HLSL 中声明和使用着色器关键字.
#pragma hardware_tier_variants <values> 仅内置渲染管线:在为给定图形 API 编译时,为 图形层级 添加关键字。有关更多信息,请参阅 图形层级.
#pragma skip_variants <list of keywords> 删除指定的关键字。

GPU 要求和着色器模型支持

使用这些指令告诉编译器您的着色器需要特定的 GPU 功能。

语句 函数
#pragma target <value> 此着色器程序兼容的最低着色器模型。将 <value> 替换为有效值。有关有效值的列表,请参阅 着色器编译:在 HLSL 中针对着色器模型和 GPU 功能.
#pragma require <value> 此着色器兼容的最低 GPU 功能。将 <value> 替换为有效值,或用空格分隔的多个有效值。有关有效值的列表,请参阅 着色器编译:在 HLSL 中针对着色器模型和 GPU 功能.

图形 API

使用这些指令告诉 Unity 包含或排除给定图形 API 的代码。

语句 函数
#pragma only_renderers <value> 仅为给定的图形 API 编译此着色器程序。将 <values> 替换为用空格分隔的有效值列表。有关更多信息和有效值的列表,请参阅 在 HLSL 中针对图形 API 和平台.

例如,#pragma only_renderers glcore 仅为桌面 OpenGL 编译。与 ES 3 目标类似,这也扩展到包含所有桌面 OpenGL 版本,其中基本着色器将支持 OpenGL 2.x,而需要着色器模型 5.0 功能的着色器需要 OpenGL 4.2+。
#pragma exclude_renderers <value> 不要为给定的图形 API 编译此着色器程序。将 <value> 替换为用空格分隔的有效值列表。有关更多信息和有效值的列表,请参阅 在 HLSL 中针对图形 API 和平台.

其他编译指示

语句 函数
#pragma instancing_options <options> 使用给定选项在着色器中启用 GPU 实例化。有关更多信息,请参阅 GPU 实例化
#pragma once 将此指令放在文件中,以确保编译器在着色器程序中仅包含该文件一次。

注意:仅当 缓存着色器预处理器 启用时,Unity 才会支持此指令。
#pragma enable_d3d11_debug_symbols 为支持的图形 API 生成着色器调试符号,并为所有图形 API 禁用优化。在外部工具中调试着色器代码时使用此选项。

Unity 为 Vulkan、DirectX 11 和 12 以及支持的控制台平台生成调试符号。

警告:使用此选项会导致文件大小增加,并降低着色器性能。完成着色器调试并准备制作应用程序的最终版本时,请从着色器源代码中删除此行并重新编译着色器。
#pragma skip_optimizations <value> 强制为给定的图形 API 关闭优化。将 <values> 替换为用空格分隔的有效值列表。有关有效值的列表,请参阅 在 HLSL 中针对图形 API 和平台
#pragma hlslcc_bytecode_disassembly 将反汇编的 HLSLcc 字节码嵌入到翻译后的着色器中。
#pragma disable_fastmath 启用涉及 NaN 处理的精确 IEEE 754 规则。这目前仅影响 Metal 平台。
#pragma editor_sync_compilation 强制同步编译。这仅影响 Unity 编辑器。有关更多信息,请参阅 异步着色器编译.
#pragma enable_cbuffer 在使用 HLSLSupport 中的 CBUFFER_START(name)CBUFFER_END 宏时,即使当前平台不支持常量缓冲区,也会发出 cbuffer(name)
ShaderLab: 旧版顶点数据通道映射
HLSL 编译目标命令引用