物理シミュレーションの活用 パーティクル

シミュレーション

Touchdesignerやblenderではプログラムする側の意図やイメージを映像にするのですが、その際、物理法則に即した映像の作り方がシミュレーションです。通常は見た目が不自然でなくとも、物理法則に即しているわけではなく、そう見えるように工夫して作製します。またこれまでも、「コンピュータに宿る非線形性・・・」, 「プロシージャル3・・・」で述べたように、コンピュータの計算上で生じる現象を活用する方法もあります。さらに現実と違う物理法則の世界を想定して、その世界ならどんなことが起こるかも試せるようになってきました。違う物理法則の世界について考える時、思いだすのが、アンリ・ポアンカレの「科学と仮説」で記載されている非ユークリッド幾何に関する次の一文です。
「例えば大きな球の中に閉じ込められた世界があって、次のような法則に従うものと仮定しよう。この世界では温度は一様でない。中心では最も高く、中心を遠ざかるに従って次第に低くなり、この世界を包む球面に達した時には絶対0度にいたる。私はこの温度の変化すべき法則をもっと明確に定めておく。この限界を作る球の半径をRとし、考えている点とこの球の中心との距離をrとする。絶対温度はR2-r2に比例するとする。そのうえこの世界ではあらゆる物体が同一の膨張係数を有し、その結果どの定規の長さも絶対温度に比例すると仮定しよう。・・・そうすると人が限界の球面に接近するに従い、運動する対象は次第次第に小さくなるはずである。・・・なるほど、これらの居住者が限界の球面に近づこうとすれば次第に温度が下がって次第次第に小さくなる。だからその一歩一歩はまた次第に小さくなり、その結果限界の球面に達することはいつまで経ってもできない。若し我々にとって幾何学は変形しない個体が運動するに従っていく諸法則の研究にほかならないとすれば、この想像した人間にとって幾何学は私がいま述べたような温度の差異によって変形する個体が運動するときに従っていく諸法則の研究となるだろう」。
彼は、仮に異なる物理世界に住んだとしたら、そこで生み出すことになる幾何学は、おのずと非ユークリッド幾何学になるということを論じています。この文章でわかるように、物理法則の設定を変えた世界を想定すると、現在と異なる規則の空間を作りだせます。ポアンカレは1912年に没しています。彼の生きた時代ではシミュレーションは容易でありませんでしたが、現在では異なる世界を想定したシミュレーションも可能になってきています。このように架空の物理法則の世界を想定し、そこでの現象を映像化するも興味深いことです。

今回紹介するのは、Touchdesignerやblenderが持っている現実世界の物理シミュレーションです。そして単に重力に従って上から何かが落ちてくる、水が水槽に広がる、といったことではなく、別の何かと作用する場合、つまり関係性やインターラクションにつながる例を紹介致します。私のような古いエンジニアにとっては、物理シミュレーションと言えばスーパーコンピュータがする大規模計算であったのですが、今ではGPUの進化と効率的なアルゴリズムのおかげで、パソコンでもできるようになりました。技術の進歩を感じます。そして計算するためのパッケージが提供されていて、それを使うことで手軽になっています。今回はパーティクルを使った例を紹介しますが、他にも布や柔軟体の動き、剛体の衝突や転倒, 破壊、シェーダーに使う光の屈折や反射等、できることは増えてきています。将来はもっと多くの物理シミュレーションが手軽に使えるようになっていくでしょう。ポアンカレの例のように、異なる物理法則の世界を想定し、そこで起こる現象を使って、実世界とは異なる映像を作る。そうしたことができる時代になってきているように感じています。

Oputcal FlowとparticlesGpu

まず動画を見ていただきましょう。

Touchdesignerによる動画です。葉っぱが落ちてくる映像と走行映像が重ねて表示されています。そして走行映像に関連して葉っぱが動いていることが分かると思います。この葉っぱの動きはOptical FlowとparticlesGpuと呼ばれているオペレータでシミュレーションしています。走行映像の変化が大きい時に葉っぱの舞い方が激しくなり、映像変化が少ない時に、上から下へと葉っぱが落ちてきます。よくわかる場面としていは、トンネルの映像があります。トンネルの中では画面の両横は暗くて変化がほとんどありません。このため葉っぱが上から下へとゆっくり落ちてくるのです。単に上から下に葉っぱが落ちてくるのではなくて、走行映像に関連して動いていることがこのシミュレーションのポイントです。主要部分の構成を次に示します。

