imaginaryblend.com

https://matthias-research.github.io/pages/publications/hfFluid.pdf

 

 

 

1次元浅水方程式

1次元の場合、浅水方程式は次のようになります:

  1. 連続の方程式(質量保存): +()=0

  2. 運動量の方程式(運動量保存): ()+(2+122)=0

ここで、 は水の高さ、 はx方向の速度、 は重力加速度です。

C#による簡略化された1次元浅水方程式のサンプル実装

csharp

class ShallowWater1D
{
    float h; // 水の高さ
    float
 u; // 速度
    float g = 9.8f; // 重力加速度
    float dt; // 時間ステップ
    float dx; // グリッドの間隔

    public ShallowWater1D(int size, float deltaTime, float gridSpacing)
    {
        h = new float[size];
        u = new float[size];
        dt = deltaTime;
        dx = gridSpacing;

        // 初期化コード(高さ、速度の設定など)
    }

    // シミュレーションのステップ
    public void StepSimulation()
    {
        // 質量保存の方程式
        for (int i = 1; i < h.Length - 1; i++)
        {
            h[i] -= dt * *1;">

 
 

 

*1:h[i] * u[i] - h[i - 1] * u[i - 1]) / dx);
        }

        // 運動量保存の方程式
        for (int i = 1; i < u.Length - 1; i++)
        {
            u[i] -= dt * ((u[i] * u[i] * h[i] - u[i - 1] * u[i - 1] * h[i - 1]) / dx + g * (h[i] - h[i - 1]) / dx);
        }
    }
}

このコードは、1次元の浅水方程式に基づいて水の高さと速度を更新します。この実装は、質量保存と運動量保存の方程式に従って、各グリッドセルにおける水の高さと速度を更新します。

この論文では、格子ベースと粒子ベースのアプローチを組み合わせたハイブリッドな水シミュレーション方法を紹介しています。特別な浅水域ソルバーは、任意の地形の傾斜、任意の水深を扱うことができ、湿潤・乾燥領域の追跡をサポートします。開放水域のシーンを処理するために、非反射境界条件を扱う方法を導入しています。高さのある場所で表現できない液体の領域、例えば砕ける波、滝、剛体や軟体との相互作用による飛沫は、自動的にスプレー、スプラッシュ、泡の粒子に変換されます。これらの粒子は単純な非相互作用する点質量として扱われ、高さ場の流体と質量と運動量を交換します。また、水流に沿って移動する小規模な波を手続き的に追加する方法も提案しています。この方法の効果を、ビーチ、大きな岩、急峻な崖、滝を含む大きな流れる川の渓谷など、さまざまなテストシーンで示しています。格子と粒子のシミュレーションはどちらもCUDAで実装されており、現代のGPUで全ての例においてリアルタイムパフォーマンスを達成しています。

この論文は、コンピュータグラフィックス、特に物理ベースのモデリング、3次元グラフィックス、リアリズム、アニメーション、シミュレーションおよびモデリングの分野における技術的進歩を示しています。

 

この論文の導入部では、物理ベースの効果がコンピュータゲームにおいてどのように普及してきたかについて論じています。

  1. 物理ベースの効果の人気増加: 物理ベースの効果は、コンピュータゲームにおいてますます人気が高まっています。以前は手描きでアニメーションされていた機能も、現在ではシミュレーターによって駆動されています。この分野で最も重要な例は、剛体と粒子のシミュレーションです。

  2. 水の表現の課題: しかし、川、湖、海などの大規模な水域は、まだ手続き的なアプローチを使用してアニメーションされることが多いです。これは、これらのシナリオにおける大きなシミュレーション領域が原因です。3D流体シミュレーションを使用して湖の表面の詳細を得るには、オイラー法では数百万の格子セル、SPHアプローチでは数百万の粒子が必要になります。

  3. 2D高さ場への単純化: コンピュータゲームなどのリアルタイムアプリケーションのために、問題を3Dから2Dに簡略化し、水域を2Dの高さ場として扱うことが一つの解決策です。これによりシミュレーション時間は大幅に短縮されますが、これには欠点があります。滝や波の転倒のような現象は2D高さ場では表現できません。

  4. 高さ場水を粒子に変換: 著者らは、表面の形状に基づいた特定の基準に基づいて、高さ場の水を自動的に粒子に変換することでこの問題を解決します。これらの粒子は、水面に当たると再び高さ場の水に戻ります。

  5. 2D波方程式の使用: 水面をシミュレートするための一般的な技術は、2D波方程式を解くことです。このアプローチは、水たまりや船の周りの波などの局所的な現象にはうまく機能します。ただし、この数学モデルの主な欠点は、垂直方向の速度場でのみ機能することです。そのため、川の流れや渦のような水平方向の動きに基づく効果は正しく扱うことができません。

  6. 浅水方程式の使用: この制限を克服するため、著者らはシミュレーションに浅水方程式を使用することを選択しました。水平方向の速度場の存在により、浮遊物や泡の粒子を表面上で正しく移動させることができます。

 

