株式会社デジタル・フロンティア-Digital Frontier

Header

Main

  • TOP
  • DF TALK
  • SIGGRAPH2015論文(流体セッション)の紹介

SIGGRAPH2015論文(流体セッション)の紹介

2015/10/19

Tag: ,

皆さん、こんにちは。開発部の川田です。

今回は、SIGGRAPH2015の流体セッションの1つであるWave-Particle Fluidityの中から、論文紹介をしたいと思います。

Restoring the Missing Vorticity in Advection-Projection Fluid SolversThe Affine Particle-In-Cell Methodという流体の詳細度を向上させる論文について、また、水面のアニメーションを高精細に変換する論文Water Wave Animation via Wavefront Parameter Interpolationについて、これらの合計三つの論文の説明をします。
各論文で、最初に全体的な説明をし、次に手法の主なアイデアと特徴(少し技術的な話)について説明します。
その後に、論文を理解する補助になりそうな情報も入れつつ、感想も書きました。

1. Restoring the Missing Vorticity in Advection-Projection Fluid Solvers

一つ目のこの論文は、流体シミュレーションのときに失われやすい動きの詳細を、計算コストの低い別の方法で求めて乱流のような渦として復元させて補う方法です。

解像度をあまり上げなくても、高い解像度の計算に近い動きを表現し、ダイナミックに変化していく乱流のような流体現象を作り出します。

渦の伸縮も考慮することが可能でリアルな表現が出来て、渦を復元させることで詳細な渦も失うことなく生成できます。

この論文を用いた結果動画は以下です(2:23付近に、ダイナミックに変化していく流れの例が出てきます)。

この論文の著者の公式サイトではソースコードも公開されています。

アイデアと特徴

新たにIVOCK (Integrated Vorticity of Convective Kinematics)という方法を使って、流体の移動を計算する移流項目で失われる流体の詳細情報を渦の方程式の違反に相当する部分とみなして、渦の復元をすることで渦情報の損失を防ぎます。

しかも、どのような移流項目計算を使っても本手法は適用出来るので、流体ソルバー依存になりにくく、この点も優れています。

移流計算の前後で渦情報の違い(速度場の差分)を求め、そして、さらに渦の伸縮を考慮します。そして、圧力計算については、よりコストの低いマルチグリッドのV-cycle計算を、復元する渦情報を基にして行います。その結果、失われた渦を効率的に復元出来るようになります。

移流項目で失われる回転成分としての渦(角運動量)に対して操作を行うことで、回転成分が継続的に自然と蓄積していきます。そのおかげで、例えばVorticity Confinementと呼ばれる渦情報を増幅する手法では難しいような、時間に伴う渦の大きさの変化などの表現が出来ます。

移流項目で失われる情報を補う既存手法はありましたが、(速度場の差分としての)損失情報を渦の情報としてはっきりと扱って、しかも、移流項目に結びつけながら渦を作り出す圧力計算の解釈を行ったという点が優れた方法となっています。

感想

渦の伸縮と圧力計算に相当するV-cycle系計算の組み合わせ次第で、渦の特定の形や動きを再現したりといった応用も出来そうです。(一方で、通常は圧力計算が、渦の挙動を支配的に決めることが多い)

火炎については、大きな圧力が空間に追加されたりするので、流体の非圧縮条件を満たしません。しかし、この手法では質量保存なども考慮して、火炎を扱えるように改良しています。このように、カスタマイズにも比較的適している手法だと思います。

Vorticity Confinement手法などから常に発展を続ける、渦による詳細を生成する方法ですが、ここまで関連手法が向上してきた過程も整理された論文で、詳細を追加する手法の中でも代表的な論文だと思います。論文中の研究のモチベーションや背景を読むだけでも過去の手法についていろいろな勉強が出来て、大変役立ちそうです。

ちなみに、以下はVorticity Confinement手法と本手法の比較画像です((c)本論文の著者、論文中から引用した画像です)。

左から3つ(上下共に)はVorticity Confinementを使って左から順に渦の増幅度合いを強くしていった例で、一番右(上下)の画像は本手法の適用結果です。本手法の方が比較的、全体的に均一でなく、大きさが動的に変化した流れになっていることが分かると思います。

渦に関して興味があれば、以下なども分かりやすいと思います(流体の制御についても、詳しく説明されているので)。
Vortex Based Smoke Simulation and Control

格子を使った流体シミュレーションについての基本的な話は、流体シミュレーションを使った自然現象の表現をご覧下さい!

2. Water Wave Animation via Wavefront Parameter Interpolation

