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

はじめに

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

https://forum.unity.com/threads/where-is-the-exposed-gradient-node-property-in-shadergraph.822975/

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

案1 複数のLerpを使用する

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

参考 klabgames.creative.blog.jp.klab.com

f:id:Brave345:20200520115643p:plain

メリット

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

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

デメリット

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

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

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

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

github.com

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

f:id:Brave345:20200520115629p:plain

メリット

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

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

デメリット

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

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

おわりに

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