すあまの備忘録

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

RBDとVellumでTree Sim その2

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

その1からの続き。シーンファイルと完成ムービーはその1にあります。

その2はVellum Hairでの枝シム

はじめに

枝は2回に分けてシムしています。

画像左側が、BranchB(枝のみ)、右がBranchC(この後葉がつく)です。

f:id:godofsuama:20210923022605p:plain

ほぼ仕組みは同じです。葉をくっつける際のエラー軽減で分けています。特に分けるの必須ではないです。

見ているとわかりますが、各工程は同士はコリジョンしていません。

全てのVellum solver内でPOP Advect by Volumeでbelを読み込んでいます。

BranchB

Vellum Hair用の整理

f:id:godofsuama:20210923010215p:plain

事前に作成したnameBでForを回します。当然ですが可能な場合必ずCompile Blockでまとめます。特に枝や葉は数が多いのでCompile Blockが効果を発揮します。

For-Eachの中

一度ラインに変換します。 f:id:godofsuama:20210923010425p:plain

Fuseで1本にします。(後述しますが、この際に長さの違いが激しい場合は事前に分岐しましょう)

当然、この際のラインのポイント数は元のメッシュの節の数を超えない様にします。

f:id:godofsuama:20210923010506p:plain

念の為Poly Pathで接続 f:id:godofsuama:20210923010604p:plain

Attributeが消えてしまうので再転送し、一部Promote f:id:godofsuama:20210923010653p:plain

f:id:godofsuama:20210923010708p:plain

Forのあと

Resampleでcurveuを作成し、curveu==0をグループにします。

f:id:godofsuama:20210923010848p:plain

枝の作りによっては0じゃない場合などもありますが、下記画像のようにRBDの枝と接するポイントのグループが作れればOK

f:id:godofsuama:20210923011002p:plain

作成したグループを指定したRayでRBDの枝のnameを取得 f:id:godofsuama:20210923011216p:plain

Connectivityでclassを作成 f:id:godofsuama:20210923011425p:plain

作成したclassごとにRayで取得した近接するRBDのnameをPromote

複数にならないように、念の為一度DetailにPromoteしてからPointにPromoteします。

f:id:godofsuama:20210923011502p:plain

Transform PiecesでRBDと同じ動きをさせる

Promoteしたnameがあるので、Rayで取得した際の枝の根本に一番近いピースに追従します。 f:id:godofsuama:20210923011757p:plain

Vellum Hairの設定

あまり詳しくはないですがこんな設定。赤枠部分は必須の設定です。

Setup

Pin to AnimationはPin Pointsにグループorポイントを指定し、Match Animationのオンにすることでそのポイントが元のアニメーションを継承するようになります。

つまり、先程RBDと同じ動きをさせたのをVellumのシムへ継承することができます。

この枝をさらに分離させたい場合はPin TypeをSoftにします。その後Breakingで設定することで分離させることができます。

※このとき気づかなかったんですが、このままだとPrimitiveが全部ばらばらになることがあります。回避は葉の部分で追記

f:id:godofsuama:20210923011928p:plain

f:id:godofsuama:20210923012219p:plain

Solver

Stiffinessが高い(硬い)ものはSubstepsを上げないとそう見えません。シム時間が許す限り上げましょう。

f:id:godofsuama:20210923012507p:plain

シム後

nameBを使用して、ラインに変換する前の枝をPoint Deformで動かします。 f:id:godofsuama:20210923012647p:plain

Radiusはシビアな場合があるので微調整します。 f:id:godofsuama:20210923012741p:plain


BranchC

Vellum Hair用の整理

ほぼBranchBと同じですが、長さの差がありすぎたので長さベースで値違いを分岐しています。

後は数が多いのでそれぞれ一度キャッシュしています。

f:id:godofsuama:20210923022643p:plain

Forのあと

ここはだいぶ違います。先程は1本がRBDの枝にそれぞれくっついていたのに対し、これは1本から複数枝があるものがくっついているためです。

f:id:godofsuama:20210923013229p:plain

f:id:godofsuama:20210923013311p:plain

