On this page | |
Since | 19.5 |
Shallow Water Solver SOPは、Height Field上で全体的な水の挙動をシミュレーションすることができます。 地形の谷で洪水を起こす大規模なシナリオにも、排水溝に水が流れるといった規模の小さいエフェクトのシミュレーションにも使用することができます。 水は各ポイントの深度で表現されます。 そのため、Shallow Water Solverは噴霧沫や飛沫をキャプチャすることはできません。
このオペレータは明示的な方法を使用して、OpenCLデバイス上でダイナミクスを統合します。 高速ですが、高解像度でのシミュレーションでは安定性の問題が発生する可能性があります。 こうした安定性の問題を軽減するために、ソルバで有効にできる安全機能がいくつかあります。
-
まず、 Max Wave Speed をシミュレーションするシナリオに合った値にクランプします(シーンのスケールを考慮)。
-
Velocity Diffusion を低く設定すると、シミュレーションが安定しやすくなります。 このパラメータは流体の粘度を制御するため、設定が高すぎると液体の“粘度が上る”こともあります。
-
Max Surface Speed は、水深が変化する速さに対する安全上の制限です。 これを使用すると、シミュレーションが吹き飛ぶように見えるのを防ぐことができます。 しかし、非物理的な挙動になることもあるため(水の形が保持されないなど)、注意して使用する必要があります。
-
不安定になるのは、主にタイムステップが長すぎるからです。 したがって、その問題に対処する最善の方法は、タイムステップの長さを短くすることです。 Substeps の数を増やすことで短くできますが、それと引き換えにランタイム負荷が高まることに注意してください。
Shallow Water Solverは、解像度によらず、忠実度が高いソルバです。
そのため、低い解像度から始めることをお勧めします( Voxel Size Scale 値を上げる)。
そうすることで、 Substeps も少なくて済みます。
こうした低品質の設定で目的の動きを実現できたら、 Voxel Size Scale を下げて、フル解像度のシミュレーションを実行します。
シミュレーションを安定させるため、 Substeps を増やす必要もあります。
大まかな原則として、 Voxel Size Scale をX
の係数で下げた場合は、 Substeps をX
倍にすると、安定性を維持することができます。
入力 ¶
Height Fields
シミュレーションに使用されるHeight Fieldレイヤー。 入力レイヤーの用途は、 Bindings タブで設定することができます。
例外は、ハードコーディングされたvel
ベクトルボリュームです。
存在する場合には、それがシミュレーションの開始Velocityとして扱われます。
さらに、フォースが適用されるよう設定されている場合は(つまり、 Forces Frequency が有効になっている)、vel
ベクトルフィールドがGoal Velocityフィールドのように動作します。
特に、シミュレーションVelocityは、 Force Mask Layer 内のこれらのゴール値の方に向かいます。
出力 ¶
Height Fields with Simulated Water
Water Layer のシミュレーション結果と共に、Height Fieldを入力します。
パラメータ ¶
Reset Simulation
シミュレーションのキャッシュ全体をクリアします。
Start Frame
Houdiniプレイバー上のこのフレームから、シミュレーションを開始します。
Setup ¶
Input Water Height Is Absolute
このトグルが有効な場合、 Water Layer の入力値は水面の位置に含まれているものと見なされます。 この場合、各ボクセルの水柱の高さは Water Layer と Seabed Layer の差分です。 これが無効な場合、 Water Layer は各ボクセルの水柱の高さである必要があります。
Input Terrain Includes Water Height
有効な場合、 Seabed Layer は水も組み込んでいると見なされます。 この場合、底部Colliderの高さは、 Seabed Layer と Water Layer の差分です。 これが無効になっている場合、 Seabed Layer は純粋な底部Colliderである必要があります。
Up Axis
Height Fieldの法線。 これは、入力および出力に適用されます。
Gravity
重力による加速度。 Gravity の値が大きいほど、水面がすぐに平坦になり、波の速度も速くなります。
Velocity Diffusion
Velocityフィールドに対するブラーの量を制御します。 値を大きくするほど、液体の粘度が高くなります。 また、少量の拡散は、シミュレーションの安定化に役立ちます。
Time Scale
ソルバ内部の時間のスケール係数。
1
は標準速度、1
より大きい値はシミュレーションを早く動かし、1
より小さい値はゆっくり動かします。
Boundaries
ドメインの境界にぶつかった波の挙動を制御します。 Reflective に設定すると、波が境界で跳ね返って、来た方向に戻ります。 Periodic の場合、波がドメインを回り込み、反対側でモーションが続きます。
Enable Damping Layer
波が境界にぶつかると、波は通常跳ね返るか、反対側に動き続けます( Boundaries パラメータの設定による)。 減衰レイヤーを使用すると、波が境界に近づくにつれて波の速度を遅くすることができるので、まるで波がドメインから自由に出て行っているかのように見せることができます。 このパラメータをオンにすると、シミュレーション領域の四辺にこうした減衰レイヤーを選択的に追加することができます。
Damp Water Depths
このトグルが有効になっていると、減衰レイヤー内で水深も減衰されます。 これにより、減衰レイヤーに水が蓄積されるのを防ぎ、水を滑らかに流すことができます。 水を意図的にドメイン内に保持したい場合は(海のパッチを扱う場合など)、 Damp Water Depths をオフにします。 そうしないと、減衰した辺に水が流れ込んでしまいます。
-X Axis
マイナスX
の側の減衰レイヤーを切り替えします。
Up Axis が X の場合、このパラメータは使用することができません。
+X Axis
プラスX
の側の減衰レイヤーを切り替えます。
Up Axis が X の場合、このパラメータは使用することができません。
-Y Axis
マイナスY
の側の減衰レイヤーを切り替えます。
Up Axis が Y の場合、このパラメータは使用することができません。
+Y Axis
プラスY
の側の減衰レイヤーを切り替えます。
Up Axis が Y の場合、このパラメータは使用することができません。
-Z Axis
マイナスZ
の側の減衰レイヤーを切り替えます。
Up Axis が Z の場合、このパラメータは使用することができません。
+Z Axis
プラスZ
の側の減衰レイヤーを切り替えます。
Up Axis が Z の場合、このパラメータは使用することができません。
Layer Size
Damping Layerのサイズ。 Damping Layerは、波が徐々に減速できるほど十分な大きさでなければなりません。 Damping Layerが十分な大きさでなかった場合、波は依然として境界に到達し、跳ね返ってドメインに戻ってしまいます。
Damping Strength
Damping Layer内でVelocityが減衰する早さを制御します。 Damping Strength は、Damping Layerに入る波を適切に減速させるのに十分な強さがなければなりません。 ただし、この値を強く設定しすぎると、波が突然停止して、Damping Layer内で波が跳ね返ってしまいます。
Additive Sourcing
有効な場合、 Source Layer でスケールされた値が、シミュレーション時に Water Layer に追加されます。 無効の場合、 Source Layer は最小の水位のように機能します(つまり、 Water Layer はあらかじめ決められたソースを下回ることができません)。
Source Scale
Source Layer の値に適用される乗数。 その値を使用して、新しい水をシミュレーションに注入します。
Source Frequency
シミュレーションで使用される Source Layer からのソースを更新する頻度を指定します。 Initialize Only は、シミュレーションの開始時にフィールドをコピーし、それを全体を通して使用します。 これが最も高速なオプションで、静的ソース(または、アニメーションを Source Scale にデリゲート(委任)できる場合)には、これを使用します。 Once per Frame は、各フレームの最初のサブステップでシミュレーションソースを更新します。 可能な場合、変化するソースにはこのオプションを使用します。 Every Substep は最も時間のかかるオプションです。 非常に急速に変化するソースなど、特別な場合を除いては使用を避ける必要があります。
Sink Frequency
Sink Layer からのシミュレーションシンクを更新する頻度を指定します。シンクは、シミュレーションから水を相対量で削除するのに使用されます。例えば、値が0.1
なら、標準フレームレートの24フレーム/秒で、1フレームごとにボクセル内の水の量が10%
減少するということです。
Initialize Only は、シミュレーションの開始時にフィールドをコピーし、それを全体を通して使用します。これが最も高速なオプションで、静的シンクにはこれを使用します。 Once per Frame は、各フレームの最初のサブステップでシミュレーションシンクを更新します。可能な場合、変化するシンクにはこのオプションを使用します。 Every Substep は最も時間のかかるオプションです。非常に急速に変化するシンクなど、特別な場合を除いては使用を避ける必要があります。
Forces Frequency
有効な場合、 Force Mask Layer によってマークされた領域のシミュレーションVelocityが、入力vel
ベクトルレイヤーに含まれるGoal Velocityの方に向かいます。
Force Mask Layer が0
の場合、フォースは適用されません。
値を大きくすると(最大1
)、シミュレーションVelocityとvel
のゴール値が一致する速度がスピードアップします。
Initialize Only は、シミュレーションの開始時にフォースマスクとGoal Velocityをコピーし、それを全体を通して使用します。 これが最も高速なオプションで、静的フォースフィールドにはこれを使用します。 Once per Frame は、各フレームの最初のサブステップでシミュレーションシンクを更新します。 可能な場合、変化するフォースフィールドにはこのオプションを使用します。 Every Substep は最も時間のかかるオプションです。 非常に急速に変化するフォースフィールドなど、特別な場合を除いては使用を避ける必要があります。
Max Wave Speed
有効にすると、Velocityの各コンポーネントがこの値でクランプされます。 このパラメータは、非現実的な大きなVelocity値を防ぐだけでなく、シミュレーションを安定化させることができます。
Max Surface Speed
有効にすると、水深の変化がこの値でクランプされます。 このパラメータを使用することで、シミュレーションを安定化させることができますが、非物理的な挙動を招きかねないです。
Simulation ¶
Voxel Size Scale
シミュレーションの解像度を制御します。 もっと正確に言うと、この値は、入力のHeight Fieldのボクセルサイズに対する乗数として機能します。 その積がボクセルサイズとなり、シミュレーションに使用されます。 そのため、このパラメータの値を大きくするほど、解像度は低くなります。
Substeps
計算を実行する際、シミュレーションの各フレームがこのサブステップ数に分割されます。 値が大きくなるほどより正確な結果になりますが、計算時間が長くなります。 シミュレーションが不安定な場合は、 Substeps を増やす必要があります。
Global Substeps
シミュレーションレベルでのグローバルサブステップを制御します。 Global Substeps は、そのサブステップレベルでジオメトリをエクスポートしたい時に使用するのに適しています。 これはフレームあたり多くのメモリを消費しますが、各フレームの最終結果だけでなく、すべてのサブステップが保持されます。
Cache Memory (MB)
シミュレーションをメモリにキャッシュ化するかどうかを制御します。 オンの場合、値はメモリキャッシュの最大サイズを表わします。
Output ¶
Output Water Height Is Absolute
このトグルが有効な場合、出力の Water Layer には水面の位置が含まれます。 無効の場合、 Water Layer は各ボクセルの水柱の高さを格納します。
Output Terrain Includes Water Height
有効にすると、出力の Seabed Layer は水を含むように調整されます(つまり、 Water Layer が追加されます)。
Visualization
ビューポートでのHeight Fieldのビジュアライゼーションを制御します。 Unchanged に設定すると、入力のビジュアライゼーション設定が維持されます。 このパラメータが Color by Water Layer または Color by Height Layer に設定されている場合、Height Fieldはそれぞれのレイヤーの値で色付けされます。
Visualize Range
Visualization が Color by Water Layer または Color by Height Layer に設定されている場合、Height Fieldの色を制御します。 この範囲の最初の値は白にマッピングされ、2つ目の値は青にマッピングされます。
Output Velocity (vel)
有効な場合、vel
ベクトルフィールドがソルバによってエクスポートされます。
このフィールドは、流れVelocityを格納します。
Output Acceleration (accel)
有効な場合、加速度ベクトルフィールド(accel
)がソルバによってエクスポートされます。
このフィールドは Lagrangian 加速度(液体のフレームのVelocityの変化)を格納します。
Note
これらの加速度はシミュレーション中に計算する必要があるため、このパラメータを切り替えると、キャッシュが無効になります。
Output Vorticity (vorticity)
このオプションが有効な場合、ソルバの出力にはvorticity
レイヤーが含まれます。
Vorticity(渦速度)とはVelocityフィールドのCurl(渦巻き)で、各ボクセルのローカルスピンの量を測定します。
Bindings ¶
Seabed Layer
衝突地形を含む入力レイヤーの名前。
Water Layer
水のレイヤーの名前。 出力のこのレイヤーには、シミュレーション結果が含まれます。このレイヤーが入力に存在する場合には、初期状態として使用されます。
Source Layer
水のソースを含む入力レイヤーの名前。 Source Layer を使用して、新しい水をシミュレーションに注入できます。
Sink Layer
水のシンクを含む入力レイヤーの名前。 Sink Layer を使用して、シミュレーションから水を削除できます。
Force Mask Layer
フォースマスクを含む入力レイヤーの名前。
このレイヤーの値が0
の場合、フォースが適用されていない場所をマークします。
値を大きくすると(最大1
)、シミュレーションVelocityと入力のvel
ベクトルフィールドのGoal Velocityが一致するまでの時間が短縮されます。
フォースを適用するには、 Constraint Updates の Forces Frequency を有効にする必要があります。
Note
入力のvel
ベクトルフィールドがない場合、0
のGoal Velocityが使用されます。
これは、流れの速度を遅くするDrag(抵抗)フォースとして機能します。
Examples ¶
CanyonFlooding Example for Shallow Water Solver geometry node
このサンプルには、Shallow Water Solverを使用した渓谷の地形を洪水させるシミュレーションネットワークが含まれています。
ShallowWaterFountain Example for Shallow Water Solver geometry node
これは、Shallow Water Solverを使用して噴水を溢れ出させる単純なサンプルです。