使用着色器包含库

着色器包含库提供一组可重用的 .glsl 文件,Kanzi Studio 会随自身一起安装这些文件。您可以在任何工程着色器中包含这些系统着色器文件,而无需将其复制到工程目录中。Kanzi Studio 不会将系统着色器包含在工程保存数据中,因此不使用系统着色器的现有工程不受影响。

另请参阅 重用着色器代码。

系统着色器目录

Kanzi Studio 维护一个系统着色器目录,其中包含随 Kanzi 提供的 .glsl 文件。Kanzi Studio 会监视此目录的外部更改,并在 Kanzi Studio 运行期间获取文件的添加、删除和修改。您无需重新启动 Kanzi Studio。

系统着色器目录位于 <KanziInstallation>/Studio/Asset Library/System Shaders/。

../../_images/system-shader-directory.png

放置在系统着色器目录中的任何 .glsl 文件都会自动作为包含文件使用。您无需注册该文件或配置工程。

在 Kanzi Studio 中,系统着色器目录是只读的。要为您的工程自定义系统着色器,请先克隆它。请参阅 将系统着色器克隆到工程。

包含系统着色器

#include 指令支持两种遵循 C/C++ 包含约定的形式:

语法

分辨率 (Resolution)

#include "file.glsl"

首先搜索包含该 #include 的文件所在的目录,然后按照 #include <file.glsl> 的方式搜索。

#include <file.glsl>

首先搜索工程的 Shaders 目录,然后搜索系统着色器目录,最后回退到包含该 #include 的文件所在的目录。

使用尖括号 (<>) 包含系统着色器。工程 Shaders 目录中与系统着色器路径相同的文件会覆盖该系统着色器,包括其他系统着色器包含它的地方。请参阅 将系统着色器克隆到工程。对于与着色器位于同一位置的文件,请使用引号包含 ("")。

例如:

// Resolves from the project Shaders directory first, then from the system shader directory.
#include <kanzi/common/lights.glsl>

// Resolves from the directory of this shader first, then like an include with angle brackets.
#include "math_utils.glsl"

将系统着色器克隆到工程

要为您的工程自定义系统着色器,您可以克隆它。克隆会将系统着色器文件复制到工程的 Shaders 目录中,其路径与该文件在系统着色器目录中的路径相同。您可以随意编辑该副本。例如,克隆 kanzi/common/lights.glsl 会创建 Shaders/kanzi/common/lights.glsl。

无论着色器在何处包含该系统着色器(例如 #include <kanzi/common/lights.glsl>),克隆都会覆盖该系统着色器。此覆盖同样适用于其他系统着色器以及 Kanzi Studio 提供的材质类型,因此对克隆的更改会作用于使用该系统着色器的每个材质。

您的副本可以通过相同路径包含 (Include) 它所覆盖的系统着色器,例如在其前后添加代码。在这种情况下,请重命名副本中的包含保护宏,例如 lights.glsl 中的 KANZI_LIGHTS。否则,副本的包含保护会隐藏系统着色器的内容。

备注

使用早期版本的 Kanzi Studio 创建的系统着色器克隆直接位于 Shaders 目录中,例如 Shaders/lights.glsl。要使此类克隆覆盖系统着色器,请将其移动到系统着色器所在的路径,例如 Shaders/kanzi/common/lights.glsl。

要将系统着色器克隆到工程:

  1. 在 Library > Resource Files > System Shaders 中,右键单击要自定义的系统着色器文件。

  2. 选择 Clone To Project。

    Kanzi Studio 将该文件复制到您工程的 Shaders 目录中。

  3. 根据需要在 Shader Source Editor 中编辑克隆的文件。

    包含该系统着色器的着色器现在会使用您的副本。

另请参阅

编辑着色器

着色器最佳实践