コンテンツにスキップ

Houdini 写経 01 RBD_ClueConstraint

Houdini ビジュアルエフェクトの教科書の内容を写経しながら Houdini のノードの挙動などを調べていきます。
基本的な手順は本に書いてあるので省いてます。
自分が気になった所をメモ。

完成図はこんな感じで、地面に落下すると割れるようにします。

モデルを割る

まず、シミュレーションをする前に
モデルを  voronoifracture を使用して割ります。

ネットワークはこんな感じ。
基本本の通りに組んであります。

メッシュからヴォロノイ用のポイントを作り(scatter)、出力する...と言う流れ。
メインの部分は OK として初心者的にものすごい疑問になったのが

なんで最後 Null に刺してるんだろう?

これ以外のモデルをなにかしているもの(出力したりなにかしたりする場合の最後のノード)
は最後が Null。
なんでだろう?

https://www.sidefx.com/forum/topic/45602/?page=1#post-203566

調べたらありました。
超意訳ですが、明示的に「これがおわりの部分ですよ」「ここからはなにもしてないよ」
という目印だったり、なにかしらの動作をフックさせるためのアンカーとして
慣例になっているぽいですね。

別のオブジェクト内で別のノードのアウトプットを使いたい時など
Null で出力させたい部分を指定しておいて、
ObjectMerge で Null を指定させるような使い方をするようです。
なるほど。

シミュレーションをする

まず、衝突用の地面を作成します。
Collisions -> Ground Plane を作成します。
そして、

RBD Glued Objects をクリックします。
RBD は「Rigid Body Dynamic」の略です。

実行すると、Geometry オブジェクトノード内の Null 以下に

こんな感じで自動でノードが追加されます。

RestPositionSOP とは、デフォルトの位置を記録したもの。
Assemble は、オブジェクトをパーツ分けしているノード。
DOPImport が、シミュレーションにモデルを引き渡している?はず、です。

AutoDopNetwork

そして、シミュレーションの本体になっているのが AutoDopNetwork オブジェクト。

中身はこんな感じ。

大きく分けると、左側がシミュレーションをしている構造で
右側の Glue というのが、地面に衝突してもモデルを全部割らずに接着したままにしてくれる
GlueConstraint の設定部分になります。

RigidBody シミュレーション

RPDPackedObject

まず、RigidBody でシミュレーションするモデルは RPDPackedObject で取得する。

アトリビュートを確認してみると「SOP Path」が、↑ で指定した DOPImport ノードになっています。
Help を見ると

Creates a single DOP object from SOP Geometry that represents a number of RBD Objects.

SOP ジオメトリから DOP 用のオブジェクトを生成しているノードが RBDPackedObject。

solver

次がソルバ。
毎フレームなにかしらの計算を行うノード。
ヴォロノイで割ったモデルに対して RigidBody の計算を付加しているのが「RigidBodySolver」
RigidBody 以外にも StaticSolver と SOPSolver があるのだが
どちらもこの部分でシミュレーションをしている形かな。

Merge

Merge は、複数のジオメトリを1つにまとめる機能をもっている。
と、Help には書いてるのですが
このサンプルの場合地面と破壊モデルを Merge しているので
Maya のモデルを結合するというよりも、個別のシーンだったものを1つに取りまとめる
的なニュアンスなのだと思います。

Glue Constraint

GlueConstraint は、ヴォロノイで分割しているモデルをある一定の衝撃が加わらない限り
くっつけておく事が出来るコンストレイン。
設定本体は「Glue Constraint RelationShip」ノードで、ここでどのぐらいの衝撃まで
結合しておくか等を指定することができる。

Constraint Network

これは GlueConstraint にかぎらず、RBD 内でコンストレインを使用する場合に使用するノード。

Constraint Network 内で SOPPath を指定していて、そのよみさきは
Geometry 側で新しく追加された CONTRAINTS の Null。

この CONSTRINTS はこうなっていて、Geometry 同士の結線情報?のようになっている。
その後に Attribute が追加されているのは、Glue コンストレインを行うのに必須のパラメーターを追加している。

まとめメモ

Houdini のネットワークは、子に行くにつれて徐々にノードの効果を付加している。
複数の系統があっても、出力は 1 つ。
系統をまとめているのが Merge。

参考