いんでぃーづ

ゲームいろいろ、いろいろ自由

Unity ShaderGraph : ディゾルブシェーダーを自作

ディゾルブシェーダー は溶ける(Dissolve)ようなエフェクトで消えたり出たりするためのシェーダーです。

f:id:sugar_affordance:20201125084019g:plain

シェーダーのコードをガリガリ書いてもいいのですが、せっかくなので ShaderGraph で作ります。

・環境
Unity 2020.1
Universal Rendering Pipeline 9.0.0

Shader Graph アセットを作成

プロジェクトウィンドウで右クリック
Create > Shader > Universal Render Pipeline > Lit Shader Graph

f:id:sugar_affordance:20201125084852p:plain

ファイルに適当な名前をつけたらダブルクリックして編集画面を開く

ビルトインパイプラインの場合は
Create > Shader > Blank Shader Graph
ですね

グラフを作成

こんなかんじで作成

f:id:sugar_affordance:20201125085022p:plain

(圧縮されて画像がつぶれたのでそれぞれの部分はあとで)

意外とシンプルになりました

プロパティ

マテリアルから指定するプロパティは四つにしました。

f:id:sugar_affordance:20201125085235p:plain

  • AlbedoColor
    テクスチャと別に指定する色。テクスチャを指定しない場合はここで指定した色になり、テクスチャを指定した場合は色がまざって表示されます。
  • AlbedoTexture
    物体表面のテクスチャです
  • DissolveTexture
    どのように溶けていくかを指定する白黒のテクスチャです。黒い部分から消えていきます
  • DissolveThreshold (float)
    マテリアルからこの値を設定すると、0 > 1 に向かって徐々に消えていきます

ノード

頂点シェーダーのほうはいじってないので、フラグメントシェーダー部分だけ

f:id:sugar_affordance:20201125090834p:plain

Fragment ノード内の AlphaAlpha Clip Threashold は項目がデフォルトだと表示されていなかったので、右クリックで追加します。

あと Graph Setting で Alpha Clip にチェックを入れておきます。

f:id:sugar_affordance:20201125090935p:plain

スクリプトから制御するプロパティに名前を設定

DissolveThreshold プロパティはスクリプトからいじりたいので、Reference にすぐわかる名前を設定しておきます。

f:id:sugar_affordance:20201125091055p:plain

保存

忘れがちですが Save Asset を押して保存しないと反映されないので忘れない

マテリアルを作成

プロジェクトウインドウを右クリックして
Create > Material
からマテリアルを作成

シェーダーを今しがた作成したものに差し替えます。

f:id:sugar_affordance:20201125091415p:plain

ちょっとわかりずらいですが、DissolveTextureにゴワゴワしたかんじの白黒テクスチャを設定しています。

Dissolve Thresholdを制御するスクリプトを作成

マテリアルを取得して _DissolveThreshold に値を設定すれば出たり消えたりします。

    var alpha = 0.5f;  // 半分くらい消したい場合
    var material = GetComponent<MeshRenderer>().material;
    material.SetFloat("_DissolveThreshold", alpha);

“Unity” and Unity logos are trademarks or registered trademarks of Unity Technologies or its affiliates in the U.S. and elsewhere, and are used under license.


免責事項

当サイトの広告バナー、リンクによって提供される情報、サービス内容について、当サイトは一切の責任を負いません。

また、当サイトの情報を元にユーザ様が不利益を被った場合にも、当サイトは一切の責任を負いません。

すべて自己責任でお願いします。