ShaderLab コードでは、マテリアルプロパティを定義することができます。マテリアルプロパティとは、Unity がマテリアルアセットの一部として保存するプロパティのことです。これにより、アーティストは様々な構成のマテリアルを作成、編集、共有することができます。
マテリアルプロパティを使用する場合
マテリアルプロパティを使用しない場合
マテリアルプロパティを作成_しない_のは、通常、シェーダープロパティの値をスクリプトを使ってすべて設定したい場合 (プロシージャルコンテンツを作っている場合など) や、プロパティをマテリアルプロパティにできない場合、Inspector で編集されたくない場合などに限られます。
シェーダープロパティ値は以下の場所にあり、シェーダーに渡されます。
優先順位は上記で述べたとおりです。インスタンスごとのデータは、すべてをオーバーライドします。その次に、マテリアルデータが使用されます。最後に、その 2 つの場所にシェーダープロパティがない場合は、グローバルプロパティの値が使用されます。もし、シェーダープロパティ値がどこにも宣言されていない場合は、“デフォルト” 値 (float 型には 0、色には黒、テクスチャには空の白いテクスチャ) が設定されます。
マテリアル は、シリアライズされ、かつランタイムに設定されるプロパティ値を含みます。
シリアライズされたデータはすべて、シェーダーの Properties ブロックで宣言されたプロパティです。一般的に、これらの値はマテリアルに保管する必要があり、マテリアル Inspector でユーザーが調整することが可能です。
マテリアルには、シェーダーに使用されているにもかかわらず、シェーダーの Properties ブロックでは宣言されないプロパティが含まれることもあります。一般的に、これはランタイムにスクリプトコードから設定される (例えば Material.SetColor 経由で) プロパティです。マトリクスと配列は、(Properties ブロックで定義する方法がないため) シリアライズなしのランタイムプロパティとしてだけ存在することに注意してください。