On this page |
概要 ¶
Material Builderノードまたはマテリアルアセット用に独自のユーザインターフェースを構築することができます。 シェーダネットワーク内のノードは、親マテリアル上のパラメータと入力を表現しており、それらの出力を使用することで、そのマテリアルネットワークの挙動を駆動させることができます。
パラメータ/入力の作成にはいくつか方法があります:
-
ネットワーク内で手動でParameterノードを作成します。ネットワーク内のParameterノードは、それに該当するパラメータと入力を親マテリアル上に作成します。
Parameterノードの Has corresponding connector を無効にすることで、そのParameterノードが入力を作成しないようにすることができます。
-
ネットワーク内のノードのパラメータを親マテリアルまでプロモートします。これは、該当する入力上にParameterノードが自動的に作成されます。
この方法でパラメータを作成すると、そのプロモートしたパラメータからラベルなどの役立つ情報までもコピーされます。これは、独自でParameterノードを作成するよりも簡単です。
パラメータをプロモートする方法 ¶
ネットワーク内のノードのパラメータを親ノードのインターフェースまで“プロモート”させることができます。
To... | Do this |
---|---|
ネットワーク内のノードのパラメータから親ノード上にパラメータを作成する |
パラメータの隣にある ギアメニューアイコンをクリックして、 Promote parameter を選択します。 |
この方法で作成されたParameterノードは、プロモートした入力がコンパクトなスタブとして表示されるように自動的に折り畳まれた状態で作成されます。 そのスタブを選択すれば、パラメータエディタでそのParameterノードを編集することができます。このスタブをダブルクリックすることでフルノードに展開されます。
パラメータインターフェースの再配置 ¶
Parameterノードで作成された親ノード上のパラメータの順番を変更したり、タブ、グループボックス、分割線などでパラメータを整理することができます。
インターフェースの編集方法は、Material Builderサブネットまたはデジタルアセットによって異なります。
Material Builderサブネットのインターフェースを編集する
パラメータエディタで、その上部にあるメインの ギアメニューをクリックして、 Edit parameter interface を選択します。
マテリアルアセットのインターフェースを編集する
ネットワークエディタで、ノードを右クリックして、 Type properties を選択して、 Parameters タブをクリックします。
(この違いは、Material Builderに関しては、そのMaterial Builderタイプのインスタンスのパラメータを編集するのに対し、アセットに関しては、アセットタイプの共有定義を編集するからです。)
詳細は、Edit Parameter InterfaceウィンドウとアセットUIの編集を参照してください。
パラメータオーバーライド ¶
Houdiniシェーディングの特徴として、マテリアルのパラメータを、シェーディングされたジオメトリ上のそれと同じ名前のアトリビュート値で上書きできることです。
例えば、マテリアルにCd
(“diffuse color”)パラメータがあった場合、シェーディングされたジオメトリ上のCd
アトリビュート値でそのパラメータ値が上書きされます。
つまり、マテリアルがジオメトリ上のポイントカラーを取得するようになります。
これは非常に便利です。いくつかのパラメータ(例えば、roughness)に対してデフォルト/設定値が設定されたシェーダを構築することができますが、アーティストがジオメトリの色々な箇所に色々な値をペイントすることができます。 これは、そういったワークフローをシェーダに独自対応で構築することなく動作します。
オーバーライドは、Point/Vertex/Primitive/Detailアトリビュートで動作します。異なるレベルで同じ名前のアトリビュートが複数存在した場合は、Pointアトリビュートが最も優先度が高いです。
Tip
該当するパラメータを作成することなくジオメトリからアトリビュート値を取得するには、Parameter VOPの代わりにBind VOPを使用します。
ヒントとメモ ¶
-
他のHoudiniネットワークでは、“親”ノード上にSpareパラメータを作成して、ネットワーク内からそれらのパラメータをチャンネル参照することができます。しかし、それはマテリアルでは動作しません。その理由は、マテリアルはVEXコードにコンパイルされてMantraレンダラーで実行されるからです。マテリアルには元のノードネットワークの概念がありません。
マテリアルネットワークでは、Parameterノードだけを使用して、(手動またはプロモートで)そのマテリアルのコントロールインターフェースを開発するべきです。