ShaderGraphで作ったシェーダーにスクリプトからテクスチャーオフセットを変更する方法
ShaderGraphで作ったシェーダーにスクリプトからテクスチャーオフセットを変更しようとしたところ詰まりポイントがあったのでメモ。
URPのシェーダーはMaterial.mainTextureScaleとMaterial.mainTextureOffsetを使ってタイリングを変更できます。しかしURPのLitシェーダーを参考にVector2でTilingとOffsetという変数を作ってスクリプトから値を変えようとしたところ値が変わりませんでした。
調べたところ以下のスレッドを発見。
Question How do I access a material's mainTextureScale and mainTextureOffset in a LWRP shader graph?
https://forum.unity.com/threads/how-do-i-access-a-materials-maintexturescale-and-maintextureoffset-in-a-lwrp-shader-graph.663127/
どうやら Vector4の _MainTex_ST という変数を宣言すれば他のシェーダーのようにスクリプトからアクセスできるようになるようです。
しかしここで問題発生。ここに載ってたようにつなぐとURPのLitシェーダーとは違うOffsetの挙動になってしまいました。
Litシェーダー等はOffset = 0で下のタイルが選択されていたと思います。
正直上から下の方がわかりやすいのですが他のシェーダーと揃ってないと何かと面倒なので揃える事にします。
Offsetのyの値をOneMinusで反転し、そこからTilingの値を減算しています。
これで他のシェーダーと同じ値で使いまわせるようになりました。