ShaderLab でシェーダーオブジェクトにマテリアルプロパティを割り当てるには、Properties ブロックを Shader ブロックの中に配置します。
これらのプロパティのいくつかにシェーダープログラムでアクセスしたい場合は、Cg/HLSL 変数を、同じ名前と一致する型で宣言する必要があります。
例えば次のシェーダープロパティ
_MyColor ("Some Color", Color) = (1,1,1,1)
_MyVector ("Some Vector", Vector) = (0,0,0,0)
_MyFloat ("My float", Float) = 0.5
_MyTexture ("Texture", 2D) = "white" {}
_MyCubemap ("Cubemap", CUBE) = "" {}
について、Cg/HLSL で参照するために宣言するコードは以下のとおりです。
fixed4 _MyColor; // low precision type is usually enough for colors
float4 _MyVector;
float _MyFloat;
sampler2D _MyTexture;
samplerCUBE _MyCubemap;
Cg/HLSL は uniform キーワードを記述できますが、必須ではありません。
uniform float4 _MyColor;
ShaderLab のプロパティタイプは Cg/HLSL 変数タイプとの対応は次のようにマッピングされます。
リニアカラー空間を使用する場合、すべてのマテリアルカラープロパティは sRGB カラーで提供されます。しかし、シェーダーに渡されるときにリニア値に変換されます。
例えば、Properties シェーダーブロックに “MyColor“ という Color プロパティがある場合、対応する ”MyColor” HLSL 変数はリニアカラーの値を取得します。
Float タイプまたは Vector タイプとしてマークされているプロパティは、色以外のデータが含まれていると見なされ、デフォルトでは色空間変換は行われません。Float/vector プロパティーに [Gamma] 属性を追加して、色と同様に sRGB スペースで指定されていることを示すことができます (プロパティ参照)。