流体

流体を使用すると、水、油、ハチミツ、溶岩などの液状の物質の物理特性をシミュレートすることができます。また、重力効果、オブジェクトとの衝突、モーション フィールドによるかく乱を再現して目的の結果を得ることができます。

基本概念

流体シミュレーションは以下のコンポーネントによって構成されます。

パフォーマンスの最適化

流体シミュレーションを実行する場合、その目的は視覚的に魅力のある結果をできるだけ短時間で作成することです。そのためには、詳細で正確な結果と、消費されるメモリおよび計算時間のバランスをとるために利用できるオプションを理解することが重要です。

シミュレーションの詳細さを制御する主な設定は、[ソルバ パラメータ](Solver Parameters)パネルの[ソルバのプロパティ](Solver Properties)グループにある[ベース ボクセル サイズ](Base Voxel Size)オプションです。この設定は正確さにも大きな影響を与えます。通常、プレビューの段階ではこの値を大きくして、詳細さのレベルを下げて短時間で作業を確認します。満足できる効果が得られたら、この値を小さくして、より詳細なシミュレーションを実行します。

どのベース ボクセル サイズでも、[ソルバ パラメータ](Solver Parameters)パネルの[シミュレーション パラメータ](Simulation Parameters)グループにある[転送ステップ](Transport Stepping)および[時間ステップ](Time Stepping)アトリビュートはシミュレーションの正確さを向上させることができます。ただし、必要な計算が増えるため実行に時間がかかります。詳細は、次の「適応性機能の設定」のセクションを参照してください。

ベース ボクセル サイズと適応性設定を適切に組み合わせるには、モデリングされたシーンのスケールに対するパーティクルの速度が重要です。たとえば、パーティクルの速度が、単一の時間ステップ内でコライダの片側から別の片側に移動できるほど早い場合、衝突が発生しなかったように表示されます。さらに、パーティクルがコライダに深く浸透しすぎると、「漏れ」が発生したかのように誤った側にパーティクルが移動することがあります。これらの問題を診断する方法として、[表示設定](Display Settings)パネルを使用してカラー グラデーションとして表示する速度チャネルを設定し、パーティクルの速度を調べることができます。

たとえば水滴を 1 つシミュレートするなど、非常に小さなスケールを扱う場合は、距離と時間スケールが短いのに対して速度が非常に大きいため、シーンのフレーム レートを高くする必要があります。

適応性機能の設定

[シミュレーション ビュー](Simulation View)ウィンドウの[シミュレーション パラメータ](Simulation Parameters)パネルにある適応性機能関連の設定を使用して、自動的に解像度を調整し、メモリと計算時間を節約しながら必要なときにいつでも最大の詳細さ実現します。これを制御するための 4 つのオプションがあります。

[空間適応性](Spacial Adaptivity)

[空間適応性](Spacial Adaptivity)オプションは、詳細さの必要性が最も少ない流体の中心に低解像度のボクセルを作成するために使用されます。衝突オブジェクトの境界や自由サーフェスに沿って高速移動する領域内(大気との境界)ではベース ボクセル サイズで設定する最大解像度が保持されます。

通常、このオプションはほとんどのシミュレーションで有効です。

[過度のパーティクルを削除](Delete Exceeding Particles)

[過度のパーティクルを削除](Delete Exceeding Particles)オプションは、解像度の低い領域でボクセルごとのパーティクル数がしきい値を超えると、一部のパーティクルを除去します。ボリュームが失われるか、または空間適応シミュレーションと非適応シミュレーションの差が大きすぎる場合は、このオプションを無効にします。

[転送ステップ](Transport Steps)および[時間ステップ](Time Steps)

