コードによるシェーダーの記述の概要
Unity でのカスタムシェーダーの書き方は、使用するレンダーパイプラインによって異なります。
言語
Unity のシェーダーを作成する際には、以下の言語を使用します。
- HLSL と呼ばれるプログラミング言語。これを使ってシェーダープログラムそのものを書きます。HLSL の詳細については、Unity での HLSL を参照してください。
- ShaderLab と呼ばれる Unity 固有の言語。これを使って シェーダーオブジェクト を定義します。これは、シェーダープログラムのコンテナとして機能します。ShaderLab の詳細については、ShaderLab を参照してください。
プラットフォームごとに異なる言語を使用する必要はありません。Unity は HLSL と ShaderLab のコードを、様々なグラフィックス API に対して異なる言語にコンパイルします。詳細については、シェーダーのコンパイル を参照してください。
注意必要であれば、シェーダープログラムを GLSL や Metal で直接書くこともできます。これは、通常のワークフローの一部としては推奨されていません。また、通常のワークフローに必要ではありません。GLSL の使用についての詳細は、Unity での GLSL を参照してください。
ShaderLab
ShaderLab は、シェーダーのソースファイルで使用する宣言型言語です。シェーダーオブジェクトを記述するために、ネスト式のブレース構文を使用します。
ShaderLab で定義できるものはたくさんありますが、代表的なものは以下の通りです。
様々なシェーダーの作成方法
シェーダーには様々な作成方法があります。
- 最も一般的な方法は、頂点シェーダーとフラグメントシェーダーを HLSL で作成することです。詳細については、頂点シェーダーとフラグメントシェーダーの記述 を参照してください。
- ビルトインレンダーパイプラインでは、サーフェスシェーダーを作成することもできます。これはライティングと相互作用するシェーダーを作る簡単な方法です。詳細については、サーフェスシェーダー を参照してください。
- 後方互換性の理由から、Unity は “固定関数スタイル” の ShaderLab コマンドもサポートしています。これにより、HLSL を使わずに ShaderLab でシェーダーを作成することができます。これは現在では推奨されていませんが、詳しくは ShaderLab の古い機能 のページを参照してください。
様々なグラフィックス API のためのシェーダーの書き方
場合によっては、ターゲットとしているグラフィックス API に応じて、異なる方法でシェーダーコードを記述する必要があります。この点については、様々なグラフィックス API のシェーダーの作成 を参照してください。