二つ目の論文は、入力の水面のアニメーションを、細かい波面情報を作る関数を使って高解像度に変換する方法です。

この方法では純粋な流体シミュレーションを解かないので計算コストが低く、また、過去にあった波長関数などを使う方法よりもリアルで高精細なアニメーションが作り出せます。

また、水面波の要素として重要な屈折、反射、回折といった現象も実現できて、表現性の高い水面を生成することが可能になります。

この論文を用いた結果動画は以下です。

この論文の著者の公式サイトはこちら

アイデアと特徴

水面アニメーションを表現する入力メッシュに対して、それと交錯していくように波が移動していくと考えて、水面波の先頭をトラッキングします。そして、先頭とメッシュの接点の情報を基に細かい波を構築していきます。

Eikonal方程式という波動における波面を表現する方程式を使っていて、異なる波の振幅情報を合成します。さざなみや表面張力波などについても表現出来ます。

低解像度から高解像度への情報の補間を関数(本手法の独自の方法)を使って行うので、波の周波数のダイキスト限界を超えて、これまでよりも格段に多い数の、かつ、詳細な波面を作り出せます。
具体的には、波を表現するEikonal方程式が多価関数として扱われることになります。この関数を使って波の方程式を段階的に解くことで、複数の重なった波の位置や高さをよりスムーズで高精細な形で記述することが出来るようになっています。しかも、似た挙動の波を近似的に省略して扱える処理も行っていて、さらにコストを下げることに成功しています。

これにより、波長関数では特定のパターンの波の表現しか扱えなかったのに対して、複雑で色々な水面現象を表現可能です。
また、今回の方法で多価関数を使って波面のトラッキングが出来るようになった利点として、干渉や反射といったという波が移動していくときに起こる独特の現象が扱えることも挙げられます。

ちなみに、以下は水面アニメーションを表現する入力メッシュにおいて、波面の先頭をトラッキングしている様子です((c)本論文の著者、論文の動画から引用した画像です)。

感想

本手法を用いずに従来のように流体シミュレーションをした結果との比較もあり、遜色ない結果が得られていると思いますし、この手法の効果の高さが分かります。

制限としては、動的なオブジェクトの干渉はまだ扱えないですが、GPU実装にも対応できるアルゴリズムにもなっています。

水面の入力メッシュで、大きな乱流や極端に激しい動きをすでに取得できていると考えると、本手法は特に効果的であると思います。なぜなら、大きな乱流や極端に激しい動き以外の、流体シミュレーションではコストが非常にかかるような微細な動きについても、今回作り出すことが出来るからです。

Guide Shapes for High Resolution Naturalistic Liquid Simulationという既存方法もあり、この既存手法では水面の表面の特定の部分だけを高解像度で流体シミュレーションして、それ以外の部分は低解像度で計算します。この既存手法では、本手法ではあまり想定していない水しぶきなども表現出来ています。

今後は、多価関数をさらに発展させることで扱える流体現象のバリエーションを増やすことも出来るかもしれません。しかも、流体シミュレーションを解くよりは空間や時間依存性の制限を受けにくい関数ベースの方法なので、ユーザが調整しやすかったりと、制御の観点からもとても意義ある方法ではないでしょうか。
実際、ユーザが直感的に波の強さや大きさを細かく指定できる、ペイントツールのようなインタフェースを使ったデモも、論文動画の中に含まれています。

3. The Affine Particle-In-Cell Method

三つ目の論文は、計算を安定させつつも、流体の渦の成分が失われにくく出来る方法です。この方法を使うと、例えば、注いだワインがグラスにコリジョンして乱れながら、勢いよく外にこぼれるといった挙動が、安定した計算で実現出来ます。

この方法では、パーティクルと格子を用いたハイブリッド手法で、パーティクルは主に流体の移動とトポロジーの変化を扱い、また、格子の部分は主に力学的な情報やコリジョンを扱っています。

CGではよく用いられているFLIP法は計算の安定性に不安があるの対して、この方法では安定して計算が出来ます。しかも渦の成分もあまり失われずに維持できるということで、安定性と正確の両方を実現した論文になっています。

この論文の著者の公式サイトはこちら(動画もあり)

アイデアと特徴

流体シミュレーションをする場合は、計算項目ごとに項目に適した計算方法を選ぶことも多く、パーティクルと格子の2つを複合的に用いる方法もあります。そのような方法の代表的なものとしてまず、PIC法があります。
PIC法では、流体を一般的な流体の振る舞いを持つ非圧縮性にするために、格子で圧力計算を行うという方法が用いられています。
一方で、PIC法では移流項目のような流体の移動を計算する部分については、パーティクルで流体を運んで計算を行います。

