すあまの備忘録

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

破壊(RBD)の流れメモ vol.1 データ整理

今更だけどH18で変わったRBD周りをなるべく使ってのテストとメモ

今回はネットワークが広大なので全部は記事にできなそう。なので最後の回にはhipをアップしますが整理はできないです。

やはりレンダリングまでいくとモチベーションがだいぶ上がる。

完成品は以下の動画


Houdini DestructionTest

はじめに

破壊モデルはREBELWAYで配布されているモデルを使用。

このシリーズの記事は↑のモデルを使用するので同じ状態になっているはずです。

紹介する手法は常にあらゆるパターンで可能なのを保証するわけではありません。


法線反転の混在

画像のような法線反転が混じっている場合。

f:id:godofsuama:20201019212302p:plain

穴を塞ぐ

まず穴が空いていないかをチェックして、「PolyFill」等で塞ぐ。

f:id:godofsuama:20201019212555p:plain
塞ぐ前

f:id:godofsuama:20201019212623p:plain
塞ぎ後

Connectivityでピースごと選べるようにする

ここはAssemble(Packはしない)でも可能。

f:id:godofsuama:20201019212749p:plain

Volumeを測る

「Measure」ノードで各Class(name)ごとにVolumeを測る。

f:id:godofsuama:20201019212919p:plain

f:id:godofsuama:20201019213122p:plain

色に惑わされないように注意。

法線反転する

「Reverse」ノードを以下の設定で法線反転する。

f:id:godofsuama:20201019213202p:plain

f:id:godofsuama:20201019213219p:plain


近接フェースの削除

f:id:godofsuama:20201019213511p:plain

パット見問題なさそう、でAssembleでも1個しか生成されない。

が、近寄ると中に謎のフェースがある。

f:id:godofsuama:20201019213603p:plain

一度Fuseする

f:id:godofsuama:20201019213643p:plain

範囲を見てちょっと高めの結合範囲に。

押し出す

ExtrudeしないExtrudeをする。Output FaceもBackのみ。

f:id:godofsuama:20201019213823p:plain

再度Fuse

2回目はちょっと低めの値

f:id:godofsuama:20201019213901p:plain

念の為Clean

CleanのFix Overlapsをチェックし、念の為かけておく。

今回はCleanに意味ないが、場合に寄ってはCleanのみでいけたりもする。

f:id:godofsuama:20201019214031p:plain

f:id:godofsuama:20201019214132p:plain


小さい破片の削除

スケール感を出すために必要な場合もあるが、小さすぎるとRBDがおかしくなることがあるので予期せずできてしまった場合の回避方法

ざっくりいうとできてしまった小さい破片はシムへの影響は少ないとみて削除していく方向です。

f:id:godofsuama:20201025185558p:plain

f:id:godofsuama:20201025190007p:plain

表面積を出す

Measureのareaで面積を出し、破片ごとにsumでPromoteして表面積をareaアトリビュートにします。

f:id:godofsuama:20201025185630p:plain

f:id:godofsuama:20201025185707p:plain

小さい破片と大きい破片を分ける

画像はSplitノードで分けた例。どの方法でもいいのでareaを閾値にして分けます。

大きいものを含ませすぎると当然ならがRBDのシムがおかしくなります。

f:id:godofsuama:20201025185820p:plain

f:id:godofsuama:20201025185912p:plain

小さい破片にアトリビュートを追加

このアトリビュートを頼りに削除するので判別できればんでも良い

f:id:godofsuama:20201025190034p:plain

小さい破片に大きい破片のnameを転送

rayで最近接へ転送します。この段階だとPointアトリビュートなので、Primitiveへfirst matchでPromoteします。

f:id:godofsuama:20201025190151p:plain

f:id:godofsuama:20201025190244p:plain

処理した小さい破片と分岐させた大きい破片をMerge

ここからConvex Decompositionはかけません。凸形状がおかしくなります。

Convex Decompositionを使用する場合は分岐した大きな破片にのみかけます。

f:id:godofsuama:20201025190413p:plain

Proxy Geometryの処理

