Houdini 19.5 Vellum

流体の位相

On this page

位相(Phase)を使用すれば、Vellumは粘度と表面張力を別々に計算して、様々な種類の流体をシミュレーションすることができます。 このオプションは流体にのみ利用可能で、例えば、Phaseを介してGrainと水を組み合わせることはできません。 また、2つの位相に制限されていません。 Vellum Configure Grain SOPノードの Physical Attributes セクションに Phase パラメータがあります。 Type は必ず Fluid に設定することに注意してください。 もちろん、2つの流体をセットアップして位相を無視することも可能ですが、その結果は期待通りにならない可能性があります。 設定によって変化する流体の挙動:

以下の例では、お椀に3本の流体が注がれたシーンを作成します。 1つ目の流体は、少しホイップクリームに似た挙動をし、2つ目の流体は液体のチョコレートで、3つ目の流体はキャラメルに近いです。 すべてをもっと面白くするために、ミキサーで材料をかき混ぜます。 これらの流体は物理的に正しくある必要はないことを前提にしています。 このプロジェクトの主な目的は、流体の位相の概念に実際に触れて、様々な物質がどのように相互作用するのかを示すことです。 そのため、他のパラメータと組み合わせて使ってみるのも良いでしょう。

このプロジェクトは、主に以下のようにパーツが別れています:

  1. お椀のジオメトリ

  2. ソースオブジェクト

  3. 流体ネットワークテンプレートの作成

  4. ソルバの設定

  5. 流体とソルバの接続

Note

このページの最後には、ダウンロードして利用できる2個のサンプルを載せています。 1つ目のサンプルには、お椀とミキサーのオブジェクトのみが含まれています。 2つ目のサンプルは、参考用の完全なプロジェクトです。 以下では、その1つ目のサンプルのノードに基づいて説明をしています。

お椀とミキサー

お椀は回転体オブジェクトで、流体用の衝突オブジェクトとして作用させます。

  1. サンプルファイルを読み込んで、fluid Geometry SOPノードをダブルクリックして中に入ります。

  2. そこには、お椀の形状を表現した4個のノードがあります。

  3. ミキサーは、Box SOPだけで表現されています。

  4. そのBoxノードを選択して、 Rotate.Y パラメータに$FF*15と入力します。このエクスプレッションは、オブジェクトをY軸で回転させます。$FFは実フレーム番号を意味し、その値に15の係数を乗算しています。この係数を変更することで、ミキサーの回転を遅くしたり速くすることができます。

ソースオブジェクト

流体ソースには、3個の同じ球を使用し、それらの球をお椀の中心を基点に周回させます。 それらの球の位置にキーフレームを打つのではなくて、エクスプレッションを使用します。 これによって、非常に簡単に周回の速度、開始位置、半径を変更することができます。

  1. Sphere SOPを追加します。

  2. Uniform Scale パラメータを0.1に設定します。

  3. Center.Y0.2に変更します。

  4. ⌃ Ctrl + C⌃ Ctrl + Vを使用してSphereノードを2回コピーアンドペーストします。これで球が3個になりました。

  5. 各Sphereノードの名前をsource_creamsource_chocolatesource_caramelに変更します。

モーションのエクスプレッション

周回モーションは、サイン関数とコサイン関数で表現することができます。 今回のシーンでのパラメータのエクスプレッションは、sin($FF*speed+offset)*distancecos($FF*speed+offset)*distanceです。

  • speedは係数で、値を高くすると球が速く周回します。

  • offsetは球の周回開始位置をずらします。

  • distanceはシーンの原点までの距離で単位がメートルです。

球の Center.X にサイン関数を使用したエクスプレッションを、 Center.Z にコサイン関数を使用したエクスプレッションを追加します。 どちらのエクスプレッションも反時計回りで円を描く動きをします。反時計回りで円を描く動きをさせるには、どちらかのエクスプレッションを-(マイナス)記号で開始させる必要があります。

  1. source_creamCenter.Xsin($FF*7+160)*0.2Center.Zcos($FF*7+160)*0.2を使用します。

  2. source_chocolateCenter.Xsin($FF*6)*0.3Center.Zcos($FF*6)*0.3を使用します。

  3. source_caramelCenter.Xsin($FF*4+100)*0.1Center.Zcos($FF*4+100)*0.1を使用します。

流体テンプレート

