これはMardini2024のDay12 Vellum Configure Grainsの動画を視聴してまとめたものです。
Day11 Vellum Brush | Day12 Vellum Configure Grains | Day13 RBD Material Fracture
Vellum Configure Grainノードは、Vellumグレインとフルイドのシミュレーションを設定できます。また、剛体シミュレーションにも応用できます。
要約
- Vellum Configure Grainノードは、Vellumグレインとフルイドのシミュレーションを設定するために使用される
- ジオメトリからポイントを作成するか、既存のポイントを使用できる
- パーティクルサイズ、パッキング密度、物理属性を調整できる
- 摩擦、引力、反発力は、Vellumソルバーノードで設定する必要がある
- フルイドシミュレーションでは、粘度、表面張力、フェーズを調整できる
- フェーズを使用して、複数のフルイドを区別できる
- Vellum Configure Grain Piecesノードを使用して、ジオメトリを剛体シミュレーションに変換できる
サンプルファイル
GRAINS_BASIC
FLUID
COPIES
Vellum Configure Grain SOPの基本
-
Vellum Configure Grain SOPは、Vellum Grainsのセットアップに使用されるノードです
-
Houdiniのシェルフ(シェルフにGrainのグループがありますが、そっちではなくVellumの方にあります!)からVellum Grainsを選択すると、AutoDopNetworkとGrains Vellumノードが作成されます。実際のシミュレーションはDOP Network内で行われます
-
再生させてみると、崩れていくことが確認できます
ポイントの作成方法
-
先程のシェルフのVellum Grains作成時に、AutoDopnetwork以外にも元のSphereジオメトリ直下にVellum Configure Grainsが追加されています。まず注目すべきは、このCreate Points from Volumeです
-
vellumconstraints_grainノード作成時Create Points from Volumeは無効なのがデフォルトの状態です。無効状態の場合ポイントを取り込むことを期待しています。Create Points from Volumeを有効にすると、スフィアがポイントに変換されます
-
ポイントの作成方法は、Regular Grid(規則的なグリッド)またはSphere Packing(球体のパッキング)から選択できます
-
Particle Sizeパラメータは、パーティクルのサイズを制御します。Particle Sizeをデフォルトの0.1から0.05に小さくすると、パーティクル数が増えます。0.03ではさらに増えます
-
Packing Densityパラメータは、パーティクルの過剰パッキングに使用されます。グレインの場合は使用されませんが、流体の場合は増加させる必要があります。グレインでPacking Densityを上げると、最初に実行したときに重なったコライダーができてしまい、爆発してしまいます
Physical Attributesと乗数(マルチプライヤ)
-
Physical Attributesを見ると、Phase(フェーズ)、Viscosity(粘度)、Surface Tension(表面張力)などがグレーアウトしているのがわかります。これについては後ほど説明します。そのほかにFriction(摩擦)、Dynamic Friction(動摩擦)、Attraction Weight(吸引力)、Repulsion Weight(反発力)があります
-
ここで、ポイントを引き付け合ってまとまるようにしたいとします。そのためにはAttraction Weightを使用します。これを100のような極端に高い値に設定してみましょう。その状態でアニメーションさせてみると、パーティクルが全て引き付け合います!‥と思いきやまったく効果がありません
-
よく見てみると、これらのオプションは乗数になっています。Vellum SolverのAttraction Weightパラメータに対するマルチプライヤーとして機能すると書かれています。では、これを1に戻して無効にし、Vellum Solverに移動します
-
Vellum Solverの Advanced タブに移動し、Grain Collisionsの下にAttraction Weightがあります。これを0.3のような値に設定して再生すると、粒子が引き寄せられているのがわかります
-
Vellum Configure GrainsのAttraction Weight Multiplierを使えば、Attraction Weightを変更できます。これを2に上げると、さらに高い値になります。0.3の2倍なので、0.6になります。Repulsion Weight、Friction、Dynamic Frictionも同じです。先ほど100の値を入れても効果がなかったのは 0 x 100 = 0 だったためです
SOPレベルでのグレインのセットアップ
-
では、Phase、Viscosity、Surface Tensionはどうでしょうか。これらはVellum Fluidsのためのものです。先ほど作成したノードを削除して新しく作っていきす
-
フルイドを見る前に、SOPレベルで通常のグレインSOPを構築する方法を見てみましょう。新規のジオメトリ作成
-
Sphereを追加し、Vellum Configure Grainsを使用します…しかし、接続しても何も起きません。なぜならCreate Points from Volumeを使用する必要があるからです
-
もう一つの方法は、Grain Sourceを使うことです。このノードはVellum Constraintsにインフォームを送るので、一緒に使うと便利です。
-
Point Separationを0.05程度に減らしても、パーティクルの実際のスケールは変わりません。これは、Particle Sizeを手動で設定しているからです。これを無効にすれば、Grain Sourceから取得されます。ここで値を下げると、それに合わせて変化します。
-
あとはVellum Solverに入れるだけです。この3つを取り、GroundPlaneをY=-1に追加し、サブステップを5に上げ、少しAttraction Weightを追加すれば、グレインができあがります
流体のセットアップ
-
次はVellum Fluidで試してみましょう。このノードを取得する方法は、Vellum Configure Grainsの代わりにVellum Configure Fluidを使うことです
-
Vellum Configure Fluidを配置すると、実際にはVellum Configure Grainsノードになっています。TypeがGrainからFluidに変更されただけです
-
Sphereを作成し、Vellum Fluidに接続し、コライダーを接続します
フェーズ
パーティクルのGroupがFluid AとFluid Bに分割されています。図で選択されているのがfluid_A
Fluid Aは白で、質量が低くなっています。これにより、白いパーティクルが上に来ます。他のパーティクルの半分の質量しかありません。また、粘度が少し高いので、速度を共有します。表面張力もあります。フェーズを1に設定しています。フェーズは、これらが2つの異なるフルイドであることをソルバに伝える方法です。2つの異なるフェーズ値があれば、2つの異なるフルイドです。フェーズの実際の値はあまり重要ではなく異なっていれば十分です。同じフェーズ値を持っていれば、互いにブレンドします。フェーズ1とフェーズ2があれば、より2つの独立したフルイドとして扱われます。
Vellum Solverで再生すると、白いパーティクルが上に上がり、青いパーティクルが下に沈んでいくのがわかります。白いパーティクルは粘度が高いので、泡のように動きます。これは非常に安価にフルイドを作る方法です。
ここで使用されているのは、粘度、表面張力、フェーズの3つの値です。粘度は、パーティクルが近くのパーティクルと速度をどの程度共有するかと考えることができます。表面張力は、フルイドがどの程度まとまろうとするかです
v@Cd = set(1,1,1);//白
@mass *= 0.5;//水の半分の重さ、軽いので上に来る
@viscosity = 2;//粘度が高い
@surfacetension = 1;//表面張力が高い
@phase = 1;//フェーズ1
v@Cd = set(0.4,0.7,1);//水色
@mass *= 1;//重さ1
@viscosity = 0.7;//粘度が泡より低い
@surfacetension = 0.2;//表面張力が低い
@phase = 2;//フェーズ2
まとめ
- Vellum Configure Grain SOPは、TypeをFluidに設定することで、流体のセットアップにも使用できます
- Viscosity、Surface Tension、Phaseなどのパラメータを使用して、流体の動作を制御できます
- Phaseパラメータを使用して、異なる流体グループを定義できます。同じPhase値を持つパーティクルは混ざり合い、異なる値を持つパーティクルは別々の流体として扱われます
Vellum Configure Grain Pieces SOPの使用
ラバートイを用意し、グリッドをたくさん作り、ランダム化されたOrientアトリビュートを各ポイントに追加し、それらをポイントにコピーしています。
その際、Pack and Instanceを必ず行います。各ジオメトリを1つのジオメトリとして扱いたいからです。
Vellum Configure Grain Piecesを使用すると、Vellum Grainsと Shape Matchを使用されます。これを最初の入力に接続すると、計算に少し時間がかかりますが、グレインを使ってジオメトリの推定をしているのがわかります。
Sphere Packingは、ジオメトリの形状を可能な限り正確に推定するために、たくさんの球をジオメトリにパックしようとしています。
Particle Sizeを0.07程度に減らすことで精度が上がります。ただし、デフォルトではMax Spheresが100上限の設定制限があるため無効にしておきます。
この仕組みは、実際に各ピースの接続性を取得し、ピースアトリビュートを追加します。ジオメトリスプレッドシートに行くと、このピースアトリビュートを見ることができます。ピース0からピース599まであります。各ポイントは異なるピースに属することになります。
次に接続されているVellum Shape Matchは、同じピース番号を共有するポイントを接続します。これらのコンストレイントのすべてが、これらのポイントを一緒に保つようにしていることがわかります。アニメーション時に1つのピースとして動作します。
つまり、Vellum Solverを使えば、簡単に剛体のような振る舞いを再現できます。
しかし、ここまではただのグレインのポイントで、ジオメトリには反映できていません。ここで使うのがTransform Vellum Piecesです。
このノードは、最初の入力としてVellumジオメトリを取り、2番目の入力としてVellumコンストレイントを取り、最後の入力としてピース、つまり最初のジオメトリを取ります。そして、このVellumシミュレーションに基づいてそれらのピースのジオメトリを変形します。
これは剛体シミュレーションを行う方法です
まとめ
- Vellum Configure Grain Pieces SOPは、複雑なジオメトリを剛体としてシミュレートするために使用されます
- このノードは、入力ジオメトリを分析し、グレインを使用してジオメトリの形状を推定します
- Particle SizeとMax Spheresパラメータを調整して、推定の精度を制御できます
- Vellum Shape Match SOPを使用して、同じピース番号を持つポイントを接続し、ジオメトリが1つのまとまりとして動作するようにします
- Transform Vellum Pieces SOPを使用して、Vellumシミュレーションに基づいてピースジオメトリを変形させ、剛体シミュレーションを実現します