今回の記事はとある案件用にHDA(Houdini Digital Asset)を作成したお話です。サンプルデータも配布しますのでご興味がある方はご参考ください。
サンプルファイル
HDA制作の経緯
今回の案件で制作するデータは下記の通りでした。
- 海
- 山(地形)
- 木
- ビル群
海はOceanで、地形はTerrainで、木はそれほど種類がないので数パターン作ってランダム変形を加えることでクリアすることができたのですが、形状の異なるビルを大量に生成し、後々手作業でコントロールすることもできるという要件を満たすためにHDA化することとしました。
また実際にはビルの形状は外出ししたCSVファイルで管理しています。こちらは後日記事にするかもしれません。
本記事で作るもの
実際に作成したツールは多くのパラメータを持っていますが、ここでは説明のためシンプルな作りにしています。
ツールの要件としては下記の通りです。
- カーブを接続するとそれを壁面としたビルが生成される
- 一部屋の区画は隣接するポイントで区切られた区間とする
- 屋上に任意のジオメトリを置くことができる
- 階建を指定することができる
- 壁面、ガラスのマテリアルを指定することができる
HDA作成手順
ざっくりこんな流れです。
- HDAの元となるビルを作る
- 動作検証後、サブネット化してインプットを整備する
- サブネットをHDA化する(その際入力条件などを決める)
以下、順を追って見ていきましょう。
ビルの作成
HDAの元となるビルを作成します。シンプルな作りのため解説等は不要かと思いますが、あえてポイントをあげるとすれば下記の通りです。
パラメータはNull(CONTROLLER)にまとめる
パラメータにはデフォルト値を設定しておく
ビルを大量に生成したときにデフォルト値が入っていないと面倒なので。
カーブを接続した状態をSwitchノードでチェック
想定通りの挙動をするかテストしていきます。
Input2に接続するジオメトリがビルの屋上に接するかどうかチェックします。
プロシージャルにUV展開ができてるかどうかチェック
Subnet化
機能が実装できたらサブネット化します。HDAにしたいネットワークを選択してShift-Cもしくはダンボールアイコンをクリックします。
Subnet内に入り、テスト用のジオメトリを削除してSub-Network Input#1
とSub-Network Input#2
をそれぞれ繋ぎ直します。
SubnetをHDA化する
Subnetworkノード上で右クリック > Create Digital Assetを実行
Create New Digital Asset from Nodeウィンドウが表示されるので下記を入力します。
- Operator Name
- Operator Label
- Save to Library
Save to LibraryはデフォルトではC:\Users\username\Documents\houdini16.5\otls
になっているかと思いますが、ここに保存するとグローバルに(つまりプロジェクト縛りなく)使えてしまうため、今回はローカル(プロジェクト内のみ)で使用できるようD:\houdini\simple_building_generator\hda
に保存しました。
上記ウィンドウでAcceptを押すとEdit Operator Type Propertiesウィンドウに切り替わります。Basicタブで下記の通り設定をします。
- Minimum inputs : 1
- Maximum inputs : 2
これはインプットがひとつの場合は屋上になにもないケース、インプットが2つある場合は2つ目のインプットが屋上にジオメトリがあるケースを表現するためです。
From Nodesタブを開き、build_gen > subnet1 > CONTROLLERを表示し、右側のExisting Parametersペインにドラッグ・アンド・ドロップします。Acceptを押せばHDA化は完了です。
この工程でCONTROLLERにパラメータをまとめたのが生きてくるわけです
使う
HDAを作成したら、あとは他のノードと同様TABキーから呼び出しができます。SOPコンテキストでTAB > build...と入力すれば絞り込まれて表示されます。
第2インプットにはジオメトリなら何でも挿せるので、BuildingSOPを挿していけば複雑な形状も簡単に表現可能です。
もちろんカーブを用いて任意の形状を作ることもでき、ResampleSOPを用いることで窓の個数を調整することも可能です。
参考サイト
まとめ
案件に合わせたツールを簡単に作ることができるのもHoudiniの魅力のひとつです。SOPの柔軟さ、強力さは他のツールとの併用でも十分に発揮されると思います。(ちなみに今回の案件はHoudini8割、Maya1割、ZBrush1割くらいで作成しました)
みなさんもHDAを使ってみてはいかがでしょうか。