ShaderLab文法:シェーダ
ShaderLab文法:サブシェーダ

ShaderLab文法:プロパティ

シェーダにより,UnityのMaterialインスペクター 上で,アーティストがセットできるパラメータの一覧を定義できます。シェーダでのPropertiesブロックで定義します。

文法

プロパティ

    Properties {Property [Property ...] }

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

Float Range

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

floatプロパティを定義し,インスペクタ上でスライドバーが_min_から_max_として表現。

Color

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

Defines a color property.

Texture 2D

    name ("display name", 2D) = "name" { options }

Defines a 2D texture property.

Rectangle

    name ("display name", Rect) = "name" { options }

長方形(2のべき乗でない)テクスチャのプロパティを定義。

Cubemap

    name ("display name", Cube) = "name" { options }

Defines a cubemap texture property.

Float

    name ("display name", Float) = number

Defines a float property.

Vector

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

Defines a four-component vector property.

詳細

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

  • RangeFloat プロパティでは1つの数字。
  • ColorVector プロパティでは括弧()で括る4つの数字。
  • テクスチャ(2D, Rect, Cube)ではデフォルト値は空の文字列か内蔵のデフォルトテクスチャ: “white” ,“black” ,“gray” ,“bump” 。

シェーダの後のほうで,プロパティの値は括弧[]でプロパティネームを記述して参照します:[name]

Properties {
    // properties for water shader
    _WaveScale ("Wave scale", Range (0.02,0.15)) = 0.07 // sliders
    _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) // color
    _ReflectionTex ("Environment Reflection", 2D) = "" {} // textures
    _RefractionTex ("Environment Refraction", 2D) = "" {}
    _Fresnel ("Fresnel (A) ", 2D) = "" {}
    _BumpMap ("Bumpmap (RGB) ", 2D) = "" {}
}

テクスチャプロパティのオプション

テクスチャプロパティの波括弧{}の中の_options_は任意のオプションです。利用可能なオプションは:

  • TexGen texgenmode: このテクスチャの自動テクスチャ座標生成モード。 ObjectLinear , EyeLinear , SphereMap , CubeReflect , CubeNormal のいずれかで,これらはOpenGL texgenモードと直接に対応する。カスタムのvertex program(頂点プログラム)が使用されている場合はTexGenは無視されるので留意して下さい。
  • LightmapMode 記述した場合,テクスチャは各レンダラーごとのライトマップパラメータの影響を受けます。つまり使用するテクスチャはマテリアルにないが,レンダラの設定から取得します,詳細はRendererクラス を参照下さい。

// EyeLinear texgen mode example
Shader "Texgen/Eye Linear" {
    Properties {
        _MainTex ("Base", 2D) = "white" { TexGen EyeLinear }
    }
    SubShader {
        Pass {
            SetTexture [_MainTex] { combine texture }
        }
    }
}
ShaderLab文法:シェーダ
ShaderLab文法:サブシェーダ