小さい破片に設定した削除用アトリビュートを転送し、それをもとに削除します。

f:id:godofsuama:20201025190701p:plain

f:id:godofsuama:20201025190728p:plain


不正なメッシュ

色々パターンがあるが以下のような適切な割がはいっていないやつ。

RBD Material Fractureや、Boolean等でうまく割れない原因にもなるので先に直しておく。

f:id:godofsuama:20201019214452p:plain

直せるならMayaやBlender等で直したほうが早いっちゃはやい。

直し方1

「Divide」で三角形を生成する。Divideのほうだと分割時に不正が出やすい気はする。

こういう場合はBricker Polygonsは使用しない。また不正な面ができてしまう。

f:id:godofsuama:20201019214559p:plain

f:id:godofsuama:20201019221134p:plain

直し方2

「Remesh」で整理

あまり細かく割りすぎないことと、Hard Edgeをキープすること。

f:id:godofsuama:20201019215408p:plain
Hard Edgeキープあり

f:id:godofsuama:20201019215340p:plain
Hard Edgeキープなし

混在している場合はグループを作ろう。

作り方は以下のガタケさんのツイートが良かった。


複数の同じメッシュ

整理とは少しずれるが、場合によっては使える手法これを見越して整理するというのもあり。

以下のように同じ形状のメッシュが大量に配置されている場合(窓ガラスとかも)

f:id:godofsuama:20201019221822p:plain

配置の向きを取得する

N(とup)を取得して配置情報を取得する。

以下はBoundのNormalで向きを取得しているパターン

f:id:godofsuama:20201019222422p:plain
bboxを生成

f:id:godofsuama:20201019222456p:plain
Normalを設定し不要な面を削除

f:id:godofsuama:20201019222540p:plain
RayでbboxのNを転送

1つを取り出す

今回は4方向綺麗に向いていたので@N.z==1で取り出した。

f:id:godofsuama:20201019222719p:plain

原点に戻す

「Match Size」を使用し、原点に戻す。場合によってはスケールを戻しても良いかもしれない。

f:id:godofsuama:20201019222822p:plain

f:id:godofsuama:20201019222840p:plain

法線を再設定

転送したNで法線がおかしいので再設定する

f:id:godofsuama:20201019222923p:plain

分割する

RBD Material FractureやVoronoi等で分割したりUVを作成したりする。

f:id:godofsuama:20201019223042p:plain

Packする

「RBD Configure」と「RBD Pack」を使用しPackする。半自動の場合は両方必要なので注意すること。

f:id:godofsuama:20201019223219p:plain

配置用のポイントを作成する

もともと配置されていた場合はNupを作成し、Assemble等でPackし1点にする。

f:id:godofsuama:20201019223515p:plain

Copy to Pointsで配置

「Copy to Points」のPack and Instanceにはチェックを入れる。

f:id:godofsuama:20201019223703p:plain

f:id:godofsuama:20201019223736p:plain

f:id:godofsuama:20201019223834p:plain

シムする前の処理

「Unpack」、「RBD Unpack」を使用する。

RBD UnpackのEnforce Unique Name Attribute per Instanceにチェックを入れる。

チェックがあると自動的にインスタンスごとにnameの後ろに-インスタンス番号がつく。

f:id:godofsuama:20201019224403p:plain

f:id:godofsuama:20201019224423p:plain

f:id:godofsuama:20201019224545p:plain

注意

一回使えばわかるが、SOPのRBD Bullet Solver以外だとちょっと使いづらい。

なぜかというと、このままだと異なるオブジェクト間のコンストレイントを生成できる「RBD Constraint from Rules」がエラーで使えない。

原因はメッシュがPackされているせいなのでメッシュを一度Unpackし、nameをプロモートする必要がある。

手間がかかるというのもあるが、一度PackしたものをUnpackする処理は、ピースが増えると激重になってしまうためあまりやりたくないというのが本音。

流れでハイメッシュがいらない場合はProxyだけを第一と第三につなぐのもあり。

f:id:godofsuama:20201019225320p:plain

f:id:godofsuama:20201019225335p:plain

f:id:godofsuama:20201019225349p:plain