For-Eachの向かって右側

高めの値のFuseで全部のポイントをつなぎ、Edge Transportでdistanceを計算します。

この値を使用して、Vellum HairのDensityを調整します。そうしないと枝がおもすぎて垂れ下がってしまいます。

f:id:godofsuama:20210923023011p:plain

f:id:godofsuama:20210923022955p:plain

distanceの値ベースでポイントをSortします。

f:id:godofsuama:20210923023134p:plain

SortしているのでPoint番号0をグループにします。

f:id:godofsuama:20210923023208p:plain

For-Eachの向かって左側

curveu==0をグループにし、

Rayで右側で計算したdistanceを取得します。

f:id:godofsuama:20210923023350p:plain

distanceのMaxをPromoteし、Remapします。

f:id:godofsuama:20210923023418p:plain

f:id:godofsuama:20210923023438p:plain

右側で作成したグループも転送します。

f:id:godofsuama:20210923023517p:plain

RBDでnameを使用しているのでpieceに名前を変えます。

f:id:godofsuama:20210923023626p:plain

BranchBと同じように根本のポイントから一番近いRBDのピース名を取得します。

f:id:godofsuama:20210923023719p:plain

BranchBと同じようにnameをPromoteします。

f:id:godofsuama:20210923023814p:plain

Transform PiecesでRBDと同じ動きをさせる

Promoteしたnameがあるので、Rayで取得した際の枝の根本に一番近いピースに追従します。

f:id:godofsuama:20210923023928p:plain

Vellum Hairの設定
Setup

BranchBとほぼ同じで、違いはMassとThicknessをdistanceアトリビュートで調整しているところ

f:id:godofsuama:20210923024103p:plain

Solver

ほぼ同じ

シム後

やっていることは同じ。

重かったのでPoint DeformをCaptureとDeformに分けて使っています。


Leaf(Cloth)

f:id:godofsuama:20210923024531p:plain

Vellum Hair用の整理

Point番号を指定してグループを作成

f:id:godofsuama:20210923024625p:plain

グループを指定してRayでBranchCとの最近接のclassを取得

f:id:godofsuama:20210923024818p:plain

classをPromoteします。

f:id:godofsuama:20210923030140p:plain

pieceをnameにリネームし、AssembleでPackします。

f:id:godofsuama:20210923030256p:plain

Transform PiecesでBranchCと同じ動きをさせる

f:id:godofsuama:20210923030344p:plain

Unpackして不要なアトリビュートを削除

f:id:godofsuama:20210923030448p:plain

Vellum Clothの設定
Setup

Pin to Animationの設定をし、

f:id:godofsuama:20210923030710p:plain

Attach to GeometryのVellum Constraintを作成して分離できるように設定します。(後からこれじゃなくても行けたかなと思いました)

f:id:godofsuama:20210923030811p:plain

Solver

Self Collisionsはオフです。重すぎるのとあまり見た目が良くならなかったので。

f:id:godofsuama:20210923030943p:plain

Leaf(Hair)

Clothだと、シム開始時に重力で葉が下がってしまって向きを維持できなかったのでhairのパターンも作成。

こちらのほうがシム前の木に近い状態を維持できるが、シム時間が倍になった。

Leaf(Cloth)の場合の途中から分岐して処理を追加する。

追加処理

classをPromoteする前に、Convert Lineで葉のメッシュをラインに変換

f:id:godofsuama:20210923033316p:plainf:id:godofsuama:20210923033316p:plain

その後の処理は同じで、

Vellum Hairの設定

f:id:godofsuama:20210923033605p:plain

Setup

f:id:godofsuama:20210923033534p:plain

Velum HairのBreakingを使用すると葉を構成している全ラインが分離してしまうのでHairではBreakingの設定をせずにVelum Constraint Propertyで別途設定する。

PinとPin Orientのコンストレイン(枝にくっつける処理)の場合だけBreakingできるようにする。

f:id:godofsuama:20210923033833p:plain

Solver

Solverは特に変更なし。

シム後

やっていることは同じ。

重かったのでPoint DeformをCaptureとDeformに分けて使っています。