Houdini 18からRBD Deform Piecesノードが付きました!
名前を見ただけでわくわくするノードです。
が、Sample Sceneを開くと…とりあえずRBD Solverに仕組みが入ってるっぽい
さらにRBD Solver(SOP)を開くと
さらにその中のDOP
こんな取り合えずややこしいノードは使いたくないですし、どういうデータを出せば自分で作っているRBDに組み込めるか知りたいわけです。
足りない部分もあるかもしれないけどゼロから組む場合の足掛かりにはなるはずなので調べてみた。
処理的に合っているかわからないところが多いので、ご利用は計画的に!
hip fileはこちら(Houdini 18.0.348)
ネットワーク全体
だいぶシンプルになりました?
Constraint Geometry作成
Connect Adjacent PiecesでConstraint Geometryを作成しています。
この際に、Connection TypeがAdjacent Pieces from Pointsでないとぐちゃっとなってしまいうまく動きませんでした。
Pieceの中心点でコンストレインを作るのでDeformにはよくないんだと思います。
Constraint Attributes作成
RBD Constraint Propertiesで作成。
Glueののち、Softコンストレインに移行し、Softコンストレイン部分がDeformするイメージです。
SampleはSoft ConstraintのPlasticityも使っていましたが、今回はシンプルにするために使用していません。
DOP Networkを作成
よくありがちなRBDのDOP Networkです。
現状わかっている注意点があり
- Constraint Networkノードの設定を変える
- SOP SolverのData Nameを変更する
- Rigid Body Solverを使用したほうが楽
最初に、Constraint NetwiorkノードのAttach Internal Constraints to Object
にチェックを入れます。
この状態のConstraint Networkの第三入力にSOP Solverを繋いでもコンストレインを切ることができないため、
Rigid Body SolverのPost-SolveにSOP Solverを接続してコンストレインを削除する処理を行います。
最後に、繋いだSOP SolverのData NameをConstraintGeometry
に変更します。
後は普通のRBD用DOP Networkでも動きました。
SOP上の処理
DOP Networkから、シミュレーションしたGeometry (Point)と、Constraint Networkを外に出す必要があります。
Geometryを取り出す
今回は画像のような設定でGeometryを取り出しています。
Geometryは取り出せさえすれば他の方法でも問題ないですし、以下のようなPointのみの保存でも大丈夫
Constraintを取り出す
大体、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ノードを使用してキャッシュするほうがスマートかもしれません。
RBD Deform Piecesを使う
Splitで先ほどキャッシュしたGeoemtryとConstraintを分離し、RBD Deform Piecesに接続します。
RBD Deform Piecesは以下のような設定です。
Boundary Connection
をConstraintsにしています。
- 第一入力にはデフォームさせたいGeometry (ハイポリとか)
- 第二入力にConstraint Geometry
- 第三入力にシムに使ったGeometry
を繋ぎます。
Pointのみでキャッシュを取っている場合は、Transform Piecesをしたのち、第三入力につなぐ必要があります。
エラーっぽいやつ
画像のようなねじれたうにょうにょができることがあります。
コンストレインで繋がったままなために起きている現象のようなので
コンストレインをちゃんと切ってあげると改善されます。
Plasticityにチェックを入れているのはこの辺の理由もありそう。