Version: Unity 6.0 (6000.0)
言語 : 日本語
マテリアルプロパティの概要
テクスチャのプロパティ

マテリアルのプロパティの追加

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 変数タイプとの対応は次のようにマッピングされます。

  • Color と Vector のプロパティは float4half4、または fixed4 変数にマップされています。
  • Range と Float のプロパティは floathalf、または fixed 変数にマップされています。
  • Texture プロパティは、通常の (2D) のテクスチャの場合は sampler2D 変数に、キューブマップの場合は samplerCUBE に、3D テクスチャの場合は sampler3D 変数にマップされています。

カラー空間と、カラー/ベクトルシェーダーデータ

リニアカラー空間を使用する場合、すべてのマテリアルカラープロパティは sRGB カラーで提供されます。しかし、シェーダーに渡されるときにリニア値に変換されます。

例えば、Properties シェーダーブロックに “MyColor“ という Color プロパティがある場合、対応する ”MyColor” HLSL 変数はリニアカラーの値を取得します。

Float タイプまたは Vector タイプとしてマークされているプロパティは、色以外のデータが含まれていると見なされ、デフォルトでは色空間変換は行われません。Float/vector プロパティーに [Gamma] 属性を追加して、色と同様に sRGB スペースで指定されていることを示すことができます (プロパティ参照)。

追加リソース

マテリアルプロパティの概要
テクスチャのプロパティ