すあまの備忘録

誰得内容の自分のための非営利目的備忘録ブログ(筆者がわかっても内緒にしてください)

Houdiniの破壊を考える RBD Deform Pieces編

Houdini 18からRBD Deform Piecesノードが付きました!

名前を見ただけでわくわくするノードです。

f:id:godofsuama:20200131011511p:plain


Houdini RBD Deform Pieces

が、Sample Sceneを開くと…とりあえずRBD Solverに仕組みが入ってるっぽい

f:id:godofsuama:20200131002341p:plain
Geometry階層

さらにRBD Solver(SOP)を開くと

f:id:godofsuama:20200131002400p:plain
RBD Solver (SOP)内

さらにその中のDOP

f:id:godofsuama:20200131002515p:plain
RBD Solver内のDOP

こんな取り合えずややこしいノードは使いたくないですし、どういうデータを出せば自分で作っているRBDに組み込めるか知りたいわけです。

足りない部分もあるかもしれないけどゼロから組む場合の足掛かりにはなるはずなので調べてみた。

処理的に合っているかわからないところが多いので、ご利用は計画的に!

hip fileはこちら(Houdini 18.0.348)

ネットワーク全体

f:id:godofsuama:20200131024939p:plain
Geometry階層

f:id:godofsuama:20200131003203p:plain
DOP内

だいぶシンプルになりました?

Constraint Geometry作成

f:id:godofsuama:20200131003426p:plain
Connect Adjacent Pieces

Connect Adjacent PiecesでConstraint Geometryを作成しています。

この際に、Connection TypeがAdjacent Pieces from Pointsでないとぐちゃっとなってしまいうまく動きませんでした。

Pieceの中心点でコンストレインを作るのでDeformにはよくないんだと思います。

Constraint Attributes作成

f:id:godofsuama:20200131003823p:plain
RBD Constraint Properties

RBD Constraint Propertiesで作成。

Glueののち、Softコンストレインに移行し、Softコンストレイン部分がDeformするイメージです。

SampleはSoft ConstraintのPlasticityも使っていましたが、今回はシンプルにするために使用していません。

f:id:godofsuama:20200131004009p:plain
Plasticity

DOP Networkを作成

f:id:godofsuama:20200131003203p:plain

よくありがちなRBDのDOP Networkです。

現状わかっている注意点があり

  • Constraint Networkノードの設定を変える
  • SOP SolverのData Nameを変更する
  • Rigid Body Solverを使用したほうが楽

最初に、Constraint NetwiorkノードのAttach Internal Constraints to Objectにチェックを入れます。 f:id:godofsuama:20200131004517p:plain

この状態のConstraint Networkの第三入力にSOP Solverを繋いでもコンストレインを切ることができないため、

Rigid Body SolverのPost-SolveにSOP Solverを接続してコンストレインを削除する処理を行います。

最後に、繋いだSOP SolverのData NameをConstraintGeometryに変更します。 f:id:godofsuama:20200131025340p:plain

後は普通のRBD用DOP Networkでも動きました。

SOP上の処理

f:id:godofsuama:20200131025159p:plain

DOP Networkから、シミュレーションしたGeometry (Point)と、Constraint Networkを外に出す必要があります。

Geometryを取り出す

f:id:godofsuama:20200131005124p:plain
DOP Import
今回は画像のような設定でGeometryを取り出しています。

Geometryは取り出せさえすれば他の方法でも問題ないですし、以下のようなPointのみの保存でも大丈夫 f:id:godofsuama:20200131005306p:plain

Constraintを取り出す

f:id:godofsuama:20200131025645p:plain

大体、Geometryと一緒ですが、

Geometry Data PathにConstraintGeometryと入力します。この名前はDOPで変更したConstraint Networkが勝手につける名前なので固定です。

その後、ここの処理は考え直さないと非常にまずいですが、

不要なPointがあるので@angle==0で削除し、FacetのRemove Degenerateも使用して消します。

さらにTransform Piecesで動いていないConstraint Geometryを動かします。

Cacheを取る

GeometryとConstraintの両方をキャッシュに入れて後で分離するためにGroupを作成し、Cacheを取ります。

この辺は、RBD Packでキャッシュして、RBD Unpackをするか、RBD I/Oノードを使用してキャッシュするほうがスマートかもしれません。 f:id:godofsuama:20200131010344p:plain

RBD Deform Piecesを使う

f:id:godofsuama:20200131010929p:plain

Splitで先ほどキャッシュしたGeoemtryとConstraintを分離し、RBD Deform Piecesに接続します。

RBD Deform Piecesは以下のような設定です。

Boundary ConnectionをConstraintsにしています。 f:id:godofsuama:20200131011044p:plain

  • 第一入力にはデフォームさせたいGeometry (ハイポリとか)
  • 第二入力にConstraint Geometry
  • 第三入力にシムに使ったGeometry

を繋ぎます。

Pointのみでキャッシュを取っている場合は、Transform Piecesをしたのち、第三入力につなぐ必要があります。

エラーっぽいやつ

f:id:godofsuama:20200131030104p:plain 画像のようなねじれたうにょうにょができることがあります。

f:id:godofsuama:20200131030144p:plain
赤い線がコンストレイン
コンストレインで繋がったままなために起きている現象のようなので

コンストレインをちゃんと切ってあげると改善されます。

Plasticityにチェックを入れているのはこの辺の理由もありそう。