Version: Unity 6.0 (6000.0)
言語 : 日本語
コードによるシェーダーの記述
シェーダーオブジェクトの基礎

コードによるシェーダーの記述の概要

Unity でのカスタムシェーダーの書き方は、使用するレンダーパイプラインによって異なります。

言語

Unity のシェーダーを作成する際には、以下の言語を使用します。

  • HLSL と呼ばれるプログラミング言語。これを使ってシェーダープログラムそのものを書きます。HLSL の詳細については、Unity での HLSL を参照してください。
  • ShaderLab と呼ばれる Unity 固有の言語。これを使って シェーダーオブジェクト を定義します。これは、シェーダープログラムのコンテナとして機能します。ShaderLab の詳細については、ShaderLab を参照してください。

プラットフォームごとに異なる言語を使用する必要はありません。Unity は HLSL と ShaderLab のコードを、様々なグラフィックス API に対して異なる言語にコンパイルします。詳細については、シェーダーのコンパイル を参照してください。

注意必要であれば、シェーダープログラムを GLSL や Metal で直接書くこともできます。これは、通常のワークフローの一部としては推奨されていません。また、通常のワークフローに必要ではありません。GLSL の使用についての詳細は、Unity での GLSL を参照してください。

ShaderLab

ShaderLab は、シェーダーのソースファイルで使用する宣言型言語です。シェーダーオブジェクトを記述するために、ネスト式のブレース構文を使用します。

ShaderLab で定義できるものはたくさんありますが、代表的なものは以下の通りです。

  • シェーダーオブジェクトの全体的な構造を定義します。詳細については、ShaderLab: シェーダーの作成ShaderLab: SubShader の作成ShaderLab: Pass の作成 を参照してください。
  • コードブロックを使って HLSL で書かれたシェーダープログラムを加えます。詳細については、ShaderLab: シェーダープログラムの追加 を参照してください。
  • シェーダープログラムを実行する前に、コマンドを使用して GPU のレンダー状態を設定したり、別の Pass を含む操作を実行したりします。詳細については、ShaderLab: コマンド を参照してください。
  • シェーダーコードを通してプロパティを公開することで、マテリアル Inspector で編集したり、マテリアルアセットの一部として保存することができます。詳細については、ShaderLab: マテリアルプロパティの定義 を参照してください。
  • SubShader と Pass のパッケージ要件を指定します。これにより、特定のパッケージが Unity プロジェクトにインストールされている場合にのみ、Unity で特定の SubShader と Pass を実行できます。詳細については、ShaderLab: パッケージの要件を指定する を参照してください。
  • 現在のハードウェアで Unity がシェーダーオブジェクトを持つ SubShader のいずれも実行できない場合のフォールバック動作を定義します。詳細については、ShaderLab: フォールバックの割り当て を参照してください。

様々なシェーダーの作成方法

シェーダーには様々な作成方法があります。

  • 最も一般的な方法は、頂点シェーダーとフラグメントシェーダーを HLSL で作成することです。詳細については、頂点シェーダーとフラグメントシェーダーの記述 を参照してください。
  • ビルトインレンダーパイプラインでは、サーフェスシェーダーを作成することもできます。これはライティングと相互作用するシェーダーを作る簡単な方法です。詳細については、サーフェスシェーダー を参照してください。
  • 後方互換性の理由から、Unity は “固定関数スタイル” の ShaderLab コマンドもサポートしています。これにより、HLSL を使わずに ShaderLab でシェーダーを作成することができます。これは現在では推奨されていませんが、詳しくは ShaderLab の古い機能 のページを参照してください。

様々なグラフィックス API のためのシェーダーの書き方

場合によっては、ターゲットとしているグラフィックス API に応じて、異なる方法でシェーダーコードを記述する必要があります。この点については、様々なグラフィックス API のシェーダーの作成 を参照してください。

コードによるシェーダーの記述
シェーダーオブジェクトの基礎