kick the base

好きな映画、音楽、マンガ、プログラム、デザイン、3DCG、ゲームのこと。

Houdini: HDAとしてビルディングジェネレーターを作った話

今回の記事はとある案件用にHDA(Houdini Digital Asset)を作成したお話です。サンプルデータも配布しますのでご興味がある方はご参考ください。

サンプルファイル

sample scene

HDA制作の経緯

今回の案件で制作するデータは下記の通りでした。

  • 山(地形)
  • ビル群

海はOceanで、地形はTerrainで、木はそれほど種類がないので数パターン作ってランダム変形を加えることでクリアすることができたのですが、形状の異なるビルを大量に生成し、後々手作業でコントロールすることもできるという要件を満たすためにHDA化することとしました。

また実際にはビルの形状は外出ししたCSVファイルで管理しています。こちらは後日記事にするかもしれません。

本記事で作るもの

実際に作成したツールは多くのパラメータを持っていますが、ここでは説明のためシンプルな作りにしています。

ツールの要件としては下記の通りです。

  • カーブを接続するとそれを壁面としたビルが生成される
  • 一部屋の区画は隣接するポイントで区切られた区間とする
  • 屋上に任意のジオメトリを置くことができる
  • 階建を指定することができる
  • 壁面、ガラスのマテリアルを指定することができる

HDA作成手順

ざっくりこんな流れです。

  1. HDAの元となるビルを作る
  2. 動作検証後、サブネット化してインプットを整備する
  3. サブネットをHDA化する(その際入力条件などを決める)

以下、順を追って見ていきましょう。

ビルの作成

HDAの元となるビルを作成します。シンプルな作りのため解説等は不要かと思いますが、あえてポイントをあげるとすれば下記の通りです。

パラメータはNull(CONTROLLER)にまとめる

f:id:kickbase:20180507210420j:plain

パラメータにはデフォルト値を設定しておく

ビルを大量に生成したときにデフォルト値が入っていないと面倒なので。

f:id:kickbase:20180502221746j:plain

カーブを接続した状態をSwitchノードでチェック

想定通りの挙動をするかテストしていきます。

image

Input2に接続するジオメトリがビルの屋上に接するかどうかチェックします。

image

プロシージャルにUV展開ができてるかどうかチェック

image

Subnet化

機能が実装できたらサブネット化します。HDAにしたいネットワークを選択してShift-Cもしくはダンボールアイコンをクリックします。

Subnet内に入り、テスト用のジオメトリを削除してSub-Network Input#1Sub-Network Input#2をそれぞれ繋ぎ直します。

image

SubnetをHDA化する

Subnetworkノード上で右クリック > Create Digital Assetを実行

f:id:kickbase:20180502224107j:plain

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に保存しました。

f:id:kickbase:20180502224120j:plain

上記ウィンドウでAcceptを押すとEdit Operator Type Propertiesウィンドウに切り替わります。Basicタブで下記の通り設定をします。

  • Minimum inputs : 1
  • Maximum inputs : 2

これはインプットがひとつの場合は屋上になにもないケース、インプットが2つある場合は2つ目のインプットが屋上にジオメトリがあるケースを表現するためです。

f:id:kickbase:20180502224134j:plain

From Nodesタブを開き、build_gen > subnet1 > CONTROLLERを表示し、右側のExisting Parametersペインにドラッグ・アンド・ドロップします。Acceptを押せばHDA化は完了です。

f:id:kickbase:20180502224145j:plain

この工程でCONTROLLERにパラメータをまとめたのが生きてくるわけです

使う

HDAを作成したら、あとは他のノードと同様TABキーから呼び出しができます。SOPコンテキストでTAB > build...と入力すれば絞り込まれて表示されます。

image

第2インプットにはジオメトリなら何でも挿せるので、BuildingSOPを挿していけば複雑な形状も簡単に表現可能です。

f:id:kickbase:20180502224415j:plain

もちろんカーブを用いて任意の形状を作ることもでき、ResampleSOPを用いることで窓の個数を調整することも可能です。

f:id:kickbase:20180502224427j:plain

参考サイト

まとめ

案件に合わせたツールを簡単に作ることができるのもHoudiniの魅力のひとつです。SOPの柔軟さ、強力さは他のツールとの併用でも十分に発揮されると思います。(ちなみに今回の案件はHoudini8割、Maya1割、ZBrush1割くらいで作成しました)

みなさんもHDAを使ってみてはいかがでしょうか。