すあまの備忘録

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

RBDとVellumでTree Sim その1

RBDとVellumで揺れつつ折れる木の作り方

f:id:godofsuama:20210923035038p:plain

youtu.be

Velum Cloth使用時にPin Orientがないせいか葉が全部下向きになってしまう現象を回避したかったがVellum Clothでは回避できない?やり方知ってる人いたら教えてほしい

上記動画ではVellum Hairで回避。ただし説明はClothの方でやります。

hip

Houdini 18.5.672で作成。ベースの木はzip内に含まれています。もちろんシェーダーやHDRIは含まれません。

treeBreak.zip - Google ドライブ

はじめに

こういうのを仕事でやる場合は、木のデータの仕様を決めること。

今回はSideFX LabsのTree Generatorで作ったものをベースにMayaからデータが来た想定。

f:id:godofsuama:20210922122240p:plain

下記画像のようなイメージでMaya上で階層(Path)がある想定

f:id:godofsuama:20210922122851p:plain

全体

f:id:godofsuama:20210922122954p:plain

f:id:godofsuama:20210922123018p:plain

枝A

f:id:godofsuama:20210922123200p:plain
枝Aメイン

f:id:godofsuama:20210922123233p:plain
枝Aサブ

枝B

f:id:godofsuama:20210922123110p:plain

枝C

f:id:godofsuama:20210922123507p:plain

枝Cは同じ形状をコピーしているので、後処理でコピーした塊ごとにnameを作り、枝ごと(Connectivityごと)にnameBをつくれるようにする

f:id:godofsuama:20210922123633p:plain

f:id:godofsuama:20210922123711p:plain

葉も枝Cと同様にnameとnameBをつくれるようにする

f:id:godofsuama:20210922123809p:plain


整理後

下記画像のようにname、nameB、後はグループを作る

f:id:godofsuama:20210922125411p:plain

・pathから邪魔な部分を削除 f:id:godofsuama:20210922125530p:plain

・グループのベースとname、nameBを作成(実際のデータではlistの部分変更必須) f:id:godofsuama:20210922125608p:plain

・グループを作成 f:id:godofsuama:20210922125654p:plain

・いらないものを削除 f:id:godofsuama:20210922125714p:plain


Pyro Sim

今回はPyroのvelで動かしているのでPyro Simをする。

この部分は特に特殊なことはなく、velの保存を忘れずに好きなようにシムをする。

Pyro Solver SOPを使ってはいるが、Sparseを使用するとactive領域外のvelが削除されてしまうので、回避するためSparseはオフにしている。

f:id:godofsuama:20210922124137p:plain

f:id:godofsuama:20210922123953p:plain


RBD

ここがベースとなるシム。VellumはこのRBDに追従するので、ここが見栄え良く想定した動きになってると後が楽。

Vellumでも外れる処理はできるが、この部分の枝が一番太く目立つのでしっかり枝が外れる処理をするといい。

f:id:godofsuama:20210922125035p:plain

データ整理

RBDに使用するのはtrunkとbranchAのみ。

f:id:godofsuama:20210922125856p:plain

f:id:godofsuama:20210922125919p:plain

・blastはあまりにも小さすぎてRBDできない枝が合ったのでRBDから除外

・pointwrangleは幹の一番下が地面から浮いていたので一定の高さから下はP.yがマイナスになるように調整 f:id:godofsuama:20210922130049p:plain

・polyfillは穴あきメッシュに蓋をするため

Voronoi分割

f:id:godofsuama:20210922130218p:plain

今回は処理を流用すること、断面がそれほど目立たない予定だったので、輪切りになるように分割している。

現実では断面が輪切りで折れることはないので、断面が見える場合はもっと細かく割ったほうが良い。

f:id:godofsuama:20210922130453p:plain

Voronoi 用ポイント作成

各nameB(Connectivity)ごとに、SideFX LabsのStraight Skelton 3Dでメッシュの中心にラインを引いている

それをResampleして使用

f:id:godofsuama:20210922130643p:plain f:id:godofsuama:20210922130710p:plain

Constraint処理

f:id:godofsuama:20210922130817p:plain

Connect Adjacent Pieces

f:id:godofsuama:20210922130907p:plain f:id:godofsuama:20210922130917p:plain

コンストレインの強さ調整アトリビュート作成

Voronoi用ポイント作成で使ったラインをConnect Adjacent Piecesで無理やり全部つなぐ。 f:id:godofsuama:20210922131053p:plain

P.yでソート f:id:godofsuama:20210922131129p:plain

Edge Transportをする f:id:godofsuama:20210922131425p:plain

これで、先端のほうが値が低い(青)アトリビュートが手に入る。 f:id:godofsuama:20210922131410p:plain

Attribute Remapで0-1におさめて名前をmultにする f:id:godofsuama:20210922131551p:plain

Constraintのラインにmultを移し、PrimitiveにPromote f:id:godofsuama:20210922131716p:plain

Constraint Properties

作成したmultを使いつつ、コンストレインの設定をする。

f:id:godofsuama:20210922131951p:plain

velをそのまま使用すると、Glueコンストレインは削除できないので後でフレーム指定で削除している。 なぜ設定しているかというと、Softコンストレインは重いのでPyroの煙が到達するまでのフレームはGlueのみにして計算負荷を下げている。

Convex Decomposition

RBD Sim用のメッシュを作成する f:id:godofsuama:20210922131831p:plain

追加のコンストレイン調整

指定の枝が絶対飛んでいってほしいと思ったのでGroupで指定してコンストレインの強さを調整

f:id:godofsuama:20210922132314p:plain

f:id:godofsuama:20210922132335p:plain

f:id:godofsuama:20210922132352p:plain

RBD Configure

Spin MaxとActiveにしない破片を指定している。

f:id:godofsuama:20210922132508p:plain

Spin Maxを設定しないと枝がぐるんぐるん回転しがち。

ActiveはBoxを使用して一番下のピースだけ動かないようにしている。 f:id:godofsuama:20210922132558p:plain

RBD Sim

f:id:godofsuama:20210922132723p:plain

特殊なことはしていないが、コンストレインを保存するための処理が必要。

godofsuama.hatenablog.com

基本的なRBDのネットワークを組み f:id:godofsuama:20210922132828p:plain

20フレームを過ぎたらSoftコンストレインに移行し f:id:godofsuama:20210922132929p:plain

angleベースでざっくり削除 f:id:godofsuama:20210922133017p:plain

Transform Pieces

枝を動かす f:id:godofsuama:20210922133151p:plain

同様に、コンストレインも動かす f:id:godofsuama:20210922133244p:plain

RBD Deform Pieces

コンストレインを使用して、Deform PiecesでRBDをDeformしたメッシュに変える

f:id:godofsuama:20210922133508p:plain

f:id:godofsuama:20210922133411p:plain
RBDのまま

f:id:godofsuama:20210922133431p:plain
Deform処理あり

この後、RBD Connected Faceと、RBD Disconnecred Faceでさらにデータ整理をしたほうが良いが、重いので省略。