Shaderはシェーダファイルのルートコマンドです。全てのファイルは必ずひとつのシェーダのみ定義しないといけません。このシェーダを使用するマテリアルをもつオブジェクトがレンダリングされる方法を示します。
Shader "name" { [Properties] Subshaders [Fallback] }
シェーダを定義します。マテリアルインスペクタに表示されるか name 以下でリストに記述されます。シェーダは任意のオプションとして,マテリアル設定として表示される Properties の一覧として定義できます。この後は,サブシェーダの一覧,任意でFallback,を記述します。
シェーダはproperties のリストをもつことが出来ます。シェーダで定義されたプロパティはUnityのマテリアルインスペクタで表示されます。通常のプロパティは,オブジェクトのカラー,テクスチャ,あるいはシェーダにより使用される任意の値です。
各シェーダはsub-shaders のリストから構成されます。少なくともひとつが必須です。シェーダをロードするとき,Unityはサブシェーダのリストから,エンドユーザのマシンでサポートされる最初のサブシェーダを選択します。もしサポートされるサブシェーダがない場合,Unityはfallback shader の使用を試みます。
各々のグラフィックスカードは異なるスペックを持ちます。このためゲーム開発者は,ゲームを最新のハードウェアで最高のビジュアルを提供したいけれども,全体の3%しか使用してないハードでのみ利用可能にはしたくない,という永遠の課題に悩まされます。サブシェーダはこのときに活躍します。ひとつのサブシェーダでは夢見るような洒落たグラフィックス効果を持たせ,古いグラフィックスカード向けのサブシェーダを追加します。これらのサブシェーダではエフェクトをより遅く実行するか,詳細を実装しないように選択することが出来ます。 例
考えられるもっともシンプルなシェーダの例です:
// colored vertex lighting
Shader "Simple colored lighting" {
// a single color property
Properties {
_Color ("Main Color", Color) = (1,.5,.5,1)
}
// define one subshader
SubShader {
Pass {
Material {
Diffuse [_Color]
}
Lighting On
}
}
}
このシェーダではcolorプロパティとして_Color (マテリアルインスペクトで_Main Color_ として表示)を,デフォルト値(1, 0.5, 0.5, 1) として,定義します。次にひとつのサブシェーダを定義します。サブシェーダはひとつのPass から構成され,頂点ライティングを有効にして,自身の基本マテリアルを設定します。