包含此页的版本:
不含此页的版本:
Unity 支持所有#pragma指令,只要这些指令位于常规包含文件中即可。有关这些指令的详细信息,请参阅 HLSL 文档:pragma 指令。
如果您正在编写表面着色器:为内置渲染管线编写着色器的简化方法。更多信息
请参阅术语表,使用此指令告诉编译器要用作 Surface 函数的函数,并将数据传递给该函数。
| 陈述 | 功能 |
|---|---|
#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 功能。
| 陈述 | 功能 |
|---|---|
#pragma target <value> |
与此着色器程序兼容的最小着色器模型。将 <value> 替换为有效值。有关有效值的列表,请参阅着色器编译:在 HLSL 中面向着色器模型和 GPU 功能。 |
#pragma require <value> |
此着色器兼容的最低 GPU 功能。将 <value> 替换为有效值或用空格分隔的多个有效值。有关有效值的列表,请参阅着色器编译:在 HLSL 中面向着色器模型和 GPU 功能。 |
使用这些指令告诉 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 编译此着色器程序。将<值>替换为以空格分隔的有效值列表。有关详细信息和有效值列表,请参阅 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 |
发出cbuffer(name)使用时CBUFFER_START(name)和CBUFFER_END宏来自 HLSLSupport,即使当前平台不支持常量缓冲区。 |