はじめに
本記事は2019/08/31に行われた勉強会、第4回 Substance Designer ゆるゆる会にて「SDはスパゲッティ化しがちなので良い方法を教えてほしい」という僕の質問に対し、参加者のMINOさんに教えていただいた内容をまとめたものです。
本記事で紹介する方法は大きく分けて下記の2つです。下記方法にご興味がある方はご覧いただければと思います。
- グラフ内の別の場所で同じ挙動をするノードを作成する方法(インスタンス的な使用方法)
- 複数のインプットに対し同じパラメーターでモディファイアを適用しアウトプットする方法
ともにサブグラフを用いた手法となります
サンプルファイル
本記事に使用したサンプルファイルはこちら
やりたかったこと
例のごとくHoudiniに即した説明になります(すみません)。
ObjectMerge
HoudiniにはObjectMerge
というノードがあり、他のノードを引っ張ってくることが可能です。複雑になりすぎたネットワークを一旦分断し、ワイヤをつなぐことなく参照できるためノードの整理が行いやすくなります。*1
Reference Copy
Houdiniにはch関数
と呼ばれるエクスプレッションがあり、ノードを接続することなく他のノードからチャンネルの値を取得することができます。ターゲットのすべてのチャンネルを同期させたものをReference Copyと呼び、単純なコピーではなく値が追従されるノードとなり、互いに必ず同じ値を持つという保証を得ることができます。*2
これらを満たす方法を教えていただきましたので下記にまとめていきます。
グラフ内の別の場所で同じ挙動をするノードを作成する
本作例ではPolygon
ノードを作成し、異なる場所で同じ形状になるようセッティングしていきたいと思います。
Create Graph from Selection
下記手順を踏みます。
Polygon
ノードを作成- 上記ノードを選択、右クリックメニューを表示
- Create Graph from Selection(1)をクリック
- サブグラフの名前を聞かれるので、ここでは
MyPolygon
としました
MyPolygonサブグラフを編集する
- EXPLORERからMyPolygonをダブルクリック
- 内部に入り
Output
ノードを接続します - 元シーンに戻り、サブグラフを作るために用意した
Polygon
ノードを削除、MyPolygon
ノードを2つ配置します
MyPolygonに戻りパラメータを編集
ここではSidesの値を4にしました(四角形ですね)
元シーンで確認
両方とも四角形のシェイプになっていることが確認できました
複数のインプットに対し同じパラメーターでモディファイアを適用しアウトプットする
この目次で書き方があっているかわかりませんが、下記の図のようにMirror Grayscale
ノードを同じパラメータで適用したいということになります。
上記でいうと三角形と六角形に同じパラメータでミラーしたいということになります
Create Graph from Selection
先程の方法と同様に、ターゲットとなるノードをサブグラフにします。ここでは名前をMyMirror
としました。
MyMirrorサブグラフを編集する
- EXPLORERからMyMirrorをダブルクリック
- 内部に入り
Input
ノードとOutput
ノードを接続します Mirror Grayscale
ノードを選択し、右側のPROPERTIESパネルからINSTANCE PARAMETERS右側のファイルアイコンをクリックし、Expose Parametersを実行します- Exposed Node Parametersウィンドウが起動するので、ALLボタンを押してOKします*3
Input
-Mirror Grayscale
-Output
のノード群をまるっとコピペします- 元シーンに戻り、サブグラフを作るために用意した
Mirror Grayscale
ノードを削除、MyMirror
ノードを配置します - インプットとアウトプットがそれぞれ2つあることを確認しましょう
インプットとアウトプットに別々のノードを接続してみる
異なるインプットに対し、同じパラメータで処理を行った後、別々に出力することができるようになりました。
まとめ
サブグラフの機能を使ったノードの整理方法ですが、どちらも今後の制作に役立ちそうです。
ポイントとしては、サブグラフの中でパラメータを変更するか、パラメータを外出しして管理するかの違いに注意する点でしょうか。
教えていただいたMINOさんに感謝しつつ、素晴らしい会を用意してくださった主催者・参加者の皆様、会場をご提供いただいたヒストリア様に感謝をもって〆させていただきたいと思います。
追記
MINOさんに本記事をご確認いただき、MyMirror
ノードのインプットがInputColor
だったため型があっていない(赤い破線になっている)とのご指摘をいただきました。
サンプルデータを下記のようにInputGrayscale
ノードにて修正しています。
正
誤
補足
MINOさんのSDにおけるノード管理術は非常に勉強になるところが多く、僕自身いつも勉強させていただいています。日頃の感謝を込めて、氏のチュートリアルをご紹介させていただきます。