HLSL(High-Level Shader Language / 高レベルシェーダー言語)は、GPU(グラフィックスプロセッシングユニット)上で動作するシェーダープログラム(頂点シェーダー、ピクセルシェーダーなど)を記述するためにMicrosoftが開発した、C言語に非常に近い構文を持つ業界標準の高級プログラミング言語です。

現実世界での例え:自動操縦マシン(GPU)に対する『専用のリモコン命令記述』

HLSLの役割は、「並列で超高速走行する自動操縦マシン群(GPU)に対して、直接走行指示を書き込むための『専用リモコンのコマンド記述』」に例えることができます。

  • 従来(Shader Graphによるビジュアル編集): マシンのコクピット内に配置された、あらかじめ決められたボタン(各種GUIノード)をポチポチと手作業で大量に接続して操縦命令を組み立てます。直感的ですが、複雑な動きをさせたいときにボタンの数が膨大になり、ボタンを繋ぐコードが複雑に絡まり合って操作しづらくなります。
  • HLSLによるコード記述: マシンの制御CPUに対して、「右に3歩進んだ後、左に5回ループ旋回し、ぶつかったら色を反転させよ」という正確で無駄のないテキスト命令文(HLSLコード)を直接インプットします。無駄なボタンや配線が一切不要になり、マシンは1マイクロ秒の遅延もなく、GPUが持つ本来の狂暴な並列計算パワーを100%発揮して超高速で走行(描画)します。
Unity Shader Graph HLSL code compilation concept

図:Shader Graphノードをコンパイラが裏で高速なHLSLコードに自動生成する仕組みのイメージ図

仕組みと動作原理

UnityのShader Graphは、ユーザーが作成したノードの接続ネットワークを、コンパイル時に裏で自動的に巨大な「HLSLコード」のテキストファイルへとテキスト置換・生成しています。HLSLは、CPUから渡された3D頂点座標のワールド空間変換を行う「Vertex Shader」と、画面のピクセル1つ1つの最終的な色を決定する「Fragment (Pixel) Shader」に分かれて記述され、GPUの何千ものスレッドで超並列計算されます。