今回の方法では、このようなPIC法が持つ数値拡散の問題を解決しました。そもそも、PIC法には、圧力計算をするためにパーティクル情報を格子情報に変換する部分があり、この変換部分で数値拡散の問題が起きていました。
変換時に、複数のパーティクルの情報が1グリッドの中に基本的に格納されるため、回転成分が特に失われてしまうからです。

本手法では最初に、角運動量をパーティクルに対して保持させることが出来るようにします。
次に、流体における回転や移動といった情報を考慮できるように、パーティクルと格子の変換時に、アフィン変換を用いることを考えます。
これにより、パーティクルと格子間の情報の受け渡しの際に、今回新たな情報として、角運動量も連続的に維持出来ることになります。

感想

既存手法に対して新たに今回必要となる、アフィン変換の行列演算や追加情報のデータも比較的小さく、現実的かつ効率的な方法と思えます。移流項目において数値発散が少ないFLIP法のように、数値誤差も少なくてすみますし、FLIP法が持っていた計算の不安定性についても改善出来ています。
このような優れた計算方法を、PIC法から発展させて提案したわけです。

また、色々な流体についての、本手法とPIC法との比較が豊富で、広く効果的な手法であることが分かります。FLIP法の安定性についても本手法との比較をしながら述べられているので、こちらについても勉強になると思います。

パーティクルに回転といった情報を持たせるという意味では、古典的なA Vortex Particle Method for Smoke, Water and Explosionsといった流れに沿って移動していく渦の情報を(パーティクル内に持たせて)注入するような手法がありました。一方で、パーティクルと格子間の情報の受け渡し部分に着目して、回転成分を出来るだけ維持するという本手法の試みは、とてもユニークだと思います。

今回の手法のように、パーティクルと格子の役割分担や目的を明確にして利用することで、非常に高い効果が出ることもこの度示されたので、そのあたりもさらに追求がなされる可能性もあります。過去には他にも、例えば爆発において火炎が急激に広がる高速の部分はパーティクルを用いて、爆発が収束して低速になったときは格子法に切り替えるといった手法もあります(Simulating Gaseous Fluids with Low and High Speeds)。
また、爆発のような高速で伝播する流体シミュレーションについてさらに興味があれば、爆発シミュレーションの制御もご覧下さい。

参考までに

パーティクルと格子の表現の違いについて知りたい場合は、以下も分かりやすいと思います。
Fluid Simulation For Computer Graphics: A Tutorial in Grid Based and ParticleBased Methods
以下はパーティクルを用いた既存手法のまとめの論文で、こちらも参考になると思います。
SPH Fluids in Computer Graphics

さらに、上記の2つの論文で登場した渦について詳しく知りたい場合は、以下も渦手法について比較されていて便利だと思います。
Research on Vortex-Based Fluid Animation

一方で、以下の動画のような元となるシミュレーションを、ウェーブレット関数を基にした処理を適用してさらに高解像度化する優れた研究もありますが、元となるシミュレーション手法自体を向上させた本手法とは性質が異なります。

DFでエフェクト室と共同で行っている高解像度化に関する研究開発について興味があれば、流体シミュレーションのアップレゾ(高解像度化)についてをご覧下さい!

全体の感想

最後になりましたが、今回の発表では流体シミュレーションをするときに生じる詳細(の損失)を、復元したり強化するための方法が目立ちました。
1つ目と3つ目の論文はいづれも色々な流体を扱えつつも、詳細計算についての着目点が異なります。また、2つ目の論文は水面の表現に特化していました。

このように優れた手法がたくさん世に出ている一方で、近年は流体の形状などの制御に関する論文が少ないように思います。
また、今年のシーグラフアジア2015でも夏に続いていくつか発表される、データベースを利用した流体手法についても高い可能性を秘めていて興味深いと思います。流体分野では、多岐にわたるテーマについてハイレベルな研究が行われていることを日々実感しています。

今回は以上となりますが、機会があれば他の流体系の論文も紹介出来ればと思います。
読んでいただき、どうもありがとうございました!


※免責事項※
本記事内で公開している全ての手法・コードの有用性、安全性について、当方は一切の保証を与えるものではありません。
これらのコードを使用したことによって引き起こる直接的、間接的な損害に対し、当方は一切責任を負うものではありません。
自己責任でご使用ください。

Pocket

コメント

コメントはありません

コメントフォーム

コメントは承認制ですので、即時に反映されません。ご了承ください。

*