版本:Unity 6 (6000.0)
语言:English
纹理采样器
在 HLSL 中向着色器编译器传递信息

在着色器中包含另一个 HLSL 文件

在 HLSL 中,#include 指令是一种预处理器指令。它们指示编译器将一个 HLSL 文件的内容包含到另一个 HLSL 文件中。它们包含的文件称为包含文件

在 Unity 中,常规的 #include 指令与标准 HLSL 中的工作方式相同。有关常规 #include 指令的更多信息,请参阅 HLSL 文档:include 指令

Unity 还提供了一个额外的、Unity 特定的 #include_with_pragmas 指令。#include_with_pragmas 指令的工作方式与常规 #include 指令相同,但它还允许您在包含文件中使用 #pragma 指令。这意味着 #include_with_pragmas 指令允许您在多个文件之间共享 #pragma 指令。

使用 include_with_pragmas 指令

注意:要使用 #include_with_pragmas 指令,您必须启用缓存着色器预处理器

此示例演示了如何使用 Unity 特定的 #include_with_pragmas 指令来启用常见的流程改进:能够在多个着色器中打开和关闭着色器在 GPU 上运行的程序。 更多信息
请参阅词汇表
调试,而无需每次都编辑每个着色器源文件。

以下行演示了包含文件的内容。它包含一个启用着色器调试的单个 pragma 指令

// Comment out the following line to disable shader debugging
#pragma enable_d3d11_debug_symbols

在您要调试的每个着色器中,添加一个指向包含文件的 #include_with_pragmas 指令。将指令放在其他 #pragma 指令附近,如下所示

// Example pragma directives
#pragma target 4.0
#pragma vertex vert
#pragma fragment frag

// Replace path-to-include-file with the path to the include file 
#include_with_pragmas "path-to-include-file"

// The rest of the HLSL code goes here

现在,当您想要为使用包含文件的所有着色器打开和关闭着色器调试时,您只需要更改包含文件中的单行即可。当 Unity 重新编译着色器时,它会包含修改后的行。

注意:如果着色器文件使用 #include 导入包含 #include_with_pragmas 指令的文件,则 Unity 会忽略 #include_with_pragmas 指令引用的文件中包含的 #pragma 指令。

纹理采样器
在 HLSL 中向着色器编译器传递信息