この論文の続きのセクションでは、大規模な水域をリアルタイムで、小規模な詳細を含めてシミュレートするための包括的なシステムを構築する方法について説明されています。

  1. システムの新規性: この論文は、既知のコンポーネントを単に組み合わせたものではなく、リアリスティックな水のシナリオとその大規模および小規模な特徴をシミュレートする際に生じる問題を解決するために、いくつかの新しいアプローチを導入しています。

  2. 主な貢献点:

    • 基本的な浅水ソルバーに対するいくつかの改善で、安定性が向上し、任意の地形の傾斜や任意の水深を扱えるようになりました。
    • 滝のような表面の不連続を自動的に検出し、そのような場所の液体体積を質量と運動量を持つ粒子に変換する手法。
    • FFT(高速フーリエ変換)ベースの小規模な波紋を水面に自動的に生成し、移動させる技術。
    • 波が壊れるのを検出するための新しい堅牢な基準と、高さ場の流体をスプレー、スプラッシュ、泡を作る粒子に変換する方法。
    • シミュレーション領域の境界で波を吸収し、開放水域のシーンを扱う方法。
  3. 関連する研究:

    • 水のアニメーションを生成するための手続き的手法は、コンピュータグラフィックスの初期から使用されています。
    • 大規模な水域のアニメーションを作成するために、FFTを用いた海洋波のモデリングに関する複数の論文があります。これらの方法は高解像度の大規模な水アニメーションを生成するのに適していますが、固体物体との相互作用を容易にモデル化することはできず、渦を生成することもできません。

この導入部では、水のリアルタイムシミュレーションに関する従来のアプローチの限界と、著者らがこれらの限界を克服するために開発した新しい手法の概要を説明しています。これは、水の動きとその特性をよりリアリスティックに再現するための重要なステップです。

この論文の「方法」セクションでは、水シミュレーションのための全体的なアルゴリズムが詳細に説明されています。目的は、研究結果を再現するために必要な情報を提供することです。読者は数式を飛ばして、テキストの説明に集中することで方法の概要を把握することができます。

アルゴリズムの主なステップは以下の通りです:

  1. 高さ場流体シミュレーション(セクション2.1):

    • このステップでは、水の表面の高さを計算し、その動きをシミュレートします。ここで浅水方程式や他の流体力学的モデルが用いられる可能性があります。
  2. 固体シミュレーション(任意の標準シミュレーターを使用):

    • この部分では、水中または水面上の固体オブジェクト(例えば船や浮遊物)の動きをシミュレートします。
  3. 高さ場と固体の双方向カップリング(セクション2.3):

    • このステップでは、流体と固体オブジェクトとの相互作用を扱います。これには、固体が水の動きに影響を与え、逆に水が固体に力を及ぼすことが含まれます。
  4. 粒子の生成とシミュレーション(セクション2.4):

    • ここでは、水滴や泡のような水の粒子を生成し、それらの動きをシミュレートします。これには、高さ場から粒子への変換、および粒子の動きや相互作用が含まれます。
  5. レンダリング(セクション2.5):

    • 最後のステップでは、計算されたすべてのデータを用いて、実際の水のシーンを視覚的に表現します。これには、光の屈折や反射、水の透明度などの視覚的効果が含まれます。

このアルゴリズムは、水のリアルタイムシミュレーションのための包括的なアプローチを提供し、水のさまざまな側面を統合的に扱うことを目指しています。それぞれのステップは、水の動きとその特性を正確に再現するために重要です。

このセクションでは、主なループと高さ場流体シミュレーションの方法が詳述されています。

主なループ(アルゴリズム1)

  1. 高さ場流体シミュレーション:

    • 重力、外部力、境界条件を考慮して、高さ場流体をシミュレートします(セクション2.1)。
  2. 固体のシミュレーション:

    • 標準的なシミュレーションパッケージを使用して、剛体や軟体などの固体をシミュレートします。
  3. 固体と高さ場流体のカップリング:

    • 固体と高さ場流体を連結し、流体が固体に及ぼす力(浮力、抗力、揚力)を計算し適用します(セクション2.3)。
  4. 粒子の生成とシミュレーション:

    • 高さ場で十分に解決できない液体領域を粒子で置き換え、粒子の動きをシミュレートします(セクション2.4)。
  5. レンダリング:

    • シミュレーション格子の解像度以下の波長の小波を表す追加の変位マップで高さ場をレンダリングします。スプラッシュ粒子はスクリーン空間技術でレンダリングされます(セクション2.5)。

