Custom Function(カスタム関数)ノードは、Unityのビジュアルシェーダー作成ツールである「Shader Graph」の中で、直接「HLSLコード」を記述したり外部ファイルからインポートして、独自のシェーディング処理や高度な数式を実行できる非常に強力な拡張ノードです。
現実世界での例え:既製の料理キットへの『秘密のスパイス』の投入
Custom Functionノードの役割は、「既製の料理キット(ビジュアルノード)を使った調理プロセスに、シェフ自作の『秘密のスパイス(HLSL手書きコード)』を投入する工程」に例えることができます。
- 従来(ノードのみでの実装): レストランで非常に複雑なオリジナルソース(レイマーチングや特殊なノイズ)を作りたい時、既製品のケチャップやマヨネーズのボトル(基本的なMathノード)を100本以上並べて、それらを複雑なチューブで強引に繋ぎ合わせる(ノード接続)必要があります。テーブルの上はチューブでスパゲティ状態になり、どこを直せば良いかも分からなくなります。
- Custom Functionによる解決: レシピカードに「秘密の調合手順(HLSLコード)」をコンパクトに記述し、それを1つの特製スパイスボトル(Custom Functionノード)に詰めます。これを料理キットに1滴たらすだけで、スパゲティ状態のボトルやチューブを一掃し、一瞬で最高級のオリジナルソースを作り出すことができます。
図:Shader Graphノードの流れの中に自作のHLSL関数を組み込むCustom Functionノードの概念インフォグラフィック
仕組みと動作原理
Custom Functionノードの「Type」プロパティには「String(ノード内にコード直書き)」か「File(外部.hlslファイルのロード)」を選択できます。入力ポートと出力ポートの変数名・型を正確に設定すると、Shader Graphが最終的なシェーダーコードをコンパイル(生成)する際に、自作のHLSL関数ブロックを自動的にコードのグローバルスコープへとインジェクション(挿入)します。