使用着色器包含库¶
着色器包含库提供一组可重用的 .glsl 文件,Kanzi Studio 会随自身一起安装这些文件。您可以在任何工程着色器中包含这些系统着色器文件,而无需将其复制到工程目录中。Kanzi Studio 不会将系统着色器包含在工程保存数据中,因此不使用系统着色器的现有工程不受影响。
另请参阅 重用着色器代码。
系统着色器目录¶
Kanzi Studio 维护一个系统着色器目录,其中包含随 Kanzi 提供的 .glsl 文件。Kanzi Studio 会监视此目录的外部更改,并在 Kanzi Studio 运行期间获取文件的添加、删除和修改。您无需重新启动 Kanzi Studio。
系统着色器目录位于 <KanziInstallation>/Studio/Asset Library/System Shaders/。
放置在系统着色器目录中的任何 .glsl 文件都会自动作为包含文件使用。您无需注册该文件或配置工程。
在 Kanzi Studio 中,系统着色器目录是只读的。要为您的工程自定义系统着色器,请先克隆它。请参阅 将系统着色器克隆到工程。
包含系统着色器¶
#include 指令支持两种遵循 C/C++ 包含约定的形式:
语法 |
分辨率 (Resolution) |
|---|---|
|
首先搜索包含该 |
|
首先搜索工程的 |
使用尖括号 (<>) 包含系统着色器。工程 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。
要将系统着色器克隆到工程:
在 Library > Resource Files > System Shaders 中,右键单击要自定义的系统着色器文件。
选择 Clone To Project。
Kanzi Studio 将该文件复制到您工程的
Shaders目录中。根据需要在 Shader Source Editor 中编辑克隆的文件。
包含该系统着色器的着色器现在会使用您的副本。