シーンには、3つの異なる種類の流体を含めるので、それぞれの材質を別々に定義する必要があります。 手っ取り早い方法は、1つ目の流体のネットワークを作成し、それをコピーアンドペーストして、個々の設定をすることです。

  1. ⇥ TabメニューからVellum Configure Fluid SOPを追加します。このノードを見ると、元はVellum Configure Grain SOPになっていることがわかりますが、それを流体用に事前設定されています。

  2. テスト用として Particle Size は大きくしても良いでしょう。ここでは0.01の値を入力します。最終シミュレーションでは、このパラメータを0.005まで下げます。この値だと最終パーティクル数は53万ポイントほどになります。細かいな構造や滴を生成したいのであれば、十分な数のパーティクルが必須になります。

  3. Physical Attributes セクション下のパラメータは、生成したい流体のタイプを定義します。後でこれを設定します。

Particle Size 値を割りと大きくしても、最終シミュレーションに近い良い結果が得られます。スライダをドラッグして以下の画像を比較してください:

以下のアトリビュート調整系ノードとカラーノードは必ずしも必要ではありませんが、ランダムさを増したり、流体を視覚的に分けるのに役立ちます。

  1. Attribute Adjust Vector SOPを追加します。このノードは、パーティクルが均一なルックにならないようにそのパーティクルの位置にランダムさを加えます。

  2. その入力をVellum Configure Grain SOPの1番目の出力に接続します。

  3. General セクションで、 Attribute Name パラメータのvエントリーを削除します。次に、位置を変更するためにPと入力します。

  4. Adjustment Value セクションで、 Adjust with パラメータのドロップダウンメニューから Noise を選択します。

  5. Range Values パラメータのドロップダウンメニューから Min/Max を選択します。

  6. Min Value パラメータを-0.02Max Value パラメータを0.02に設定します。これらの設定は、パーティクル生成時にそのパーティクルの位置をランダムに変位させます。

  7. Animation セクションで、 Animate Noise チェックボックスを有効にします。

  8. Color SOPを追加し、その入力をAttribute Adjust Vector SOPの出力に接続します。

  9. Null SOPを2個追加します。

  10. 1個目のNull SOPの入力をColor SOPの出力に接続します。このNull SOPは、ノードチェーンの終端として使用し、パーティクルを格納します。

  11. 2個目のNull SOPの入力をVellum Configure Grain SOPの2番目の出力に接続します。このNull SOPには拘束を格納します。

次に、テンプレートノード(Vellum Configure Grain、Attribute Adjust Vector、Color、Null)を矩形ドラッグで選択します。

  1. ⌃ Ctrl + Cを押してそれらのノードをコピーし、2回⌃ Ctrl + Vを押してペーストします。

  2. 新しくペーストした2個のColor SOPに対して、チョコレート用には Color パラメータを茶色に、キャラメル用には Color パラメータをオレンジ色に設定します。

  3. 3本の流体別にネットワークが分かれるようにそれらのネットワークを整理します。

これでクリーム用、チョコレート用、キャラメル用の3つのネットワークが揃いました。

コネクションとノード名

各Vellum Configure Grain SOPの1番目の入力を、それに呼応するソースの球(source_creamsource_chocolatesource_caramel)の出力に接続します。

異なるネットワークを区別しやすくするために、Null SOPに名前を付けます:

  1. Color SOPの出力に接続したNull SOPの名前は、それぞれGEO_CREAMGEO_CHOCOLATEGEO_CARAMELにします。

  2. Vellum Configure Grain SOPの2番目の出力に接続したNull SOPの名前は、それぞれCON_CREAMCON_CHOCOLATECON_CARAMELにします。

ネットワークセットアップが下図のようになっているはずです:

流体の設定

1つ目のネットワークは、ちょっとしたホイップクリームをシミュレーションをします。

  1. (source_creamに接続されている)1つ目のVellum Configure Grain SOPを選択してパラメータエディタを開きます。

  2. Physical Attributes セクションを開きます。

  3. Density パラメータを1100に設定します。これは、水の密度よりも若干濃いです。

  4. Phase1に設定されているかどうか確認してください。このパラメータは、物理設定が異なる複数の流体を使用することをソルバに伝え、パーティクルの間隔が良くなるように世話します。

  5. Viscosity チェックボックスを有効にし、50の値を設定します。

  6. Surface Tension チェックボックスを有効にし、40の値を設定します。

