Houdini 20.0 オーシャンと水面

Shallow Water Solverフィールド

Velocity(速度)、Accleration(加速度)、Vorticity(渦速度)、フォースフィールドを扱います。

On this page

Shallow Water Solverは様々なフィールドを作成することができますが、フィールドを入力として使用してシミュレーションを駆動することもできます。

Note

Shallow Water Solverは2Dソルバで、フィールドの評価に使用されるのは2つの座標のみです。 デフォルトでは、ソルバはXZ平面を使用し、水の高さはY軸に使用されます。これは入力のフィールドにも当てはまります。

Velocity(速度)、Accleration(加速度)、Vorticity(渦速度)

Note

このワークフローは、既存のShallow Water Solverネットワークに基づいています。 シミュレーションをセットアップする方法の詳細については、Shallow Water Solverの紹介ページを参照してください。

ソルバの Output タブには、VelocityAccelerationVorticityの3つのフィールドのチェックボックスがあります。 最初の2つのフィールドはベクトルフィールドで、XYZコンポーネントで構成されています。 NOTEで述べたとおり、法線コンポーネント(デフォルトでY)は関係ありません。 Vorticityはスカラーであり、値は1つしかありません。 水の様々なフィールドの効果を確認できるように、それらのフィールドを視覚化することができます。

  1. Gridをシミュレーションネットワークに追加します。

  2. OrientationHeightFieldノードのパラメータと同じかどうか確認します。

  3. GridとHeightfieldノードの Size パラメータは一致している必要があります。例えば、Heightfieldの方のサイズが20x20の場合は、Gridにもこれらの値を使用します。

  4. Gridノードの RowsColumns をどちらも50などに上げて、十分なサンプルポイントを取得します。

  5. Volume Trailノードを追加します。

  6. Gridをその1番目の入力、Shallow Water Solverを2番目の入力に接続します。

  7. Velocity Volumes で、どのフィールドを視覚化するかを選択することができます。パラメータの入力の右側のドロップダウンメニューに、使用可能なフィールドがすべてリストされます。vel.*を選択します。

  8. デフォルトのカラーを変えたい場合は、 Ramp に移動して Custom Ramp を選択します。 Color Mapping グラデーションを調整します。

  9. 軌跡をよく見えるようにするために、下流にTransformノードを追加します。そして軌跡が見えるようになるまで、プラスY軸に沿って視覚化の領域を移動させます。

ソルバに移動して Output Acceleration (accel) をオンにします。これで、 Velocity Volumes ドロップダウンメニューに新しいフィールドが加わります。

  • accel.*によって、軌跡はより短くなり、急激な変化が加わります。Volume Trailの Maximum 値を変更して、違いを確認することをお勧めします。accelフィールドには、水が各ポイントで受けたラグランジュ法の水平加速度が格納されます。

Output Vorticity (vorticity) をオンにすると、エクスポートされたVorticityフィールドも確認することができます。 このスカラー値には、各ポイントのローカル回転モーションが格納されます。 絶対値が大きいほど、スピンが高速であることを意味します。 Vorticity値がプラス(マイナス)の時、回転は上から見て反時計(時計)回りです。 これはスカラーフィールドなので、視覚化するにはVolume Slice SOPを使うのが良いでしょう。

  1. Volume Sliceノードを追加します。

  2. その入力をShallow Water Solverの出力に接続します。

  3. Source Group@name=vorticityに設定します。

  4. Visualization RampCustom Ramp に変更します。

  5. Visualization Range を対称的になるように設定します(-1から1など)。

  6. Color Mapping の右側のボタンをクリックして、 Two-Tone を選択します。

上の手順により、Vorticity(渦速度)が視覚化され、0の値で2つの色が完全に切り替わります。 これは、プラスおよびマイナスのローカルスピン領域を区別するのに役立ちます。

フォース

ソルバの Bindings では、 Force Mask Layer が空っぽであるのが分かります。 フォースマスクは、他のマスクと同様、HeightField PaintHeightField Mask by Objectノードなどを介して作成することができます。

Note

マスクを作成する方法の詳細については、Shallow Water Solverページを参照してください。

ここでは、アニメーションオブジェクトのVelocityフィールドからフォースフィールドを作成します。 この方法は、変位した水との衝突効果をシミュレーションします。

Height Fieldのセットアップ

