Version: 2020.1
ShaderLab 構文
ShaderLab :SubShader

ShaderLab: Properties

シェーダーを使って Unity の マテリアルインスペクター でアーティストが設定するパラメーターを定義できます。シェーダーファイル の Properties ブロックで定義します。

シンタックス

プロパティー

Properties { Property [Property ...] }

Properties ブロックを定義します。波括弧 {} の中で以下のように複数のプロパティーを定義します。

数字とスライダー

name ("display name", Range (min, max)) = number
name ("display name", Float) = number
name ("display name", Int) = number

これらはすべて数 (数量) プロパティーのデフォルト値を決定します。Range は、スライダーの最小 ( min ) と最大 ( max ) の範囲を表示します。

カラーとベクトル

name ("display name", Color) = (number,number,number,number)
name ("display name", Vector) = (number,number,number,number)

指定した RGBA 成分のデフォルト値をもつカラープロパティーや、デフォルト値をもつ 4D ベクトルプロパティーを定義します。カラープロパティーにはカラーピッカーがついており、色空間にしたがい、必要に応じて調整されます ( シェーダープログラムのプロパティー を参照 )。ベクトルのプロパティーは、4 つの数値フィールドで表示されます。

テクスチャ

name ("display name", 2D) = "defaulttexture" {}
name ("display name", Cube) = "defaulttexture" {}
name ("display name", 3D) = "defaulttexture" {}

Defines a 2D Texture, cubemap or 3D (volume) property respectively.

詳細

シェーダー内の各プロパティーは name で参照されます (Unity では、シェーダーのプロパティー名をアンダースコアで始めるのが一般的)。プロパティーはマテリアルインスペクター上で display name で表示されます。各プロパティーのデフォルト値は等号 (=) のあとに記述します。

  • RangeFloat プロパティーでは “13.37” のように 1 つの数字です。
  • ColorVector プロパティーでは “(1, 0.5, 0.2, 1)” のように括弧 () で括る 4 つの数字です。
  • 2D テクスチャでは、デフォルト値は空の文字列か、以下のビルトインのデフォルトテクスチャのうちの 1 つです:“白” (RGBA:1,1,1,1)、“黒” (RGBA:0,0,0,0)、“グレー” (RGBA:0.5,0.5,0.5,0.5)、“バンプ” (RGBA:0.5,0.5,1,0.5)、“赤” (RGBA:1,0,0,0)。
  • 2D テクスチャ以外 (立方体、3D、2D 行列) では、デフォルト値は空の文字列です。マテリアルに割り当てられたキューブマップ/3D/配列のテクスチャがないとき、“グレー” (RGBA:0.5,0.5,0.5,0.5) が使用されます。

後で、シェーダーの固定関数では、括弧で囲ったプロパティーネーム [name] でプロパティーの値にアクセスできます。例えば、2 つの int プロパティーを宣言して (例えば “SrcBlend“ と ”DstBlend”)、マテリアルプロパティーで駆動するブレンドモードを作成し、Blend [_SrcBlend] [_DstBlend] のように Blend コマンド を通してそれらを使用します。

Properties ブロックにあるシェーダーパラメーターは、マテリアル のデータとしてシリアライズされます。 シェーダープログラム は、実際には、マテリアルに設定されているより多くのパラメーター (行列、ベクトル、float など) を実行時にコードから得ることが可能です。しかし、それらが Properties ブロックに含まれていない場合、値は保存されません。 これは主に、スクリプトコード ( Material.SetFloat や類似の関数を使用) によって完全に操作される値に役立ちます。

プロパティーの属性と Drawer

プロパティーの前に、[] で囲ったオプションの属性を指定することができます。Unity が認識できる属性を使用するか、独自の MaterialPropertyDrawer クラス で属性をどのように マテリアルインスペクター に表示するかを指定します。Unity が認識できる属性は以下の通りです。

  • [HideInInspector] - does not show the property value in the Material inspector.
  • [NoScaleOffset] - material inspector will not show Texture tiling/offset fields for Texture properties with this attribute.
  • [Normal] - indicates that a Texture property expects a normal-map.
  • [HDR] - indicates that a Texture property expects a high-dynamic range (HDR) Texture.
  • [Gamma] - Float/Vector プロパティーが UI で sRGB 値で指定されており (色とまったく同じ)、使用するカラースペースに応じて変換が必要な可能性があることを示しています。詳しくは、Cg/HLSL でシェーダープロパティーを参照するを参照してください。
  • [PerRendererData] - indicates that a property will be coming from per-renderer data in the form of a MaterialPropertyBlock. Material inspector shows these properties as read-only.
  • [MainTexture] - indicates that a property is the main texture for a Material. By default, Unity considers a texture with the property name name _MainTex as the main texture. Use this attribute if your texture has a different property name, but you want Unity to consider it the main texture. If you use this attribute more than once, Unity uses the first property and ignores subsequent ones. When the main texture is set using the [MainTexture] attribute, it is not visible in the Inspector in Debug mode. When the main texture is set using the [MainTexture] attribute, it is not visible in the Game view when you use the texture streaming debugging view mode or a custom debug tool.
  • [MainColor] - indicates that a property is the main color for a Material. By default, Unity considers a color with the property name name _Color as the main color. Use this attribute if your color has a different property name, but you want Unity to consider it the main color. If you use this attribute more than once, Unity uses the first property and ignores subsequent ones.

// water シェーダーのプロパティー
Properties
{
    _WaveScale ("Wave scale", Range (0.02,0.15)) = 0.07 // スライダー
    _ReflDistort ("Reflection distort", Range (0,1.5)) = 0.5
    _RefrDistort ("Refraction distort", Range (0,1.5)) = 0.4
    _RefrColor ("Refraction color", Color) = (.34, .85, .92, 1) // カラー
    _ReflectionTex ("Environment Reflection", 2D) = "" {} // テクスチャ
    _RefractionTex ("Environment Refraction", 2D) = "" {}
    _Fresnel ("Fresnel (A) ", 2D) = "" {}
    _BumpMap ("Bumpmap (RGB) ", 2D) = "" {}
}

関連項目

  • [MainTexture and MainColour attributes] added in 2019.3 NewIn20193
ShaderLab 構文
ShaderLab :SubShader