Version: 2021.3
ShaderLab: 古い頂点データチャンネルマッピング
HLSL のプリプロセッサーディレクティブ

Unity での HLSL

In Unity, you use the HLSL programming language to write shader programs.

このセクションでは、HLSL を Unity 固有の方法で使用するための情報を提供します。HLSL の記述に関する一般的な情報については、上位レベル シェーダー言語 (HLSL) を参照してください。

ノート: Unity はもともと Cg 言語 を使用していました。そのため、Unity のキーワード (CGPROGRAM) やファイル拡張子 (.cginc) の名前になっています。Unity はもう Cg を使っていませんが、これらの名前はまだ使われています。

ShaderLab コードに HLSL コードを加える

HLSL コードは、ShaderLab コードのコードブロック内に配置します。通常はこのような形になります。

  Pass {
        // ... 通常のパス状態設定 ...
      
        HLSLPROGRAM
        // このスニペットのコンパイルディレクティブ。例:
        #pragma vertex vert
        #pragma fragment frag
      
        // シェーダープログラム自体
      
        ENDHLSL

        // ... パスの残り部分 ...
    }

シェーダーコードブロックの詳細については、ShaderLab: シェーダープログラムを加える を参照してください。

HLSL の構文

HLSL には、古い DirectX 9 スタイルと、より新しい DirectX 10 以降のスタイルの 2 つの構文があります。その違いは、主にテクスチャサンプリング関数の動作にあります。

  • 従来の構文では、sampler2D、tex2D()などの関数を使用していました。この構文は、すべてのプラットフォームで動作します。
  • DX10 以降の構文は Texture2D、SamplerState、.Sample()` 関数を使用します。この構文の一部の形式は OpenGL プラットフォームでは機能しません。なぜなら、テクスチャとサンプラーは OpenGL の異なるオブジェクトではないためです。

Unity では、これらの違いを管理するのに役立つプリプロセッサーマクロを含むシェーダーライブラリを提供しています。詳細については、ビルトインシェーダーマクロ を参照してください。

ShaderLab: 古い頂点データチャンネルマッピング
HLSL のプリプロセッサーディレクティブ