SIGGRAPH2017論文(流体セッション)の紹介
2017/11/27
皆さん、こんにちは。開発部の川田です。
今回は、SIGGRAPH2017の流体セッションから3つの論文を紹介したいと思います。全体像やアイデアをつかめるような直感的説明を心がけたつもりです。
▼目次
- Water Wave Packets
- Perceptual Evaluation of Liquid Simulation Methods
- Data-Driven Synthesis of Smoke Flows with CNN-based Feature Descriptors
1. Water Wave Packets
一つ目のこの論文は、回折などの水らしい特徴を実現しながら、高速かつ物理的にもリアルな波面表現を行えるものです。
波面の振る舞いを計算する情報を持った多くのパーティクルをただよわせ、波面の上下や広がり、また移動を実現しています。
ここでは各パーティクルの波面情報をその場で合成して、波面情報として求めます。ですので、これまでは通常複雑で重いシミュレーションをして複雑な流れを解析して波面伝播を求めなければならなかったのですが、今回は基本的にはパーティクル情報からフレームごとに計算できます。
複雑な計算結果には及ばないものの、分離も含めた波面同士の影響も考慮した上で、リアルで複雑な波面表現が可能になります。この論文を用いた結果動画は以下です。
この論文の著者の公式サイトはこちら
また、この論文は以前紹介した Water Wave Animation via Wavefront Parameter Interpolation の発展版ですので、今回の手法が表現できる波面の物理的な動きの詳細については、SIGGRAPH2015論文(流体セッション)の紹介をご覧下さい。
アイデアや特徴
パーティクル自体が波面のエネルギー情報を運んで伝わっていく形にしているので、波面の減衰についてもコントロールできますし、波の周波数によってスピードや挙動の違いを簡単に表現したりもできます。
パーティクルが持つ個別の波面とその合成計算だけでよく、基本的に(ボトルネックになりがちな)複雑な水面全体の計算をする必要がありません。簡単な合成計算の例ですが、以下の図をイメージしてもらうとわかりやすいと思います(サイン関数とガウス関数の合成: 論文中の画像です「以後も引用画像については同じ」)
さらに、パーティクルは波面の前後情報(2つのポイントを利用)を持つことができるのも特徴的で、形状の変化や回転も考慮できる点も斬新です。コントロールの観点からもいろいろと工夫があり、従来のようにパーティクルのライフを調整する以外にも、パーティクルの全体数を指定して制御することも可能です。
これは、各パーティクルが保持できる波面のエネルギー情報を利用することで、全体のエネルギー量を求めることができるからで、シミュレーション自体も非常に安定します(たとえば、ユーザが途中で波面を極端にいじっても、破綻がおきにくい)。
感想
今年のシーグラフのリアルタイムデモも好評だったようです。
岸での波の回折や波の分離が起こり続けるというようなこともなく(あるいは制御して防ぐことができて)、また、急激な船の動きからは面が不安定になったりすることも少ないと思います。パーティクルに情報を格納できるので波面の分離の回数を制御することも可能でしょうから(一方で、ボリュームシミュレーションでは難しい)、波面の物理現象の複雑さを分離回数を基準にして階層的に設定できそうです。
2. Perceptual Evaluation of Liquid Simulation Methods
次のこの論文は、様々な流体シミュレーション手法結果のリアルさや視覚的な印象についての評価をするというものです。
実写の例を提示して、CGの有名な流体シミュレーションの各種方法を使ってそれを再現し、実例と一番近いと思う方法を投票してもらい、そのデータを分析することで様々な興味深い結果を得ています。
明確な評価基準を提案しながら、具体的かつ規模の大きな調査を行ったことが特に新しく、もちろん映像制作の現場にも役立つかもしれない調査結果が得られています。この論文を用いた結果動画は以下です。
公式論文はこちら
アイデアや特徴
調査結果で特に印象的なものは以下です。
- パーティクル数が比較的多くてもよい場合は、SPH法などの古典的な方法が好まれる
- 計算コストをある程度優先すると、FLIPやAPICなどのパーティクルとグリッドのハイブリッド手法(近年のスタンダード)の方がリアルに見える
- 学習を用いて水しぶきを表現する手法は、比較的スケールの大きいものにおいてその視覚的効果が出やすい
1つ目の結果では、水しぶきの挙動に特に関係していて、水しぶきの表現に重要なパーティクル数が多い場合にはリアルに見えやすいということを示しています。FLIPやAPICなどのスタンダード手法は、水しぶきが出にくい設定(⇔パーティクル手法)になることがあるため、SPHのようなパーティクルだけの手法のほうが好まれるという結果になっていると思われます。
次に2つ目では、リーズナブルな計算コストでのシミュレーション下では、FLIPやAPICなどの精度が向上し、逆に1で好まれた古典的なパーティクル手法はパーティクル数がコストの都合で減少してリアルに見えないという結果になっています。
最後の結果は、FLIP手法とFLIPにニューラルネットワークの理論を用いた手法(MLFILPでLiquid Splash Modeling with Neural Networksの略)の比較についてです。ダムの崩壊のようなスケールの大きな水しぶきでは、ニューラルネットワークを用いるMLFILPのほうがFLIPよりもリアルに見えるという結果が出ています。一方で、海岸の波しぶき程度の大きさのものでは、ダムの崩壊のときよりもMLFILPの視覚的印象が下がってしまうという結果も出ています。
参考: Liquid Splash Modeling with Neural Networksは水しぶきデータをニューラルネットワークで学習するようにFLIP法を改良したものです。
感想
現場で目的の映像作りのために流体シミュレーション手法をどれにするかを考えるとき、今回の調査結果は大規模なものなのである程度普遍的になりうる基準として活用できるかもしれません。水しぶきの表現の映像にはどの手法が受け入れられやすいか、コスト最優先ならどのシミュレーション手法が妥当かなどいろいろと役立つのではと思います。また、パーティクルとグリッドのハイブリッド手法の貢献度の配分を考える必要があるならば、このような調査が役立つ可能性はあります。
ここでは思い切ってレンダリングを透明非透明の2パターンに絞っています。そのような点も、確固たる基準を持って調査している側面で、様々な分析結果が出た理由として習うべき姿勢と感じます。考えられる今後の調査としては、しぶきのスローやズームなども望ましいかもしれません。
次の論文でも紹介する学習を用いた手法でも、学習する流体の挙動の対象を絞ったり、学習に使いやすいシミュレーション手法を選ぶ際の指針にもなりそうです(さらには、学習パラメータの優先度の決定にも活かせるのではないでしょうか)。
また例えば、流体のパフォーマンスキャプチャをすると仮定して、今回のような人間のリアルへの評価や印象が高いものを用いることで、どのようなキャプチャ手法(パーティクル、グリッド等々)を選択すべきかの参考にもなりそうです(今回のような本質的な調査を続けることで流体の特徴への分析が進み、さらには、そもそも何を優先してどのように流体の特徴を取り出して表現して行けばよいかにも関ってきそうなので、今後も期待できます)。
3. Data-Driven Synthesis of Smoke Flows with CNN-based Feature Descriptors
三つ目の論文は、ニューラルネットワークを使って高解像度データから学習して、低解像度シミュレーションに詳細追加するというものです。
流体では学習データが膨大なため、比較的短い時間と狭い領域での学習に留まりますが、それでも良好な結果が得られているようです(既存手法とは違って、時間や空間の概念がより考慮されているので自然な挙動が出ています)。
ニューラルネットワークを用いた学習、いわゆるディープラーニングを用いた方法を煙に特化して適用した本格的な論文が登場したという訳です!
著者の公式サイトはこちら
ちなみにざっくりいうと、学習ではある入力があったらその答えはこうであると教えることで入力と答えの関係性との法則をコンピュータが自分で見出します。そして、新たな未知の入力に対しても今度は教えてもらわなくても、答えを自動的に出力できるようになります。
過去の学習を使った手法については、以下などを参考にしてみてください。
Neural Network Learns The Physics of Fluids and Smoke
Data-Driven Fluid Simulations using Regression Forests
なお、後者はディープラーニング手法ではありませんが、2017年のシーグラフでリアルタイムデモも行われて話題になった方法で、ツリーベースの機械学習を使用してリアルタイムに向いています。
アイデアや特徴
同じパラメータ設定の高解像度と低解像度の密度ボリュームデータについて、その関係性を段階的に学習して、新規の低解像度データについても、それにあった適切な高解像度の詳細情報を割り当てることができるという方法です。具体的には、高解像度情報を持つパッチを低解像度の流れに合成するという感じです。
流体のデータを段階的に学習していると言いましたが、ちなみにディープラーニングでは画像に人間の顔が入っているかといった判定が有名だと思います(専門家ではないので説明不足の場合はすみません!)。
このとき例えば、いきなり目や鼻の表情を分析をすることは難しいので、顔かもしれない全体の輪郭の学習判定をしてから、次の段階の顔の細かいパーツについて処理を進めて行きます。同じように今回の流体でも、大きな流れのパターン等を学習してそれが分かれば、次に小さな流れや渦の強度といったまさに流体の細かな表情へとこちらでも分析を進めていくのです(段階的に深層へと掘り下げて学習していくことから、ディープラーニングと呼ばれます)。
今回の3次元の流体では扱うべきデータが常に膨大になるという問題に対しての工夫があり、速度についても直接的に学習するのではなくて、代わりに渦の強さというもう1つのスカラー情報を利用しています(密度のスカラー情報1つに対して、さらに速度情報を利用すればスカラー情報3つとなり、合計4つにまでなってしまうことを避けている)。実際に、密度と渦の強さという情報を組み合わせることで、学習の精度がより良くなっています。また、高解像度と低解像度では計算上粘性による流れの印象が異なる傾向にあるので、その点も可能な限り考慮する形で学習できるような領域やタイミングやフレームの長さを用いています。
一方で、低解像度の強い流れや複雑な乱流などの場合は、高解像度情報パッチと低解像度との空間的な相関関係が異なってしまうことが多く、それによる非整合性を解決するためのパッチの安定手法にも取り組んでいます。流体では学習以外にも、高解像度情報の合成についてもかなり工夫が必要のようです。
感想
このように考慮すべき課題が多い流体に対して、今回の内容は創意工夫と試行錯誤によって完成された結果であり、流体に関する多くの知見と技術が詰まっているものですので、大変意義深いと考えられます。
実際に、有名な既存手法Wavelet Turbulence for Fluid Simulationと比較しても、本手法は3倍程度の解像度を同程度の時間で実現できているようです。学習フレームワーク上もちろん仕方がないことですが、上昇して行く煙の詳細が早めに出たり、一部詳細が出たり消えたりする点は、この手法の有効性に敬意を最大限払いつつ、今後の進展を期待するところです!
また、高解像度情報を適用するパッチを流動させることを考えると、流動するパーティクルの動きのパターン自体も学習しておけば、さらに発展がなされるかもしれません。なぜなら、ボリューム領域を段階的に分割していき学ぶという部分等を効率化できるかもしれないからです。なぜなら、パーティクルであれば移動距離と方向だけで、ボリュームの広範囲領域の情報の代わりをある程度ながらも担えそうだからです(少なくとも時間と空間をより考慮したダイナミックな動きは得られるかも知れません)
物理的な観点からも、渦エネルギーの段階的遷移や渦が分離して細かくなって行くといった流体の持つ再帰的な現象も、深層学習の特徴を応用して学習できれば面白いです。また再帰的という意味では、原理的な課題はまだあるかもれませんが、学習によって生成した結果さえも取り入れることが出来れば、学習データ準備のコスト削減につながったり、純粋な計算結果と生成結果の差分についても流用できるかもしれません。
さらには、昨今話題のPosition based fluidsにおける Position Based の方法論で重要なパーティクル間の制約条件についても、学習できるのではと思ったりもします。
ディープラーニングの専門ではないのに、つらつらと思うことを書いてしまいましたが、、、ご理解を!
来るSIGGRAPH Asia 2017も期待しつつ、最後まで記事を読んで頂きどうもありがとうございました!
※免責事項※
本記事内で公開している全ての手法・コードの有用性、安全性について、当方は一切の保証を与えるものではありません。
これらのコードを使用したことによって引き起こる直接的、間接的な損害に対し、当方は一切責任を負うものではありません。
自己責任でご使用ください。
コメント
コメントフォーム