[シミュレーション パラメータ](Simulation Parameters)パネルの[転送ステップ](Transport Steps)および[時間ステップ](Time Steps)オプションは、各フレームで計算が実行される回数を制御します。計算の回数が増えるほど精度は向上しますが、計算が完了するまでに時間がかかります。ボリュームの損失、パーティクルの密集、自然爆発、コライダ間の漏れなどの問題が発生する場合は、これらの設定を調整します。

  • [転送ステップ](Transport Steps)は、圧力計算実行後に、ボクセルの速度フィールドに沿ったパーティクルの移流に使用する反復回数をコントロールします。固定コライダの間をパーティクルが通過してしまうなどの問題が発生している場合は、最初にこれらの設定を調整することをお勧めします。これらの設定で、余分な計算時間をかけずに問題を解決できる可能性があります。ただし、それぞれの反復で、圧力の再計算とコライダやその他のソリッドの再ボクセル化は行われないので、高速で移動するコライダや、その他のより複雑な状況では[転送ステップ](Transport Steps)設定は効果がありません。
  • [時間ステップ](Time Steps)は、フレームごとに、ボクセル化、圧力、転送フェーズなどのシミュレーション全体の反復回数をコントロールします。これらの設定によって、特に高速時の精度が高まりますが、計算時間がかなり長くなります。

[転送ステップ](Transport Steps)は、両方のコントロールが連携し、各時間ステップ内で転送フェーズの反復回数をコントロールします。つまり、各フレームには[時間ステップ](Time Steps)設定に応じて複数の時間ステップを含め、各時間ステップには[転送ステップ](Transport Steps)設定に応じて複数の転送ステップを含めることができます。

[適応性](Adaptivity)は、追加のサブステップがトリガされるかどうかをコントロールします。フレームでパーティクルが移動する距離や速度に応じて、そのフレームで実行される反復の回数を変えることができます。 値は、ノンリニア スケール上にあります。
  • 0.0 では、パーティクルは追加のサブステップをトリガすることなく、効果的に無限の距離を移動することができます。
  • 0.1 の値では、パーティクルは追加のサブステップをトリガする前に、最大 10 ボクセル分の長さを移動することができます。
  • 0.32 の値では、パーティクルは追加のサブステップをトリガする前に、約 5 ボクセル分の長さを移動することができます。
  • 0.5 の値では、パーティクルは追加のサブステップをトリガする前に、最大 1.0 ボクセル分の長さを移動することができます。
  • 0.75 の値では、パーティクルは追加のサブステップをトリガする前に、約 0.5 ボクセル分の長さを移動することができます。
  • 1.0 の値では、パーティクルは追加のサブステップをトリガする前に、最大 0.001 ボクセル分の長さを移動することができます。
[最小転送ステップ](Min Transport)/[時間ステップ](Time Steps)の反復は常にフレームごとに実行されます。つまり、パーティクルがそれほど高速で移動していない場合でも、ある程度のサブステップ数を強制することができます。ただし通常は、代わりに[適応性](Adaptivity)を調整する方が不要な計算を回避することができます。
注: 1 回の反復だけがシミュレーションの開始フレームで実行されます。

[最大ステップ](Max Steps)は、フレームごとに実行される反復の合計回数を設定し、実行される計算の量を制限します。ただし、パーティクルは常に、その速度とフレームの長さに必要な距離全体を移動します。つまり、パーティクルは[適応性](Adaptivity)によって設定された制限に従わない場合があります。たとえば、[適応性](Adaptivity)を 0.5 に設定していても、[最大ステップ](Max Steps)が非常に少ない場合、高速のパーティクルは 1 ボクセル分の長さのステップの距離全体に対応できないことがあります。この場合は、距離全体を移動するために、各ステップは 1 ボクセル分の長さより長くなります。

[タイム スケール](Time Scale)は、[転送ステップ](Transport Steps)でのみ使用可能な設定で、パーティクル フローの速度を変更します。値を 1.0 より大きくすると、新しい速度や加速度を生じることなくフローのスピードが速くなります。値を 0.0 と 1.0 の間にすると、スピードが遅くなります。結果が物理的に正しいとは限りませんが、シミュレーションをすばやくリタイムするだけの場合は役に立ちます。しかし、この設定は特に極端な値を使用する場合に望ましくない副作用をもたらすことがあるので注意してください。

スケールに関する注意事項

流体シミュレーションを扱う作業では、スケールは最終結果の信頼性に直接影響するため非常に重要です。たとえば、古い映画に使われているような物理的にスケールダウンした湖やプールのモデルが本物には見えないことを考えてみましょう。現実世界での水が作る 1 メートルの波は、ミニチュアの 1 センチメートルの波とは違ってみえます。したがって、適切な量のメモリと計算時間を使用して最良の結果を得るためには、単位について十分に配慮することが重要です。

