本日はUnityShader枠です。
UnityではSRPプロジェクトで[ShaderGraph]が使用可能です。
[ShaderGraph]の登場によってShaderLabより低コストで学習を進めることができます。
また従来のShaderLabではいちいちコンパイルする必要がありましたが、ShaderGraphではリアルタイムで結果を出力してみることができます。
しかしながらShaderGraphのノードでは対応していない場合や、複雑な処理などを行う際大量のノードを接続すると可読性が下がることがあります。
ShaderGraphでは[CustomFunction]と呼ばれる特殊なノードが提供されており、ユーザーがカスタムしたノードを作成可能です。
[CustomFunction]は作成時は上図のように何もすることができません。
ノード上部の歯車マークをクリックしプロパティを開きます。
[Source]がデフォルトで[File]となっています。これはShaderLabでいうところの以下の処理に該当します。
#inclube UnityCG.cginc(のような外部ファイル)
つまり外部ファイルに定義した関数を使用する場合に使用します。 よく使用する関数を用意します。
この[Source]を[String]に変更します。
これによってHLSLの処理を記述することができるようになります。
今回次のように処理を書いてみました。
Outa=In.x*0.5; Outb=In.y*0;
この処理ではVector2型の変数Inのx成分に0.5を積算した値がOuta、Inのy成分に0をかけたもの(実質0)がOutbという変数代入されます。
この処理を行うためにはInという入力値とOuta,Outbという出力値が必要です。
これはCustomFunctionの[Input],[Output]に定義します。
これによってCustomFunctionを使用したオリジナルノードが作成できました。
入出力を設定したことでノードのソケットが表示されます。
結果を見てみます。
今回Vector2型で変数を作成、最初は1の値でしたが、Outaではグレー(0.5)、Outbでは黒(0)が出力されました。
ShaderGraphでHLSLを記述することもできたので複雑な処理も行えそうです。