Version: 2020.2
言語: 日本語
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.
  • [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