シミュレーションを構築する際には、考慮すべき 3 つの重要なパラメータがあります。

ボクセル サイズ(Voxel Size)は、シミュレーションの正確さを決定するのに役立ちます。 この値がセンチメートル単位で小さくなるほど、計算はより正確になりますが、メモリとリソースの消費量が増えます。値が大きいほど正確さは低下します。パーティクルが生成されなかったり、パーティクルが衝突サーフェスの上に浮いたり、穴を通過しないように見える場合があります。ボクセル サイズはすべてのメッシュをシミュレーションに転送するときに使用されるため、メッシュの正確さに影響し、パーティクルの最小サイズでもあります。
警告: ボクセル サイズが非常に小さいと、大量のメモリを消費し、システムが不安定になることがあります。

最大単位の設定(Max Unit Setup)は、流体の動作や使用されるメモリの量を決定するので重要です。流体を使用しているときは、シーンの実寸を常に考慮する必要があるため、一般的な単位を使用しないでください。[ディスプレイ単位スケール](Display Unit Scale)を[メートル](Meters)に設定し、シーンのサイズを「現実世界」で考えることが理想です。最大流体(Max Fluids)ではカスタム単位も考慮されますが、既定の単位の変更には注意が必要です。巻き尺を用意しておくと、物を測定して、オブジェクトの実際の大きさを確認することができるので理想的です。15 cm の波は 15 m の波のようには見えないので、単位はシーンの表示方法にも影響します。液体ソルバ(Liquid Solver)の単位のカスタム オーバーライドは、たとえばゲーム エンジンなど、単位による人工的な制限がある場合や、リアルな水を人形の家のスケール サイズでレンダリングするような特殊効果が必要な場合にのみ使用してください。

シーン サイズ(Scene Size)は、[単位設定](Units Setup)で定義されている現実世界の寸法で表現されるシーンの大きさです。シーン サイズは、ボクセル サイズの設定に直接影響します。たとえば液体シーンの境界が 10 km × 10 km で、ボクセル サイズを 0.05 cm に設定した場合、必要なメモリが大きくなりすぎるため、ほとんどの場合計算は不可能です。そこで、十分大きなボクセル サイズから始め、適切なメモリ使用量の範囲で適切な結果が得られるまで、サイズを調整しながら作業を進めるのが理想的です。また、ボクセル グリッドの密度を高くするほど、シミュレーションの計算時間は長くなります。

[転送ステップ](Transport Steps)と[時間](Time)オプションはどちらもシミュレーションの品質を決定しますが、全体的な品質よりもパーティクルの移動速度に対してより大きな影響があります。

注: 液体オブジェクト(Liquid Object)またはモーション フィールド(Motion Field)には絶対にスケール(Scale)ツールを使用しないでください。

小さなスケールの処理

小さなスケールを使用するシミュレーションでは、距離の短さと小さなボクセル サイズに対して速度が大きくなるため、特別な注意事項があります。特に、良い結果を得るには[時間ステップ](Time Steps)と[転送ステップ](Transport Steps)の設定を増やす必要があります。一部のケースでは、高速カメラをエミュレートするためにシーンのフレーム レートを大きくする必要もあります。

水滴を 1 つシミュレートするなど、極めて小さなスケールを扱う場合は、いくつかの追加の調整が必要になることがあります。たとえば、[表面張力](Surface Tension)は時間ステップを増やしても正確な結果にならないことがあるので、物理的に正確でない値を使用して現実に近い結果を得る方が効率的な場合があります。場合によっては、[重力のマグニチュード](Gravity Magnitude)の値を下げると効果的です。

これらのスケールでは効果がない渦度や水滴などの設定を無効にして、無駄な計算を回避することもできます。

メッシュ

メッシュは、結果を表す別の方法です。レンダーするだけでなく、Alembic またはその他のキャッシュとして書き出し、他のシーンやソフトウェアで使用できるようにできます。シェイプでメッシュがアクティブでない場合、メッシュにはポリゴンはありません。