【Unity】ShadergraphでGradientがプロパティ化できないので対策案を探してみた

はじめに

ここにもある通りShaderGraphのGradientはプロパティ化出来ないため、グラデーションをマテリアルからいじれないので不便です。

WHERE is the exposed Gradient node property in Shadergraph - Unity Forum

なので何か対策方法がないか調べてみました

案1 複数のLerpを使用する

トライトーンというものを使用します

参考

www.klab.com

メリット

・ Colorノードを使用しているためCustom Dataで色情報の受け渡しが出来る。

・ Colorを変更するだけなので調整が楽

デメリット

・複雑なグラデーションが出せない

案2 グラデーションテクスチャを使う

グラデーションテクスチャは以下のエディタ拡張で作成できます。

Genボタン押してからグラデーションテクスチャを作成できるまで若干ラグあるので注意です

github.com

あとは以下のようにノードをつなげればOKです 左下のSample Texture 2Dノード確認用なので消しても大丈夫です

メリット

・ Lerpと比べて複雑なグラデーションを作成しやすい

・ テクスチャを使用しているため同じような色合いを出したいときにテクスチャを使い回しできる

デメリット

・使用するテクスチャが増えるため容量が増える

・テクスチャにHDRなカラーを持たせることで出来ないので、徐々に発光させるみたいなグラデーションが作れない

複数のグラデーションを格納したテクスチャを使用する場合

こちらのやり方が参考になります

案3 ブーリアンまたはシェーダーバリアントを使用する

以下の記事みたいすれば数種類のグラデーションを切り替えることが出来る

bravememo.hatenablog.com

メリット

・ グラデーションノード使用できるので自由にグラデーションが設定できる

デメリット

・プロパティ側でグラデーションの色合いを変更できない

・処理速度またはコンパイル時間が長くなる

おわりに

どちらの方法にもメリット、デメリットがあるのでケースバイケースでやるのがいいと思います。