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