高さ場流体シミュレーション(セクション2.1)

  • 浅水方程式の使用: 流体の表面を2D高さ場で表すことで、完全なナヴィエ・ストークス方程式を簡略化します。重力はy軸に沿って作用し、x-z平面が2Dシミュレーションの平面です。

  • 方程式: 水の深さ、地形の底のy座標、水面のy座標=+、流体の水平速度=(,)、重力、外部加速度extを用いて、質量保存と運動量保存を記述します。

  • 陽的積分法の使用: 不安定になりうる項を特別に扱いながら、陽的積分法を使用しています。

  • 格子の離散化: Bri05に従い、高さ,,をセル中心に、速度成分+12,,,+12を面に格納します。

  • 時間分割技術の適用: まず速度場の自己移流を解き、次に高さ場と速度場を時間で前進させます。

このアプローチは、水の動きをリアルタイムで正確に再現するために重要です。それぞれのステップは、水のさまざまな側面を統合的に扱うことを目指しています。

 

セクション2.1.1、2.1.2、および2.1.3では、高さ場流体シミュレーションの重要な部分である速度移流、高さの積分、および速度の積分について説明しています。

2.1.1 速度移流 (Velocity Advection)

  • 修正されたMacCormack法: +12,,+12の移流には、条件付き安定な修正MacCormack法を使用します。これは[SFK∗08]で提案された方法です。

  • セミラグランジュ法へのフォールバック: 結果が双線形補間の速度値の範囲内にない場合、最初のセミラグランジュサブステップで提案された通り、セミラグランジュ法にフォールバックします。

2.1.2 高さの積分 (Height Integration)

  • 質量保存: 方程式(1)を再記述し、質量保存のために明示的に高さを積分します。このステップは、滝による不連続性をセクション2.4.3で考慮に入れて修正されます。

  • 実践的な安定性: [Hes07]に比べて、実践的により安定したシミュレーションを提供します。

2.1.3 速度の積分 (Velocity Integration)

  • 水面高さの勾配を考慮: 水面の高さの勾配を考慮して、面の速度を更新します。このステップもセクション2.4.3で修正されます。

これらのステップは、水の流れのダイナミクスを正確にモデル化し、リアルタイムの水シミュレーションにおいて重要な役割を果たします。これにより、水の動きと表面の高さが時間と共にどのように変化するかを計算できます。

 

このセクションでは、水の表面をシミュレートするためのコンピュータグラフィックスにおけるさまざまなアプローチが概説されています。

  1. 2D高さ場に基づく波方程式: 最初に波方程式を解いて水面をシミュレートしたのは[KM90]と[Tes99]で、2D高さ場に内部境界を設けました。多くの研究者が、隣接するセルをパイプで繋いで水がセルの境界を越えて流れるようにする「パイプモデル」を使用しました。

  2. パイプモデルの拡張: O’BrienとHodgins[OH95]は、パイプモデルにスプラッシュ粒子を追加し、水と剛体の相互作用をモデリングしました。MouldとYang[MY97]はバブルとドロップレットをモデル化しました。HolmbergとWünsche[HW04]は滝をシミュレートするために堰モデルを使用しました。この方法は後にGPU実装によって加速されました。

  3. 浅水方程式の導入: 浅水方程式(SWE)は、水面に垂直な2D速度場の進化を高さ場と共に記述します。これにより、渦や泡などの水の現象を捉えることができます。SWEは[LvdP02]によってコンピュータグラフィックスに導入されました。

  4. SWEに基づくその他の研究: Hagenらは、GPU上でSWEを解く有限体積法を使用して、不規則な地形上の水の流れをシミュレートしました。また、[TMFSG07]は三角形メッシュパッチを自動生成して波をシミュレートする方法を提案しました。[WMT07]はSWEに表面張力を追加して任意の表面上の水の流れをシミュレートしました。

  5. その他の水のシミュレーション方法: 大規模な水域のモデリングには、川を含むさまざまなアプローチがあります。例えば、[YNBH09]は流れ関数を使用し、[BAB09]は2Dナヴィエ・ストークス方程式をパイプモデルと緩く結合させています。

  6. 全3D水シミュレーション: この論文の範囲を超える、完全な3D水シミュレーションに関する多くの研究があります。著者らは、格子ベースのシミュレーションについてBridsonの本[Bri08]を、粒子ベースのシミュレーションについてはSolenthalerとPajarolaの論文[SP09]を参照することを推奨しています。

このセクションでは、水のリアルタイムシミュレーションのための既存のアプローチと、それらが抱える問題点や限界についての理解を深めています。また、新しい手法や技術の必要性を説明しています。