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 タブには、Velocity
、Acceleration
、Vorticity
の3つのフィールドのチェックボックスがあります。
最初の2つのフィールドはベクトルフィールドで、XYZコンポーネントで構成されています。
NOTEで述べたとおり、法線コンポーネント(デフォルトでY)は関係ありません。
Vorticity
はスカラーであり、値は1つしかありません。
水の様々なフィールドの効果を確認できるように、それらのフィールドを視覚化することができます。
-
Gridをシミュレーションネットワークに追加します。
-
Orientation がHeightFieldノードのパラメータと同じかどうか確認します。
-
GridとHeightfieldノードの Size パラメータは一致している必要があります。例えば、Heightfieldの方のサイズが
20x20
の場合は、Gridにもこれらの値を使用します。 -
Gridノードの Rows と Columns をどちらも
50
などに上げて、十分なサンプルポイントを取得します。 -
Volume Trailノードを追加します。
-
Gridをその1番目の入力、Shallow Water Solverを2番目の入力に接続します。
-
Velocity Volumes で、どのフィールドを視覚化するかを選択することができます。パラメータの入力の右側のドロップダウンメニューに、使用可能なフィールドがすべてリストされます。
vel.*
を選択します。 -
デフォルトのカラーを変えたい場合は、 Ramp に移動して Custom Ramp を選択します。 Color Mapping グラデーションを調整します。
-
軌跡をよく見えるようにするために、下流にTransformノードを追加します。そして軌跡が見えるようになるまで、プラスY軸に沿って視覚化の領域を移動させます。
ソルバに移動して Output Acceleration (accel) をオンにします。これで、 Velocity Volumes ドロップダウンメニューに新しいフィールドが加わります。
-
accel.*
によって、軌跡はより短くなり、急激な変化が加わります。Volume Trailの Maximum 値を変更して、違いを確認することをお勧めします。accel
フィールドには、水が各ポイントで受けたラグランジュ法の水平加速度が格納されます。
Output Vorticity (vorticity) をオンにすると、エクスポートされたVorticity
フィールドも確認することができます。
このスカラー値には、各ポイントのローカル回転モーションが格納されます。
絶対値が大きいほど、スピンが高速であることを意味します。
Vorticity値がプラス(マイナス)の時、回転は上から見て反時計(時計)回りです。
これはスカラーフィールドなので、視覚化するにはVolume Slice SOPを使うのが良いでしょう。
-
Volume Sliceノードを追加します。
-
その入力をShallow Water Solverの出力に接続します。
-
Source Group を
@name=vorticity
に設定します。 -
Visualization Ramp を Custom Ramp に変更します。
-
Visualization Range を対称的になるように設定します(
-1
から1
など)。 -
Color Mapping の右側のボタンをクリックして、 Two-Tone を選択します。
上の手順により、Vorticity(渦速度)が視覚化され、0
の値で2つの色が完全に切り替わります。
これは、プラスおよびマイナスのローカルスピン領域を区別するのに役立ちます。
フォース ¶
ソルバの Bindings では、 Force Mask Layer が空っぽであるのが分かります。 フォースマスクは、他のマスクと同様、HeightField PaintやHeightField Mask by Objectノードなどを介して作成することができます。
Note
マスクを作成する方法の詳細については、Shallow Water Solverページを参照してください。
ここでは、アニメーションオブジェクトのVelocityフィールドからフォースフィールドを作成します。 この方法は、変位した水との衝突効果をシミュレーションします。
Height Fieldのセットアップ ¶
Height Fieldはソルバの衝突ジオメトリです。シミュレーションの品質はシーンのスケールに大きく依存します。
-
obj レベルで、Geometryノードを作成し、その中に入ります。
-
Geoemtryノード内で、HeightFieldを追加します。
-
Size を
5x5
に設定します。 -
Grid Spacing を
0.01
に設定します。 -
HeightField Fileノードを追加して、それをHeightfieldオペレータの出力に接続します。
-
File で、変位にパスを追加します(砂浜の小石や岩の多い地面など)。
-
Layer Name に
height
と入力します。 -
垂直の変位量が適切になるまで、 Height Scale を調整します。
マスクをペイントする ¶
以下のマスクは、水をソーシングする箇所をソルバに伝えます。
-
HeightField Paintノードを追加して、それを前のHeightfield Fileオペレータの出力に接続します。
-
ビューポート上にマウスを動かしてEnterを押し、描画モードに入ります。
-
を使ってブラシのサイズをスケールし、Height Fieldにペイントします。赤い箇所はソース領域を示します。
-
下流にHeightField Copy Layerを追加して、 Destination を
source
に設定します。 -
ペイントした
マスク
を下流のHeightField Mask Clearでリセットします。
球の衝突のセットアップ ¶
高速で移動する球は、不安定さをもたらしたり、他のシミュレーションの異常につながることがあります(例えば、球の中に水が入るなど)。 アニメーションキーの代わりにエクスプレッションを使用すると、球の速度が制御しやすくなります。
-
Sphereノードを追加します。
-
Center.X に
sin($FF*3)*0.25
と入力して、プラスおよびマイナスX方向で0.25
の振幅の振動を作成します。 -
Center.Z に
$FF*0.015-1.5
と入力して、-1.5
から始まるZ軸に沿った遅い線形モーションを作成します。 -
Rows および Columns に
50
と入力して、十分なVelocityサンプルポイントを取得します。
これで、球のモーションがVelocityフィールドに変わりました。
-
Time Shiftノードを配置して、その Frame エクスプレッションを⌃ Ctrl + ⇧ Shift + クリックしてクリアします。その入力をアニメーションされたSphereノードに接続します。これは、ばら撒かれたポイントを変形するための静止ジオメトリになります。
-
Pyro Sourceノードを追加して、アニメーションされたSphereノードをその1番目の入力に接続します。Time Shiftノードを2番目の入力に接続します。
-
Mode を Volume Scatter に設定します。
-
Point Velocityノードを追加して、それをPyro Sourceに接続します。このノードはVelocityを計算します。
-
Velocityからフィールドを作成するために、Volume Rasterize Attributesノードを追加して、それを前のノードに接続します。
-
Attributes で、
v
(Velocity)を追加します。 -
Voxel Size を
0.008
に設定します。 -
Nameノードを追加して、それをVolume Rasterize Attributesノードの出力に接続します。
-
Group に移動し、
@name=v
と入力してVelocityを分離します。 -
グループの Name を
vel
に設定して、Velocityフィールドをソルバが利用できるようにします。
これでHeight FieldとVelocityフィールドが結合され、アニメーションするフォースマスクの入力として機能するようになります。
-
Mergeノードを追加して、NameノードとHeightField Mask Clearノードをその入力に接続します。
-
下流にHeightField Mask by Objectノードを追加します。Mergeノードを1番目の入力に、Sphereを2番目の入力に接続します。
-
下流にもう1つHeightField Copy Layerを追加して、 Destination を
force
に設定します。 -
古い
マスク
を下流のHeightField Mask Clearでリセットします。
ソルバのセットアップ ¶
ソルバはすべてを1つにまとめて、水を作成します。 また、球のVelocityはフォースフィールドに変換され、ソルバが水を押し出すのに使用されます。
-
Shallow Water Solverを追加して、それをHeightField Mask Clearノードの出力に接続します。
-
Setup で、 Velocity Diffusion に移動して
0.0005
と入力し、Velocityフィールドをブラーして、波を減衰します。 -
Source Scale を
0.03
に設定して、ソーシングされる水の量を減らします。 -
Force Frequency をオンにして Once per Frame を選択し、アニメーションする
force
マスクがないことをソルバに伝えます。 -
Bindings タブに移動します。 Force Mask Layer に
force
と入力します。 -
水を視覚化することも可能です。 Output で Visualization に移動し、 Color by Water Layer を選択します。
-
シミュレーションを再生します。不安定な場合は、 Simulation タブに移動して Substeps を上げます。
ビデオでは、球が周囲の水をわずかに変位させています。