チョコレート用には、以下の設定を使用します:

  1. Density パラメータを1300に設定します。

  2. Phase2に変更します。

  3. Viscosity チェックボックスを有効にし、250の値を設定します。

  4. Surface Tension チェックボックスを有効にし、10の値を設定します。

キャラメル用には、以下の設定を使用します:

  1. Density パラメータを1600に設定します。

  2. Phase3に変更します。

  3. Viscosity チェックボックスを有効にし、2000の値を設定します。

  4. Surface Tension チェックボックスを有効にし、5の値を設定します。

コリジョン

Vellum Configure Grain SOPには3番目の出力( Collisions )が用意されています。 パーティクルは、お椀と回転するミキサーにも相互作用させたいです。

  1. ⇥ Tabメニューから、Merge SOPを追加します。

  2. お椀のノードチェーンのTransform SOPの出力とミキサーのBox SOPの出力をMerge SOPの入力に接続します。

  3. 各Vellum Configure Grain SOPの3番目の出力をMerge SOPの入力に接続します。これでMerge SOPには5本の入力が接続されているはずです。後で、このMerge SOPをソルバに接続してコネクションを確立させます。

  4. デフォルトでは、コリジョンジオメトリは表示状態になっています。コリジョンジオメトリを非表示にしたいのであれば、Vellum Solverの Visualize タブに進んで、 Show Collision を無効にしてください。

ソルバの設定

Vellum Solver SOPはネットワークの中心部です。 これは、GEOノードとCONノード、コリジョンオブジェクトからの入力情報を処理します。

  1. Vellum Solver SOPを追加し、その3番目の入力( Collisions )をMerge SOPの出力に接続します。最初の2本の入力は必須ですが、ここでは空っぽのままにしておきます。パーティクルジオメトリと拘束をソルバに接続するのは、後ほど行ないますが、Vellum Solver SOP内部でGEOCONのNull SOP経由で接続します。

  2. Solver タブに進んで、 Substeps7に変更します。流体で推奨される最小値は5ですが、高い粘度のシミュレーションだとパーティクルを安定化させるのには Substeps を高くする必要があります。

  3. 流体の場合、 Constraint Iterations は約20にしてください。

  4. Smoothing Iterations は、ここでは不要なので0に設定して構いません。

パーティクルと拘束とソルバのコネクションを確立するには、さらにノードを追加する必要があります。ソルバをダブルクリックして中に入ります。

  1. ⇥ Tabメニューから、Vellum Source DOPとMerge DOPを追加します。

  2. Vellum Source DOPの出力をMerge DOPの入力に接続してから、そのMerge DOPの出力をSOURCEの入力に接続します。

  3. Vellum Source DOPを選択してパラメータエディタを開きます。

  4. SOP Path パラメータの右側にあるオペレータ選択ボタンをクリックします。ノードツリーからGEO_CREAMを選択します。

  5. Constraint SOP Path パラメータにも同じ操作をしますが、CON_CREAMを選択します。

  6. Emission Type パラメータを Each Substep に変更します。このパラメータは、Vellum SOPネットワーク内で直接アクセスすることができませんが必要です。そのため、パーティクルと拘束のコネクションをソルバの入力から確立することができません。 Emission Type パラメータを変更しなかった場合、流体はフレーム1の時でしかソーシングされません。

チョコレートとキャラメルのネットワークでもコネクションが必要です。

  1. Vellum Source DOPを⌃ Ctrl + Cでコピーし、2回⌃ Ctrl + Vを押してコピーを2個作成します。

  2. それら2個のコピーをMerge DOPの入力に接続します。

  3. 1個目のコピーの SOP Path パラメータを/obj/fluid/GEO_CHOCOLATEConstraint SOP Path パラメータを/obj/fluid/CON_CHOCOLATEに変更します。

  4. 2個目のコピーの SOP Path パラメータを/obj/fluid/GEO_CARAMELConstraint SOP Path パラメータを/obj/fluid/CON_CARAMELに変更します。

ソースのアクティブ化

デフォルトでは、すべての3つの流体に対してパーティクルソーシングはフレーム1で開始します。 しかし、開始フレームと停止フレームを変えることで、シミュレーションはもっと良い感じのルックになります。 Activation パラメータのアニメーションとソーシングの制御の手っ取り早い方法は、エクスプレッションを使うことです。

Note

