NoScaleOffset プロパティについて
2023年5月13日
久々にシェーダーいじって、忘れていたことをメモ
NoScaleOffset 属性
シェーダー宣言のプロパティ。指定すると テクスチャーフィールドから
Tiling
Offset
がなくなります。
Properties
{
_MainTex("Main Texture", 2D) = "white" {}
[NoScaleOffset]_ToonMap( "Toon Map", 2D) = "white" {}
} // Properties
テクスチャーをパラメータとして利用する場合などに重宝します。
通常の テクスチャの場合
float4 _MainTex_ST; など宣言し
大抵 TRANSFORM_TEX() マクロに突っ込んで タイリングとオフセットを計算させ、
いい感じで UV を計算します。
こんな感じ
float4 _MainTex_ST;
...
o.uv = TRANSFORM_TEX( v.uv, _MainTex);
UnityCG.cginc内のマクロ定義はこんな感じ
// Transforms 2D UV by scale/bias property
#define TRANSFORM_TEX(tex,name) (tex.xy * name##_ST.xy + name##_ST.zw)
テクスチャ変数_ST; を宣言しておかないとエラーになり怒られます。
Shader error in 'Neko/Toon': undeclared identifier '_MainTex_ST' at line 52 (on d3d11)
初見に優しくない暗黙のルールな設計で、あまり好きでないですね。