コンテンツにスキップ

HCSLLib

HCSLLibとは、HCSLでインクルードできるライブラリのことです。ライブラリを利用することで、便利な関数や何度も使う関数をライブラリファイルにまとめて、簡単に再利用できるようになります。

基本的な構文はHCSLと同じで、以下の要素で構成されます。hcsllibブロックの中では、HCSLのshaderブロックと同様の構文で関数を実装できます。

  • バージョンプリプロセッサ
  • hcsllibブロック(ここがhcslからhcsllibに代わっています)
#version 1

hcsllib "ライブラリ名"
{
    // shaderブロックと同様に関数を実装する
}

ファイルの拡張子はHCSLと同じく.hcslです。HCSLでライブラリをインクルードする際は、HCSLLibで指定したライブラリ名を指定します。

組み込みHCSLLib

エンジンが標準で用意しているHCSLLibです。ユーザー定義のHCSLLibと同様にインクルードして利用できます。

組み込みHCSLLibと使用可能関数リスト

ライブラリ名 関数 説明
"HCSLCore/Texture" vec2 helCalcUVTransform(vec2 SrcUV, vec4 TexST) テクスチャのスケール・オフセットを考慮したUV座標を計算します。
"HCSLCore/Lighting" vec3 helComputeDirectLight(vec3 worldNormal, vec3 worldPos, vec3 cameraPos, vec3 surfaceColor, float roughness, float metallic, vec3 lightColor, vec3 lightDir) PBRにおける直接光のライティングを計算します。
"HCSLCore/Lighting" vec3 helComputeIndirectLight(vec3 worldNormal, vec3 worldPos, vec3 cameraPos, vec3 surfaceColor, float roughness, float metallic, vec3 lightColor, vec3 lightDir) PBRにおける間接光(環境マップ)のライティングを計算します。
"HCSLCore/Lighting" vec3 helComputeIBLLight(vec3 worldNormal, vec3 worldPos, vec3 cameraPos, vec3 surfaceColor, float roughness, float metallic) IBLによるライティングを計算します。Unityではプレビューできません。

実装例

HCSLLibの作成例

// HCSLLibTest.hcsl

#version 1

// ライブラリの名前
hcsllib "TestLib"
{
    float helRand(vec2 st)
    {
        return fract(sin( dot(st, vec2(12.9898,78.233)) ) * 43758.5453);
    }
}

HCSLLibをHCSLで使う例

pass Geometry_Opaque
{
    attribute
    {
        vec3 _Position : VS_POSITION;
    }

    output vertex
    {
        vec4 outPos : VS_OUT_POSITION;
    }

    shader vertex
    {
        void main()
        {
            outPos = HEL_MATRIX_P * HEL_MATRIX_V * HEL_MATRIX_W * vec4(_Position, 1.0);
        }
    }

    output fragment
    {
        vec4 outColor : FS_COLOR;
    }

    uniform fragment
    {
        sampler2D _MainTex;
        vec4 _MainTex_ST;
    }

    shader fragment
    {
        // helRand関数を使用するためのインクルード
        // 別ファイルのTestLibにhelRandが定義されている
        #include "TestLib"

        // helCalcUVTransform関数を使用するためのインクルード
        // HCSLCore/Textureは組み込みライブラリ
        #include "HCSLCore/Texture"

        void main()
        {
            vec2 st = helCalcUVTransform(uv, _MainTex_ST);
            vec4 col = helTexture(_MainTex, st) * helRand(vec2(0.5));

            outColor = col;
        }
    }
}
Feedback