【Unity】サーフェスシェーダにおける、TRANSFORM_TEXの位置
結論から言うと… TRANSFORM_TEXをサーフェスシェーダ内で使用する場合、vertex関数ではなく、surface関数に書かなくてはならない。
頂点シェーダー及びフラグメントシェーダーとは使い方が違うらしい…。たぶん…。 Unityのシェーダに対する詳しいリファレンスはないものか…。
TRANSFORM_TEX概要
Unityでシェーダーをいじっていた時の事。 テクスチャのTilingとOffsetをどうやって取り出すんだーと調べていたら、TRANSFORM_TEXなる存在を知ることができた。 TRANSFORM_TEXの定義はこんな感じ。
// Transforms 2D UV by scale/bias property #define TRANSFORM_TEX(tex,name) (tex.xy * name##_ST.xy + name##_ST.zw)
ここから察するのと調べたものにより、TRANSFORM_TEXを使用するには、定数としてfloat4やharf4などにテクスチャ名_STが必要らしい。
sampler2D _MainTex; float4 _MainTex_ST;
ここまでは大丈夫。問題はここから。 頂点シェーダー及びフラグメントシェーダーでの使い方はわかったものの、サーフェスシェーダーにて上の結論に行くまでが大変だった。
追ったリンクを張っておきますね。
なぜvertexで使えないのか
詳しい仕組みは…わからん…教えて偉い人。 ちなみに、vertex関数で書くとこのサイトと同じエラーが出る。なんなんだ…
Shader error in 'Custom/GroundShader': redefinition of '_MainTex_ST' at line 83 (on d3d11) Compiling Vertex program with DIRECTIONAL SHADOWS_OFF LIGHTMAP_OFF DIRLIGHTMAP_OFF DYNAMICLIGHTMAP_OF