RBDとVellumで揺れつつ折れる木の作り方
Velum Cloth使用時にPin Orientがないせいか葉が全部下向きになってしまう現象を回避したかったがVellum Clothでは回避できない?やり方知ってる人いたら教えてほしい
上記動画ではVellum Hairで回避。ただし説明はClothの方でやります。
hip
Houdini 18.5.672で作成。ベースの木はzip内に含まれています。もちろんシェーダーやHDRIは含まれません。
はじめに
こういうのを仕事でやる場合は、木のデータの仕様を決めること。
今回はSideFX LabsのTree Generatorで作ったものをベースにMayaからデータが来た想定。
下記画像のようなイメージでMaya上で階層(Path)がある想定
全体
幹
枝A
枝B
枝C
枝Cは同じ形状をコピーしているので、後処理でコピーした塊ごとにnameを作り、枝ごと(Connectivityごと)にnameBをつくれるようにする
葉
葉も枝Cと同様にnameとnameBをつくれるようにする
整理後
下記画像のようにname、nameB、後はグループを作る
・pathから邪魔な部分を削除
・グループのベースとname、nameBを作成(実際のデータではlistの部分変更必須)
・グループを作成
・いらないものを削除
Pyro Sim
今回はPyroのvelで動かしているのでPyro Simをする。
この部分は特に特殊なことはなく、velの保存を忘れずに好きなようにシムをする。
Pyro Solver SOPを使ってはいるが、Sparseを使用するとactive領域外のvelが削除されてしまうので、回避するためSparseはオフにしている。
RBD
ここがベースとなるシム。VellumはこのRBDに追従するので、ここが見栄え良く想定した動きになってると後が楽。
Vellumでも外れる処理はできるが、この部分の枝が一番太く目立つのでしっかり枝が外れる処理をするといい。
データ整理
RBDに使用するのはtrunkとbranchAのみ。
・blastはあまりにも小さすぎてRBDできない枝が合ったのでRBDから除外
・pointwrangleは幹の一番下が地面から浮いていたので一定の高さから下はP.yがマイナスになるように調整
・polyfillは穴あきメッシュに蓋をするため
Voronoi分割
今回は処理を流用すること、断面がそれほど目立たない予定だったので、輪切りになるように分割している。
現実では断面が輪切りで折れることはないので、断面が見える場合はもっと細かく割ったほうが良い。
Voronoi 用ポイント作成
各nameB(Connectivity)ごとに、SideFX LabsのStraight Skelton 3Dでメッシュの中心にラインを引いている
それをResampleして使用
Constraint処理
Connect Adjacent Pieces
コンストレインの強さ調整アトリビュート作成
Voronoi用ポイント作成で使ったラインをConnect Adjacent Piecesで無理やり全部つなぐ。
P.yでソート
Edge Transportをする
これで、先端のほうが値が低い(青)アトリビュートが手に入る。
Attribute Remapで0-1におさめて名前をmultにする
Constraintのラインにmultを移し、PrimitiveにPromote
Constraint Properties
作成したmultを使いつつ、コンストレインの設定をする。
velをそのまま使用すると、Glueコンストレインは削除できないので後でフレーム指定で削除している。 なぜ設定しているかというと、Softコンストレインは重いのでPyroの煙が到達するまでのフレームはGlueのみにして計算負荷を下げている。
Convex Decomposition
RBD Sim用のメッシュを作成する
追加のコンストレイン調整
指定の枝が絶対飛んでいってほしいと思ったのでGroupで指定してコンストレインの強さを調整
RBD Configure
Spin MaxとActiveにしない破片を指定している。
Spin Maxを設定しないと枝がぐるんぐるん回転しがち。
ActiveはBoxを使用して一番下のピースだけ動かないようにしている。
RBD Sim
特殊なことはしていないが、コンストレインを保存するための処理が必要。
基本的なRBDのネットワークを組み
20フレームを過ぎたらSoftコンストレインに移行し
angleベースでざっくり削除
Transform Pieces
枝を動かす
同様に、コンストレインも動かす
RBD Deform Pieces
コンストレインを使用して、Deform PiecesでRBDをDeformしたメッシュに変える
この後、RBD Connected Faceと、RBD Disconnecred Faceでさらにデータ整理をしたほうが良いが、重いので省略。