走行映像はOptical Flow TOPに接続されています。これは「前のフレームと現在のフレーム」の差を解析して動きを捉える働きです。Optical Flow TOPでは動きがある部分を輪郭のような映像として表示します。この部分がオプティカルフロー、言わば「動きベクトル」と言ったものです。Optical Flow TOPは「プロシージャル3 …」で述べた「複雑さパラメータ」を得るための前処理のような働きです。Optical Flow TOPの後にAnalyze TOPで全ピクセルの平均を取り、絶対値にして、Trail CHOPで時間軸上のデータとし、そられをanalyze CHOPで平均化すると、「複雑化パラメータ」が得られます。今回の場合は、Optocal Flow TOPを次のparticalesGpuに接続しています。これだけで、クルマの動きとパーティクルが関係付けられ、葉っぱが映像と連動して動くことになります。このparticlesGpuが物理シミュレーションをするオペレータです。Touchdesignerではパーティクルを計算するのにParticle SOPが用意されています。これはCPUによる計算です。より多くの粒子を高速かつリアルタイムに計算するにはGPUを使うほうが適しています。このGPUでの計算をするのがparticlesGpuです。今後このようにGPUで計算するオペレータが増えてくるように思います。私が少し工夫した点は次です。クルマの場合奥行方向に動きを感じさせたいのですが、走行映像は平面なので、particlesGpuを適用しても奥行きがでないのです。そこでごく簡単な工夫をしました。これが上のの図のTransform TOPを加えた点です。少しだけscaleを大きくしてこれと元の映像と重ねることで、落ち葉が奥行方向に動いているように見せています。次にparticlesGPUの後とTransform TOP後を合成した映像を示します。後者の画像では奥行方向に方向性がついていることがわかると思います。

Nvidia Flex Solver

Nvidia Flex Solver COMPは流体の物理シミュレーションするソルバーです。Actor COMPというオペレータと同時に利用します。Solverは「シミュレーションの舞台装置」に相当し、物理計算処理を行います。このオペレータで粒子の動きや力の影響が計算されます。Actorはこの「舞台」に登場する「登場人物」です。まつり、シミュレーション内で動きや挙動を持つオブジェクトを表します。Actor COMPに割り当てた形状がSolverの計算に応じて動くことになります。今回も先に動画を見ていただきましょう。

動画の下側に流体があり、その上に「ドラムちゃん」というドラム缶のキャラクターがあります。ドラムちゃんが左右に動くに従い流体が左右に動きます。またドラムちゃんの下の流体が盛り上がるようになっています。そして、ドラムちゃんが飛び上がると流体が跳ね上がります。つまりドラムちゃんと流体は同期して動いています(プロシージャルです)。流体のシミュレーションをするのが、Nvidea Flex Solver COMPとActor COMPです。この場合Actorは流体の粒々のことです。ドラムちゃんが跳ね上がると流体の下の壁が跳ね上がることで、流体が飛び散ります。こうした流体の振舞いを計算するのがSolverです。粒に相当する球を用意し、それを別の立体の形状を構成するポイントにインスタンシングします。Solverをスタートすると、立体形状が重力に従って床に落ちてたまります。落ちてきた粒子を入れる空間を用意しておき、そこへ粒子がたまるという構図です。用意する空間はどんな形状でも構いませんが、それを覆う立方体に設定されます。自由な形状を当てはめることは今のところ困難なように思います(別な形状をActorとして用意できますが、動かすと流体がこぼれてしまいます。これは改善する必要があるように思います)。そのたまった粒の振る舞いは、Solver内のパラメータで設定できます。流体の粘性や摩擦等、非常に多くのパラメータ設定があります。これらのパラメータに基づいて流体の流れが計算されます。ドラムちゃんの下側の流体が膨れていますが、これはForce COMPを適用して流体を外部から引っ張っているからです。このForce COMPによって流体の部分的な制御が行えます。
「https://qiita.com/v_kaoru/items/d19cc2e628b4a4ee9f55」が参考になります。

もう一つForceを使った例を示しておきます。ドラムちゃんが飛び上がると流体が伸びてくる例です。

