[ShaderForge] よく使いそうな繋ぎ方備忘録[ShaderGraph]

shaderForgeをやってると『これどうやるんだ?』ということがあるので発見や思いついたものを随時書いていきます。メモがわり。

6/1追記
ShaderForgeがフリー 化&サポート打ち切りによりUnity製のShaderGraphでの繋ぎ方に移行していきます。やってることは似てるので適宜よしなに解釈してください。買ったばかりなのに...


ハードエッジ対応アウトライン

Blenderでジオメトリの法線を球体に変更(参考) > 通常通りOutLineWidth指定、GeometoryのOutline Extrude DirectionをVertex Nomalsに指定。一応画像。

シェーディング

カメラ基準で影をつける。取得した値の強さをUVマップに変換。View DirctionをLight Directionにすれば 光源方向で影がつく。


テクスチャ部分透明化

テクスチャなどで指定部分(0の部分)をカットアウトする。閾値により描画するかしないかのどちらかになるので中間の値がある画像にvalueを足してやると描画範囲を調整できる。その際はvalueは公開してインスペクターからいじれるといいかも。下の画像ではアルファ(A)情報がない不透明画像を使っているのでRで代用。OneMinusは指定範囲を逆転してるだけ。
透明情報があるなら素直にAを刺すのが無難。


半透明化

Opacityに繋ぐ。こちらは0.0f(黒)を透明、1.0f(白)を不透明としてアルファブレンドしてくれる。
RやBでもできなくはないが色合いでズレるので凝ったことをしないなら素直に透明情報のある画像でAをつないでおこう。
繋いでも反映されない場合、下のような警告が出ることがあるがアイコンをクリックしてあげれば適用できる。



グラデーション

カラーをUVの縦方向にミックス。LerpはAとBの入力を、Tに入ってくる値を中間としてブレンドしてくれる。TにUV CoordのUを刺せば横方向になる。


2方向グラデーション

グラデーションを拡張したもの。UV CoordをDistanceでアレンジ。Powerで混じり具合を補正できるようにしてみた。

点滅

Timeから時間を取ってきてSinにつないであげるだけ。Sinとは波で、値が進むと一定の範囲を行ったり来たりする。ただし0を挟んで遷移しているのでRemapで0〜1の間に変換してあげないとその後の色をのせる処理で不具合がでたりする。スライダーの値を上げると点滅スピードが早くなる。
動きがスムーズじゃないのはPCの調子が悪いからで、この処理が重いわけではないです。


一方向へ動かす & 拡大縮小

ごちゃついてますが、中身は単純です。左の3つのノードで値の波を作り(点滅と同じ)それを元に移動と拡縮をさせています。移動は値を直接VartexOffsetにさすとXYZ全ての方向に動くことになるので、Appendでvector2を作りそのG(Y)部分に入れてあげます。z方向に動かしたければGにも0をさして、その下に出てくるB(Z)の要素に入れてあげます。
拡縮はもっと単純で法線方向とかけてやることで膨らませています。あとはAddで合成するだけです。

霞みがかったような演出

LerpのT(閾値)にワールド座標を指定します。シェーダーでやってることは以上です。
ですが、シェーダーを地面に見立てたPlaneなどと任意のオブジェクト両方に設定することで霞の中から立ち上がったような演出ができます。MonumentValleyでも似たような演出が使われてますね。


縦方向ノイズ1

壊れかけのテレビ風。ノイズをDivideノードで作成するパターン。グラデーションがかかるのが特徴。ノイズの密度はDicideに入ってくるVector1で制御。



縦方向ノイズ2

壊れかけのテレビ風。ノイズをSinノードで作成するパターン。Uniteの公演(41分~)がすごくわかりやすい。動画ではSaturateノードで0から-1の値をまるめている。


頂点移動(丸み)

UVのY(V)方向からDistanceで距離をとる。そのままでは範囲が大きすぎるのでSmoothStepで丸めてRemapで反転。OneMinusでも可。その値をメッシュの法線方向にかけてやれば頂点移動ができる。
DistanceとSmoothStepの間にPowerを挟んでいる理由は、白(1)→黒(0)の遷移が直線的なので、このままでは画像のように丸みをおびないため。Power(強調?)を挟むことでイージング効果を狙ってみた。スライダーで位置を変えれます(できないと意味ない)。
当初ShaderGraphで作ろうとしていたけどVartexの項目がない?ので断念した(6/2時点)


シンプルな波紋

一番上のカラフルな行ではUVマップからリング上のグラデーションを作成しています。
Distanceの位置を変えてやればドーナツ上にサンプリングできるのでそれを2値化してTextureとOpacityに指定してあげれば波紋が出来上がります。
例のごとくTimeでサンプリングする位置を変えてます。Fracは整数値切り捨て、Remapはサンプリングする位置とその閾値をそれぞれ変えています。

チュートリアルリンク

コメント