ソーシングの制御方法の詳細は、放出メソッドのページを参照してください。そこには、たくさんのサンプルとセットアップがあります。

  1. クリーム用のVellum Source DOPでは、フレーム42から120の間でパーティクルを生成させたいです。 Activation パラメータに進んで、if($FF>42 && $FF<120,1,0)と入力します。このエクスプレッションは、指定したフレーム範囲では、そのパラメータ値を0から1に切り替えます。

  2. チョコレート用のVellum Source DOPの Activation パラメータには$FF<131と入力します。ここでは、ソーシングはフレーム1で開始し、フレーム130で停止します。

  3. キャラメル用のVellum Source DOPの Activation パラメータにはif($FF>24 && $FF<122,1,0)と入力します。

  4. fluid 階層内に戻ります。

脱線パーティクルの削除

いくつかのパーティクルが非常に速く加速してしまい、お椀から抜け出てしまいます。 このような脱線パーティクルは、Vellum Solver SOP内部にPOP Kill DOPを使用することで削除することができます。

  1. Vellum Solver SOPをダブルクリックして中に入ります。

  2. ⇥ TabメニューからPOP Kill DOPを追加し、その出力をFORCEノードの入力に接続します。

  3. POP Kill DOPのパラメータエディタの Rule タブで、 Enable を有効にして VEXpression フィールドを編集できるようにします。

  4. 以下のエクスプレッションを入力します:

if (length(@v) > 1.7) {
    dead = 1;
}

この短いエクスプレッションは、各パーティクルのv Velocityベクトルから長さ(=速度)を計算し、それを閾値と比較します。 パーティクルの速度が1.7より大きい場合に条件が満たされ、パーティクルが削除されます。 この閾値は、いくつかのテストシミュレーションの結果から決めたものです。

摩擦

流体をお椀の表面上に付着させるには、摩擦を追加すると良いでしょう。 Vellumには2通りの方法(パーティクル単位の摩擦、オブジェクト摩擦)が用意されています。 vellumfluid1ノードのパラメータを見ると、 FrictionDynamic Friction があるのがわかります。 これらのパラメータは、呼応するVellum Solver SOPの Static ThresholdDynamic Scale で乗算されます。 このシーンでは、オブジェクトベースの摩擦を使用します。

  1. Attribute Create SOPを追加します。

  2. このAttribute Create SOPは、お椀のノードチェーン内のRevolve SOPとTransform SOPの間に挿入して接続します。

  3. Attribute Create SOPのパラメータエディタで、 Name パラメータにdynamicfrictionと入力します。

  4. Vellumはジオメトリをポイントとして解釈するので、必ず ClassPoint に設定してください。

  5. Value フィールドの1番目のコンポーネントに4と入力します。

キャッシュ化

シーンのシミュレーションには時間がかかるので、その結果をディスクに保存するべきです。 Vellumには、ジオメトリ、拘束、コリジョンを一工程でキャッシュ化できる専用ノードが用意されています。

  1. fluid 階層内で、Vellum I/O SOPを追加し、その3本の入力をVellum Solver SOPのそれぞれ呼応する出力に接続します。

  2. Vellum I/O SOPはデフォルト設定のままで、 Save to Disk ボタンまたは Save to Disk in Background ボタンをクリックします。これらの方法の違いは、後者の方はHoudiniのUIの応答があります。

下図が完成したネットワークセットアップです:

これでシミュレーションを開始する準備が整いました。 プレイバーにあるボタンを押します。 すべてが期待通りに動作すれば、その結果は以下の動画と同じようになるはずです。 パーティクルが異なる位置と時間でソーシングされているのがわかります。 摩擦によって流体はお椀の表面に付着し、より自然なルックになっています。 クリームの流体は Density が最も低いので、他のチョコレートとキャラメルの流体よりも上に浮きます。 以下の動画は、 Particle Size0.002に設定したシミュレーションです。

以下の動画では、すべての Phase パラメータが1です。 流体がさらに混ざるようになり、ほとんどの表面構造が消えてしまいました。 特に白いクリームのパーティクルの挙動が完全に異なっています。

ファイル

Vellum Fluid Phases Start

このサンプルには、 ViscositySurface Tension の設定が異なるVellum流体を相互作用させるセットアップの作成を始めるのに必要なオブジェクトが含まれています。

Vellum Fluid Phases Reference

このサンプルには、 ViscositySurface Tension の設定が異なるVellum流体を相互作用させる完全なセットアップが含まれています。

Vellum

ソフトボディ

流体

拘束

コリジョン

上級