Nature | Photography | Music | Art

Nature | Photography | Music | Art

日々好奇心の趣くまま

サイト内の写真の使用ならびに無断転用を禁じます。

Amebaでブログを始めよう!

都内自粛要請でどこにも行けない季節外れの大雪の日。

これまでの勉強の成果として、初となるCG作品、タイムリーな「雪」をテーマにした作品を公開しました。


同時にCGや実験映像専用のyoutubeチャネルを新規に開設、以前の動画と虚実入り混じらないように。


 

作品は雪の結晶を描いたもので、形状の生成はある反復アルゴリズムを使用。


コンピュータで反復アルゴリズムを使用して美しい造形を作る手法というのは、おそらく1980年代のMandelbrot集合あたりから連綿と無数にあって今回使用したのもそのうちの一つで所謂Cell Automataと呼ばれるものの派生形


個人的に最も美しい反復アルゴリズムと思っているのだけれど、元の論文はこれ

3つの論文があるのだが、そのうちの"Modeling Snow Crystal Growth II"を採用。

本来、雪に限らず物質の結晶の成長をシミュレートするには「ステファン問題」と呼ばれる異なる相の境界を表現する一連の問題を微分方程式などを用いて解いてやる必要があるらしく、かなり難易度が高そうだし計算時間も膨大にかかってしまう。
今回の論文は氷や水蒸気の物理的な性質の本質的な所を極力簡略化したもので、かなり単純なアルゴリズムで複雑多様な雪の結晶を生成することができる。

とは言ってもやはり計算にはマシンパワーが必要で、1モデル生成するのに長いものだと数十分かかったりする。

これで生成できるのは二次元形状なのだけれども、その生成物をいろいろ工夫して三次元Surface Meshモデルにコンバートしてレンダリングした。


上リンクの中には更に発展させた直接三次元モデルを生成できるアルゴリズムもあって試しに雑にインプリメントしてみたものの、1モデルの生成が一晩計算しても終了しないので断念。(もしかしたらGPUを使えば高速化できるかもしれない)

レンダリングにはblenderを使用。結晶の成長など特殊な動きが多いので、制御は専らPythonを使用してそこからblenderのレンダリング機能を呼び出すようにした。

音楽については、これまたある勉強の成果物なのですが、書くと長くなりそうなのでまたの機会に。
 

 

前回の続き、季節外れの葉っぱネタで、より複雑な剛体運動の練習台として。



紅葉を撮影している際にいつも不思議に思っていたのだけれども、落下している葉っぱを見ると決して自由落下しているわけではなく前後左右にヒラヒラとカオスな動きをしている。
なんらかの物理法則が関係しそうと思うもののこれまであまり深く追及することはなかった。



今回折角なのでこの挙動をblender上で再現してみようと思いWebトローリングしてみた。

いくつか論文が見つかったのだが、その中で最もエレガントだと感じられたのがこれ。20年以上前に書かれたもので、著者は日本人。
ここでは紙片が落ちるカオスな運動を表現するモデルについて考察されていて、挙動に関しては同じヒラヒラ系なので葉片と等価のはず。
二次元での挙動モデルなので実際に応用するには細工をして三次元に拡張する必要があるが。

この論文の核心部は「ヒラヒラ」を表現する並進・回転運動は4つの式で表現できること。



詳細に関しては本文に譲って簡単に書くと、紙片の長さ・空気との密度比・重力加速度・面に水平・垂直方向それぞれの空気との摩擦係数を入力として、それらの結果発生する揚力・摩擦力・重力の時間変化で挙動が決まってくる。
とりわけ重要なのが水平・垂直方向の摩擦係数の値と比率が「ヒラヒラ」のカオス感に大きな影響を与えるらしい。

ということやってみた。

数式は連立微分方程式なので既存のソルバーライブラリを使ってRunge Kutta法などで容易に数値解が得られる。
プログラムから使えそうなソルバーはscipy odeintやboost odeintなどがあるが、今回はopenframeworksを使ってC++で計算しながらプレビューしたかったので後者を使う。

以下はopenframeworks上でのいくつかのパラメータでの簡易プレビューに続いて計算結果である運動の軌跡をblenderに読み込んでPhotogrammetryで再現した葉のメッシュに適用してレンダリングしたもの、そして最後に某流体系ソフトで計算した流体運動を取り込んだもの。
 

 

 

そこそこリアルな動きをしているのではないかと。

単純な剛体に関しては随分とノウハウが解ってきました。

コンピュータで「実世界にある何者かをエミュレートする」ということについて。