流体が伸びてくる場所は3か所あり、ドラムちゃんが飛び上がる時にどれかが選択されます。選択された場所のforceの値が負に大きくなることで、流体が引っ張られるという関係性です。TouchdesignerにはforceをコントロールすることができるオペレータにSpring SOP, Paricle SOP、そして今回用いたForce SOPがあります。これらは風で流体を動かしたり、引っ張ったりするイメージの力を対象に与えることができます。インターラクションやフィードバックに使える優れたパラメータやオペレータです。近いうちに取り上げたいと思っています。

物理演算プロパティ(blender)

次はblenderの物理演算プロパティを使う例を述べます。blenderは多くの物理演算を行う機能を持っています。しかしTouchdesignerと違ってインターラクティブに動かすことはできません。動画を作るための機能ということです。まず動画見ていただきましょう。火山の溶岩が山から流れ出でてくる場面です。

blenderでも流体そのものはパーティクルの集まりです。しかし、Touchdesignerとblenderでは考えは随分と違っています。Touchdesignerはリアルタイム性やインタラクティブ性を重視しているので、粒子サイズを設定し、その粒子サイズでできる流体に直接レンダリンを行います。blenderでは、物理ベースのシミュレーションでは流体を細かくシミュレーションしているようです。blenderでの流体は、流体がながれでる流出口とそれをためる水槽(ドメイン)を用意します。流しぱなっしにしたいときは水槽の壁を外す設定をします。水槽の中に何かオブジェクトを入れると、それにエフェクターと呼ばれる設定を行います。今回の場合は流出口は山の頂上付近に用意し、山全体を覆う水槽を設定し、山をエフェクターに割り当てます。エフェクターである山のタイプをコリジョンとして設定すると、流れ出てきた流体つまりパーティクルがエフェクターである山に衝突し、それにそって流れが変わるシミュレーションができるようになります。つまり流体と山との関係性がシミュレーションできます。今回のように相当に複雑なエフェクターの形状(山)でもシミュレーションできるのは素晴らしいと思います。
Touchdesignerでは流体の粒の集まりに直接レンダリングしますが、blenderはメッシュの上にレンダリングするという方法をとります。ですので流体のシミュレーションの後、流体がながれている形状をメッシュ化します。横軸時間に対して動作させることをアニメーションといいますが、アニメーションの時間に対する結果を保存することを「キャッシュのベイク」といい、また粒子やサーフェイスの情報を基にメッシュに変換しレンダリングできるようにするのを「メッシュのベイク」と呼んでいます。この二つのベイクをすることで流体に色をつけたり写真を貼ったりできるようになります。レンダリングした後の動画を次に示します。

この例では流体を赤く色をぬっただけです。ベイクした後様々な設定ができるのですが、なかなか難しくしっくりこない感じです。上手く設定できると高品質なビジュアルに仕上げられるはずです。
実際の使い方を詳しく解説しておられる文献に次があります。「https://www.youtube.com/watch?v=V_zhoWdm8m0」

Touchdesignerへの活用

blenderは形状や映像を作るアプリケーションですので、Touchdesignerのようにインターラクティブに動かすことができません。しかしblenderで作製した動画も大変役立ちます。これまでに、blenderで作製した形状をTouchdesignerにobjやfbxファイルとして移し活用する話を述べてきました。これと同様、blenderで作製した動画をTouchdesignerで活用することはよくあることです。例えばblenderで炎の動画を物理演算シミュレーションで作製します。これも上述と同様、炎が出る噴出口とそれを覆うシミュレーション範囲であるドメインを設定し、その後でベイクして計算を保存しメッシュ化します。そしてそれに色を付けるレンダリングを行って作製します。この映像にハリコルゲを付けたのが次です。ウルトラセブンのオープニングの映像に似た感じになりました。

このように、燃え上がり常に変化する映像は、Touchdesignerのシェーダーであるpbr MATやphong MATのマップとして使うことで、映像にチロチロとした変化を与えることができます。上の動画はpbrのマップを作る過程の映像です。前のブログ「プロシージャル3・・・」のハリコルゲが大地から抜け出そうとしている映像では、大地とハリコルゲがチロチロと色変化をしています。これにはこの炎の映像を使って色変化を演出しています。このように変化する映像を持っていると、使える場面がしばしばあります。blnederはこのような素材を作るのに役立ちます。blenderでどんな物理演算ができるのかは、Udemyの「物理演算の基礎を総ざらい! Blenderつくって学ぶ物理アニメーション」が役立ちます。

コメント