RBDとVellumで揺れつつ折れる木の作り方、その2
その1からの続き。シーンファイルと完成ムービーはその1にあります。
その2はVellum Hairでの枝シム
はじめに
枝は2回に分けてシムしています。
画像左側が、BranchB(枝のみ)、右がBranchC(この後葉がつく)です。
ほぼ仕組みは同じです。葉をくっつける際のエラー軽減で分けています。特に分けるの必須ではないです。
見ているとわかりますが、各工程は同士はコリジョンしていません。
全てのVellum solver内でPOP Advect by Volumeでbelを読み込んでいます。
BranchB
Vellum Hair用の整理
事前に作成したnameBでForを回します。当然ですが可能な場合必ずCompile Blockでまとめます。特に枝や葉は数が多いのでCompile Blockが効果を発揮します。
For-Eachの中
一度ラインに変換します。
Fuseで1本にします。(後述しますが、この際に長さの違いが激しい場合は事前に分岐しましょう)
当然、この際のラインのポイント数は元のメッシュの節の数を超えない様にします。
念の為Poly Pathで接続
Attributeが消えてしまうので再転送し、一部Promote
Forのあと
Resampleでcurveuを作成し、curveu==0をグループにします。
枝の作りによっては0じゃない場合などもありますが、下記画像のようにRBDの枝と接するポイントのグループが作れればOK
作成したグループを指定したRayでRBDの枝のnameを取得
Connectivityでclassを作成
作成したclassごとにRayで取得した近接するRBDのnameをPromote
複数にならないように、念の為一度DetailにPromoteしてからPointにPromoteします。
Transform PiecesでRBDと同じ動きをさせる
Promoteしたnameがあるので、Rayで取得した際の枝の根本に一番近いピースに追従します。
Vellum Hairの設定
あまり詳しくはないですがこんな設定。赤枠部分は必須の設定です。
Setup
Pin to AnimationはPin Pointsにグループorポイントを指定し、Match Animationのオンにすることでそのポイントが元のアニメーションを継承するようになります。
つまり、先程RBDと同じ動きをさせたのをVellumのシムへ継承することができます。
この枝をさらに分離させたい場合はPin TypeをSoftにします。その後Breakingで設定することで分離させることができます。
※このとき気づかなかったんですが、このままだとPrimitiveが全部ばらばらになることがあります。回避は葉の部分で追記
Solver
Stiffinessが高い(硬い)ものはSubstepsを上げないとそう見えません。シム時間が許す限り上げましょう。
シム後
nameBを使用して、ラインに変換する前の枝をPoint Deformで動かします。
Radiusはシビアな場合があるので微調整します。
BranchC
Vellum Hair用の整理
ほぼBranchBと同じですが、長さの差がありすぎたので長さベースで値違いを分岐しています。
後は数が多いのでそれぞれ一度キャッシュしています。
Forのあと
ここはだいぶ違います。先程は1本がRBDの枝にそれぞれくっついていたのに対し、これは1本から複数枝があるものがくっついているためです。
For-Eachの向かって右側
高めの値のFuseで全部のポイントをつなぎ、Edge Transportでdistanceを計算します。
この値を使用して、Vellum HairのDensityを調整します。そうしないと枝がおもすぎて垂れ下がってしまいます。
distanceの値ベースでポイントをSortします。
SortしているのでPoint番号0をグループにします。
For-Eachの向かって左側
curveu==0をグループにし、
Rayで右側で計算したdistanceを取得します。
distanceのMaxをPromoteし、Remapします。
右側で作成したグループも転送します。
RBDでnameを使用しているのでpieceに名前を変えます。
BranchBと同じように根本のポイントから一番近いRBDのピース名を取得します。
BranchBと同じようにnameをPromoteします。
Transform PiecesでRBDと同じ動きをさせる
Promoteしたnameがあるので、Rayで取得した際の枝の根本に一番近いピースに追従します。
Vellum Hairの設定
Setup
BranchBとほぼ同じで、違いはMassとThicknessをdistanceアトリビュートで調整しているところ
Solver
ほぼ同じ
シム後
やっていることは同じ。
重かったのでPoint DeformをCaptureとDeformに分けて使っています。
Leaf(Cloth)
Vellum Hair用の整理
Point番号を指定してグループを作成
グループを指定してRayでBranchCとの最近接のclassを取得
classをPromoteします。
pieceをnameにリネームし、AssembleでPackします。
Transform PiecesでBranchCと同じ動きをさせる
Unpackして不要なアトリビュートを削除
Vellum Clothの設定
Setup
Pin to Animationの設定をし、
Attach to GeometryのVellum Constraintを作成して分離できるように設定します。(後からこれじゃなくても行けたかなと思いました)
Solver
Self Collisionsはオフです。重すぎるのとあまり見た目が良くならなかったので。
Leaf(Hair)
Clothだと、シム開始時に重力で葉が下がってしまって向きを維持できなかったのでhairのパターンも作成。
こちらのほうがシム前の木に近い状態を維持できるが、シム時間が倍になった。
Leaf(Cloth)の場合の途中から分岐して処理を追加する。
追加処理
classをPromoteする前に、Convert Lineで葉のメッシュをラインに変換
その後の処理は同じで、
Vellum Hairの設定
Setup
Velum HairのBreakingを使用すると葉を構成している全ラインが分離してしまうのでHairではBreakingの設定をせずにVelum Constraint Propertyで別途設定する。
PinとPin Orientのコンストレイン(枝にくっつける処理)の場合だけBreakingできるようにする。
Solver
Solverは特に変更なし。
シム後
やっていることは同じ。
重かったのでPoint DeformをCaptureとDeformに分けて使っています。