シェーダーインクルードライブラリを使用する

シェーダーインクルードライブラリは、Kanzi Studio とともにインストールされる再利用可能な .glsl ファイルのセットを提供します。これらのシステムシェーダーファイルは、プロジェクトディレクトリにコピーすることなく、任意のプロジェクトシェーダーにインクルードできます。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++ のインクルード規則に従う 2 つの形式をサポートしています。

構文

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 が提供するマテリアルタイプにも適用されるため、クローンへの変更はそのシステムシェーダーを使用するすべてのマテリアルに反映されます。

コピーでは、例えばその前後にコードを追加するために、オーバーライド対象のシステムシェーダーを同じパスでインクルードできます。その場合は、コピー内のインクルードガードマクロ (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 で、必要に応じてクローンしたファイルを編集します。

    これで、そのシステムシェーダーをインクルードしているシェーダーは、コピーを使用するようになります。

関連項目

シェーダーを編集する

シェーダーのベストプラクティス