Houdiniを使った自動配置のキホン~その1~

INDEX

はじめに

こんにちは。モノリスソフト テクニカルアーティストの森田です。今回はデザイナー向けに、Houdiniを使って大量のオブジェクトをまとめて自動配置するテクニックをご紹介します。
草木や岩、地面に無造作に散らかったゴミやチラシを並べる、ビルを並べるなどいわゆる「ランダムに並べるだけ」の単純作業でありながら物量が多く時間がかかるタスクに悩まされた経験はないでしょうか。今回は、極力難しいことを省いてだれでも簡単に時短ができるテクニックの基本をご紹介したいと思います。

Houdiniには、点(ポイント)を任意のオブジェクトに差し替える機能があります。つまり、ポイントをばらまいてそれを後で自分の置きたいオブジェクトに差し替えるのです。この、ばらまきかたをコントロールすることで自分の求める理想の配置を作り上げます。

サンプルファイル(monolithtech_scatter.zip 37.0 KB)はこちらです。

DOWNLOAD

ポイントをばらまく

「Scatter」ノードを使います。
Scatterノードは、インプットにジオメトリ(メッシュ)を渡すとその表面上にポイントをランダムに散布してくれるノードです。
【図1】のように、地面などの「配置したいジオメトリ」をインプットに入力するだけでその上に沿うようにポイントがランダムで配置されます【図2】【図3】。

ForceTotalCountパラメータがばらまくポイントの数。
Relax...とかかれている部分で粗密感(均一感)を調整することができます。

tech_33_01.jpg

【図1】ポイントをばらまくノード構成

tech_33_02.jpg tech_33_03.jpg

【左:図2】元のジオメトリ【右:図3】Scatterした後のポイント群

その名のとおり、まさにこのような形で入力された地面の表面に500個のポイントが散布(Scatter)されます。

TIPS:

ポイントは他のソフトでいうとパーティクルのようなものだと考えてもらえるとわかりやすいかもしれません。
(誤解を恐れずに言いますと、Houdiniではポイントとはパーティクルでもあり、頂点(のようなもの)としてもふるまえる万能選手です。)

任意のオブジェクトに差し替える

次に、今回の核となるノード「CopytoPoint」ノードをご紹介します【図4】。

CopytoPointノードは、
第1インプットにコピー配置したいアセット(複数種類OK)
第2インプットに配置ポイント(複数)を与えることで
第1インプットのアセットが第2インプットのポイント上に並ぶ(差し替えるイメージ)というものです。

tech_33_04.jpg

【図4】CopytoPointsノード

実際に見てみたほうがわかりやすいので先ほどのScatterノードを繋いでみたノード図【図5】をご覧ください。

tech_33_05.jpg

【図5】CopytoPointsを含めたノード図

左のtestgeometry_pighead1はデフォルトでインストールされているサンプルの豚です。

これは、Scatterで散布された沢山のポイントの位置に豚を並べる(ポイントと豚を差し替える)という意味になります。

tech_33_06.jpg

【図6】結果。豚が大量に散布されています。

結果はこのようになります。

向きをランダムに

次に向きです。

まず前提として、Houdiniはポイント(※)に自分の好きな情報(Mayaでいうとカスタムアトリビュートのようなもの)を自由に埋め込むことができます。

そして、CopytoPointノードには、第二インプットに入力された各ポイントに埋め込まれた情報を読み取ってその情報を元に結果を自動で反映してくれる機能があります。

例えば第二インプットのポイントが、「N」という名前のベクトル型数値を持っていた場合CopytoPointノードはそれをZ軸の向き(ベクトル)だと認識してくれます。

実際にやってみます。
「Attribute Randomize」ノードを作成します。
これはその名の通り、ランダムなアトリビュートを作成することができる便利ノードです。

tech_33_07.jpg

【図7】Attribute Randomize

AttributeRandomizeを【図7】のように設定します。これはNというアトリビュート名で各ポイント毎にランダムなベクトル型数値を設定するということです。
結果はこのように【図8】なります。

tech_33_08.jpg

【図8】ランダムに回転した豚

TIPS:

(※)正確には、ポイントだけではなくプリミティブ(ポリゴン)、頂点、オブジェクト全体と4種類それぞれに情報を埋め込むことができます。

スケールをランダムに

つぎにスケールです。
スケールも同様に、CopytoPointノードは第二インプットに入力された各ポイントに埋め込まれた情報を読み取って勝手に反映してくれます。

第二インプットのポイントが、「pscale」という名前の数値を持っていた場合、それをスケールと認識します。

実際にやってみます。
「Attribute Randomize」ノードを作成します。

tech_33_09.jpg

【図9】スケールに対するattribute randomize

AttributeRandomizeを【図9】のように設定します。これはpscaleというアトリビュート名で各ポイント毎にランダムな数値を設定するということです。
結果はこのようになります。

tech_33_10.jpg

【図10】スケールランダムされた豚

TIPS:

今回、Nやpscaleをご紹介しましたが、どういったアトリビュート名だとどういった結果が反映されるかはSideFx公式の以下のページが詳しいのでご参照ください。

Houdiniヘルプ、コピーとインスタンスのPointアトリビュート
https://www.sidefx.com/ja/docs/houdini/copy/instanceattrs.html

まとめ

  • CopytoPointでポイントをアセットに差し替えできる
  • Scatterでポイントをジオメトリ表面にばらまける
  • Attribute randomizeノードでランダムなアトリビュートをポイントに埋め込める
  • CopytoPointの第二インプットに入力するポイントアトリビュートで結果が変わる(Nやpscale)

Houdiniはノードを自由自在に組み替えられるため、最初は自分の望む配置や制御を行うのは難しいかもしれません。
いきなり大きな目標をもつのではなく、今回ご説明したデフォルトの「便利ノード」を少しずつ利用するくらいの気持ちで使ってみてください。

執筆者:森田

映像業界を経てモノリスソフトへ入社。 以来、テクニカルアーティストとして主にHoudini関連の業務を担当。 好きなお寿司は鉄火巻き。

ABOUT

モノリスソフト開発スタッフが日々取り組んでいる技術研究やノウハウをご紹介

RECRUIT採用情報