Height Fieldはソルバの衝突ジオメトリです。シミュレーションの品質はシーンのスケールに大きく依存します。

  1. obj レベルで、Geometryノードを作成し、その中に入ります。

  2. Geoemtryノード内で、HeightFieldを追加します。

  3. Size5x5に設定します。

  4. Grid Spacing0.01に設定します。

  5. HeightField Fileノードを追加して、それをHeightfieldオペレータの出力に接続します。

  6. File で、変位にパスを追加します(砂浜の小石や岩の多い地面など)。

  7. Layer Nameheightと入力します。

  8. 垂直の変位量が適切になるまで、 Height Scale を調整します。

マスクをペイントする

以下のマスクは、水をソーシングする箇所をソルバに伝えます。

  1. HeightField Paintノードを追加して、それを前のHeightfield Fileオペレータの出力に接続します。

  2. ビューポート上にマウスを動かしてEnterを押し、描画モードに入ります。

  3. を使ってブラシのサイズをスケールし、Height Fieldにペイントします。赤い箇所はソース領域を示します。

  4. 下流にHeightField Copy Layerを追加して、 Destinationsourceに設定します。

  5. ペイントしたマスクを下流のHeightField Mask Clearでリセットします。

球の衝突のセットアップ

高速で移動する球は、不安定さをもたらしたり、他のシミュレーションの異常につながることがあります(例えば、球の中に水が入るなど)。 アニメーションキーの代わりにエクスプレッションを使用すると、球の速度が制御しやすくなります。

  1. Sphereノードを追加します。

  2. Center.Xsin($FF*3)*0.25と入力して、プラスおよびマイナスX方向で0.25の振幅の振動を作成します。

  3. Center.Z$FF*0.015-1.5と入力して、-1.5から始まるZ軸に沿った遅い線形モーションを作成します。

  4. Rows および Columns50と入力して、十分なVelocityサンプルポイントを取得します。

これで、球のモーションがVelocityフィールドに変わりました。

  1. Time Shiftノードを配置して、その Frame エクスプレッションを⌃ Ctrl + ⇧ Shift + クリックしてクリアします。その入力をアニメーションされたSphereノードに接続します。これは、ばら撒かれたポイントを変形するための静止ジオメトリになります。

  2. Pyro Sourceノードを追加して、アニメーションされたSphereノードをその1番目の入力に接続します。Time Shiftノードを2番目の入力に接続します。

  3. ModeVolume Scatter に設定します。

  4. Point Velocityノードを追加して、それをPyro Sourceに接続します。このノードはVelocityを計算します。

  5. Velocityからフィールドを作成するために、Volume Rasterize Attributesノードを追加して、それを前のノードに接続します。

  6. Attributes で、v (Velocity)を追加します。

  7. Voxel Size0.008に設定します。

  8. Nameノードを追加して、それをVolume Rasterize Attributesノードの出力に接続します。

  9. Group に移動し、@name=vと入力してVelocityを分離します。

  10. グループの Namevelに設定して、Velocityフィールドをソルバが利用できるようにします。

これでHeight FieldとVelocityフィールドが結合され、アニメーションするフォースマスクの入力として機能するようになります。

  1. Mergeノードを追加して、NameノードとHeightField Mask Clearノードをその入力に接続します。

  2. 下流にHeightField Mask by Objectノードを追加します。Mergeノードを1番目の入力に、Sphereを2番目の入力に接続します。

  3. 下流にもう1つHeightField Copy Layerを追加して、 Destinationforceに設定します。

  4. 古いマスクを下流のHeightField Mask Clearでリセットします。

ソルバのセットアップ

ソルバはすべてを1つにまとめて、水を作成します。 また、球のVelocityはフォースフィールドに変換され、ソルバが水を押し出すのに使用されます。

  1. Shallow Water Solverを追加して、それをHeightField Mask Clearノードの出力に接続します。

  2. Setup で、 Velocity Diffusion に移動して0.0005と入力し、Velocityフィールドをブラーして、波を減衰します。

  3. Source Scale0.03に設定して、ソーシングされる水の量を減らします。

  4. Force Frequency をオンにして Once per Frame を選択し、アニメーションするforceマスクがないことをソルバに伝えます。

  5. Bindings タブに移動します。 Force Mask Layerforceと入力します。

  6. 水を視覚化することも可能です。 OutputVisualization に移動し、 Color by Water Layer を選択します。

  7. シミュレーションを再生します。不安定な場合は、 Simulation タブに移動して Substeps を上げます。

ビデオでは、球が周囲の水をわずかに変位させています。

オーシャンと水面

Shallow Water Solver

オーシャン

波紋ソルバ