ノードを繋げてシェーダを作成することができる、Unity純正のShader Graphを始めてみました。
環境セットアップ(Unity2019.1.10f1の場合)
新規プロジェクトで始める場合、Unity HubからLightWeight RPを選んだ状態でプロジェクトを作成するとスムーズにShader Graphを始められます。
参考 : UnityHubが過去バージョンのUnityをインストールできるようになっていた - 渋谷ほととぎす通信
Shader Graphを利用するためにはScriptable Render Pipeline(以下:SRP)を利用する必要があります。
そこでLightWeigh Render Pipeline(以下:LWRP)を使用します。
LWRPはUnityが提供する汎用性の高いSRPです。基本はこれを使ってカスタマイズしていくのが良いでしょう。LightWeightという名前とは裏腹にそこそこの絵作りが可能で高機能です。
ちなみに、先日のCEDEC2019のセッションでも発表されていましたが、Unity2019.3ではLightWeight
というキーワードはUniversal
という名前にリライトされUniversal Render Pipeline
(以下:URP)になる予定です。
シェーダファイルの作成 CreateからUnlit Graphを選択
今回はUnlitなシェーダを作成するので
Create > Shader > Unlit Graph
からシェーダを作成します。
作成したシェーダファイルをダブルクリックするとShader Graphが起動します。
Timeでアニメーション
Create Node > Input > Basic > Time
からTimeノードを追加します。
こんな感じでTimeのサイン波プロパティをカラーに適用するとこんな感じで白と黒を行き来するシェーダができます。
シェーダにテクスチャを追加する方法
シェーダのインプット情報として任意のテクスチャを追加する方法の説明です。
外部からテクスチャをセットする場合はShaderGraph左上のBlackboardから追加します。
Blackboardが表示されていない場合
表示されていない場合はShader Graph右上の
Blackboard
をクリックすると表示されます。
Texture2Dプロパティの追加
プラスボタンをクリックすると、追加可能なプロパティが表示されるのでテクスチャを追加する場合はTexture2Dを選択します。
D&Dでプロパティノードを追加
BlackboardからD&DするとTexture2Dのノードが追加されます。
Texture2Dをシェーダに適用する
こちらのテクスチャをフェッチして表示させてみます。
まずはサンプルとなるテクスチャをBlackboardにセットしておきます。ここでセットしたテクスチャはあくまでシェーダの確認用になります。Materialにセットする際は再度テクスチャをセットする必要があります。
このようにTexture2Dノードから何もないところへD&Dするとノード作成メニューが出てくるので、Input > Texture > Sample Texture2D
を選択します。
Sample Texture2D
ノードのRGBAプロパティをUnlit Masterのカラーへ繋げればテクスチャのカラーをそのまま反映することができます。
いろいろ遊んでみる
Shader Graphには様々なノードが実装されています。最後に何も考えずに遊んでみました。
ノードはこのような感じでSimple Noise
でノイズを作っています。
最後に
基本的なShader Graphの使い方はわかりました。ノードを繋げるだけでシェーダが作成できるのは思った以上に簡単でした。 ただし、簡単だと思うのはシェーダを書いたことがあるエンジニア側の意見であって、ノンプログラマーにとってはとても難しいことだと認識しています(コードを直書きするよりは楽だと思うけど)。
今後の方針としては、数あるノードの把握、使い方を理解していこうと思います。ネットには作例がゴロゴロ転がっているので、それらを参考に作っていく、または今までShader Labで作ってきたシェーダをShader Graphで置き換えてみるというのも良い勉強になりそうです。
ただし置き換えが完了したとしても、僕の主戦場であるスマホ環境でどのくらいパフォーマンスがでるシェーダがジェネレートされるのかが気になりポイントです。
実戦投入する上で、この辺りは慎重に計測していく必要があるかなと思います。
とはいえLWRP(URP)の時代は来そう(現にポストモーテムがCEDEC2019で発表されている)ですし、Shader Graphを使いこなすことでクリエーターとの協業ができるようになり、プロダクトのクオリティを上げられるかもしれないので頑張って勉強していこうと思います。
環境
- Unity2019.1.10f1
- macOS Mojave 10.14.5