あまりまとまっているところがなかったので備忘録を兼ねてまとめました
シェーダプロパティアトリビュートってなに?
プロパティに追加の属性を付加できるもの
主にはマテリアルのインスペクタエディタを拡張できたり、GPUに対して追加で情報を付加できます
HideInInspector
c#レイヤーで毎度おなじみHideInInspector
インスペクタ上からプロパティを隠すことができます
主にコードから弄るプロパティに対して付加します
Properties
{
_MainTex ("Texture", 2D) = "white" {}
[HideInInspector]_Hoge ("HogeValue", int) = 0
_Fuga ("FugaValue", int) = 0
}
NoScaleOffset
テクスチャデータ形式(3D/2D/Cube)のtiling/offset欄を非表示にします
Properties
{
[NoScaleOffset]_MainTex ("Texture", 2D) = "white" {}
_Hoge ("HogeValue", int) = 0
_Fuga ("FugaValue", int) = 0
}
Normal
テクスチャデータ形式(3D/2D/Cube)にノーマルマップ以外のテクスチャが指定された場合警告が表示されます
警告内のFixNowを押すと選択されたテクスチャがノーマルマップ指定になります
Properties
{
[Normal]_MainTex ("Texture", 2D) = "white" {}
_Hoge ("HogeValue", int) = 0
_Fuga ("FugaValue", int) = 0
}
HDR
テクスチャデータ形式(3D/2D/Cube)に選択されたテクスチャがHDRテクスチャであることを示します
Gamma
リニアカラー空間を使う場合、ColorプロパティについてはsRGBで提供されシェーダで渡される時にリニアカラーに変換されます。
Float/VectorについてはカラーデータかどうかはUnityから検知することはできないので明示的にGammaアトリビュートを付与することによりカラー変換が適用されるようになります。
PerRendererData
テクスチャデータ形式(3D/2D/Cube)に使用でき、対象のデータはMaterialPropertyBlockクラス
のインスタンス値で初期化されます。主にテクスチャデータを動的にスクリプトからセットする場合に使われます。
インスペクタ上ではHideInInspector同様非表示になります。
Toggle
データ形式がInt/Floatの場合に利用できます。インスペクタ上で対象のプロパティがチェックボックスに変わりオンの時は1、オフの時は0となります。
また、トグルがオンの時はコンパイル時(プロパティ名の大文字)_ONのキーワードが有効になります。このキーワードは#ifdefなどのプリプロセッサで使えます。(キーワードを利用するためには multi_compile指定が必要です
キーワード名を指定したい場合がToggle(KEYWORD_NAME)のように記述すれば指定することが可能です
_MainTex ("Texture", 2D) = "white" {}
[Toggle]_Hoge ("HogeValue", int) = 0
[Toggle(FUGA_ENABLE)]_Fuga ("FugaValue", Float) = 0
Enum
データ形式がInt/Floatの場合に利用できます。インスペクタ上にプルダウンリストを表示します。
列挙する値を指定の仕方はオプションにFoo,2,Bar,4のような記述をするとFoo時は2,Bar時は4が設定されることになります。
また、C#上のenum値を指定することが可能でその場合はオプションにNameSpace.EnumNameのような記述をします
Properties
{
_MainTex ("Texture", 2D) = "white" {}
[Enum(Foo,2,Bar,4)]_Hoge ("HogeValue", int) = 0
[Enum(Product.TestEnum)]_Fuga ("FugaValue", Float) = 0
}
namespace Product
{
public enum TestEnum
{
Foo,
Bar
}
}
KeywordEnum
基本的にはEnumと同じですがKeywordEnumの場合は選択された対象名のキーワードが有効になります。
例えば[Enum(Foo,Bar)]_Hoge ("HogeValue", int) = 0と定義した場合、Fooの場合は_HOGE_FOO, Barの場合は_HOGE_BARのキーワードが有効になります。
PowerSlider
データ形式がRangeに対してのみ使えます。オプションに値を設定することでインスペクタ上のスライダーを指数関数的にすることができます。なおオプション値に1を指定すると通常のRangeと同様の状態になります
Properties
{
[PowerSlider(0.5)]_PosX ("PositionX", Range(0.01, 1)) = 0
_PosY ("PositionY", Range(0.01, 1)) = 0
[PowerSlider(2.0)]_PosZ ("PositionZ", Range(0.01, 1)) = 0
}