例えばCGの中でモノをそれらしく動かして見せるにはおおよそ古典力学の諸々の法則に準拠して動かす必要があって、それをサポートする機能がアプリケーションに備わっている。
それが「物理演算エンジン」と呼ばれるもの。

CGでは「それらしく見せる」ことができれば十分なので理学・工学のものよりは良くも悪くも「いいかげん」なエンジンが使われていて、厳密さより高速に計算できることを優先しているらしい。
確かに有限要素法とかで三次元の解析などをすると平気で数日かかったりするので、厳密さの切り捨ては仕方ないのは理解できる。

おおよそCGに使う(光関連を除く)物理演算は「剛体」「弾性体」「流体」「その他の炎とか爆発とか煙とかいくぶん厄介なもの」あたりに分けられて、一般的に後ろに行くほど扱いの難易度が高くなる。

まずは最も基本である変形のない「剛体」を扱う物理演算エンジンについて勉強中。
その際ブラックボックスで融通が利かないアプリケーション付属のエンジンは使いたくないため、C++のライブラリとしてプログラムから叩けるものをいくつか評価しているところ。

そういう目的に使われるライブラリでオープンソースかつメジャーなものはおおよそ以下の3つらしい。

ODE(Open Dynamics Engine)
https://www.ode.org/

Bullet Physics
https://github.com/bulletphysics/bullet3

PhysX
https://github.com/NVIDIAGameWorks/PhysX

Webの情報から判断すると下にいくほど性能が高く、扱いの容易さはその逆ということ。

さしあたっては扱いが比較的簡単らしいODEから評価を始めているところ。
基本中の基本である自由落下から。

操作対象としては前回で書いたPhotogrammetryで三次元取得した葉っぱを使う。



まずは葉っぱのメッシュデータからAABBというものを計算してぴったり入る箱のサイズを作る。こうすることで衝突の計算が高速になる。
これらの箱数百個を時間差で上から落として若干跳ね返りをつけたものをODEでシミュレート。

このとき、各タイムステップですべての物体の位置と回転の軌跡を記録しておく。

完了したら葉のメッシュデータと軌跡をblenderに読み込んで、背景と照明をそれらしくつけて作りこんでみた。

ODEの挙動と最終結果は以下のような感じ。


これだけでもかなり現実世界に近づいた絵が作れる。しかもすべてオープンソースのツールで。テクノロジーの進歩はたいしたものです。

葉っぱという物体、剛体運動の練習台としてかなり面白いのでしばらく遊んでみようかと思ってます。
 

季節が一つずれているのは諸技術の習得と試行錯誤の時間が随分とかかってしまったため。

以下はいずれも昨年秋に自身で山歩きをしながら撮影した素材をPhotogrammetryによって3Dメッシュ&テクスチャを構築、それらをblenderでコラージュした習作。
環境光として以前に作成した紅葉樹林の光をHDR化したものを光源に使っていて、秋独特の柔らかな光が再現できているかと。

 

 

 


今後はこれらにモーションを加えたいのだけれども、そのあたりは近日中に。
 

Photogrammetry…日本語では「写真測量法」と言うらしい。

視点を変えて撮った複数枚の写真から被写体の三次元形状とそのテクスチャを復元する技術の総称。
三次元形状計測する方法はいくつかあるが、高価な特殊ハードウェアが必要ないのでこの方法が比較的安価で実現できる。

VR/MRやドローン測量など諸々でニーズが多いらしくPhotogrammetry用のアプリケーションの進化が著しく、あまり理屈が分かってなくてもほぼ自動的にすこぶる品質のよい3Dモデルを吐き出すようになってきている。
とはいえ、まだまだ発展途上の分野ゆえトップエンドのソフトは個人で手が出せないレベルの価格。
本当は内部を自由に弄れるオープンソースのものを使いたいのだけれども、残念ながらまだ有償ソフトまでのレベルには行き着いていない。
当面は有償ソフトの無償版+オープンソースでできる範囲で工夫でカバーしながらテクノロジーが熟れてくるのを待とうかと。

従来の写真はあくまでも実世界を二次元投影したものしか撮れないが、Photogrammetryを使うとそこから更に深度を含めた一次元大きい情報を得ることができる。

そのあたりの興味もあって、このところ野外で出歩く際に隙があればPhotogrammetry素材を撮影していて、被写体は数cmの小さなものからドローンを使えば例えば渓谷の立体図の再現のようななことも。
生憎、まだcm未満の物体はあまり上手くいっていない。

成果物は以下のような感じ。
人工物は概ね興味がないので被写体は自然モノに偏ってますが。
 

 

 

さて、これらの収穫物をどうやって料理しましょうか…