Custom Function ノード
説明
Shader Graph を使用すると、Unity で簡単にカスタムシェーダーを作成することができます。ただし、デフォルトの ノード では作成できないものもあるため、パッケージの ノードライブラリ 内に Custom Function ノードを追加しました。
Custom Function ノードを使用すると、独自のカスタム HLSL コードを Shader Graph 内に挿入できます。string
モードを使用して小さな関数を直接グラフ内に記述する方法と、外部の HLSL のインクルードファイルを参照する方法があります。また、Custom Port メニュー を使用してノード自体に独自の入力ポートと出力ポートを定義することもできます。
Custom Function ノードの使い方
Custom Function ノードは Create Node メニュー を使用して作成します。デフォルトでは、新規に作成された Custom Function ノードには入力ポートも出力ポートもありません。
Graph Inspector の Node Setttings を使用して Custom Port メニュー と Custom Function メニューを開いてください。
Custom Function メニュー
メニュー項目 | 説明 |
---|---|
Inputs | ノードの入力ポートを定義する Custom Port メニュー です。 |
Outputs | ノードの出力ポートを定義する Custom Port メニュー です。 |
Type | 関数のタイプ (種類) を設定するドロップダウンメニューです。外部のファイルを参照する場合は File を、ノードに関数を直接入力する場合は String を選択してください。 |
Name | 最終的に生成されたコードのカスタム関数の名前です。 |
Source | 外部の HLSL のインクルードファイルを参照するアセットフィールドです。File モードでのみ使用可能です。 |
Body | HLSL コードを入力するテキストボックスです。String モードでのみ使用可能です。 |
String による関数の定義
String
モードを選択すると、グラフがシェーダー関数を生成します。Name
フィールドは生成された関数の名前を定義し、Body
フィールドは生成された関数のコンテンツを定義します。引数、中括弧、インデントスコープは自動的に処理されます。String
モードでは Body
フィールドに入力する際に half
や float
の代わりに $precision
というトークンを使用することもできます。これは、ノードが処理される時に、ノードの精度に応じて正しい型に置き換えれられます。
上の例は以下の関数を生成します。
File による関数の定義
File
モードを選択すると、グラフはシェーダー関数を自動的に生成しません。File
モードは、最終的に生成されたシェーダー内に include 参照を挿入し、参照先ファイル内の関数を使用します。Name
フィールドは、呼び出したい関数の名前と一致している必要があります。Source
フィールドには、該当の関数を含む HLSL ファイルへの参照を加えます。
Custom Function ノードに File
モードを使用する場合、関数を手動で適切な形に設定する必要があります。Shader Graph 用のカスタム関数の作成に当たっては精度のサフィックスに留意してください。生成されたコードは関数名に精度のサフィックスを付加します。また、インクルードファイルの関数にも、適切な精度のサフィックス (下の例では _float
) が付加されているか、_float
と _half
両方のサフィックスを持つ複数の関数が含まれている必要がありますが、Name
フィールドには 精度のサフィックスを含まないでください。
File
モードでは、グラフ内のカスタム関数の定義がより柔軟に行えます。以下のように行列を使って関数のスコープの外で uniform 変数を定義できます。
同じファイル内で複数の関数を定義して、それを参照する関数から呼び出すことができます。あるいは、同じファイルを参照しながら、異なる Custom Function ノードから異なる関数を使用することも可能です。
他の関数を含む他のファイルを加えることも可能です。
Custom Function ノードの再利用
Custom Function ノードは、それ自体では単一のノードインスタンスです。入力、出力、関数の参照を再作成せずに同じカスタム関数を再利用したい場合は、Sub Graph を使用してください。Create Node メニュー に Sub Graph が表示され、ここからカスタム関数の共有や再利用が行えます。
カスタム関数の作成は、直接 Sub Graph 内で行うか、既存の Custom Function ノードを右クリックして Convert to Sub Graph
を選択することで行えます。Graph Inspector と Custom Port メニュー を使用して、適切な入力ポートと出力ポートを追加してください。これを行うと、カスタム関数を (他の Sub Graph 内でも) 何度でも再利用することができます。