小田朋宏のページ

HoneyGinger

HoneyGingerはSPH法をベースにした流体シミュレーション環境です。 開発方針は

  1. シミュレーション環境を容易に構築できること
  2. 可視化やユーザからの入力などの対話能力を充実させる
ことを目標にしています。 詳しくは、HGSimulatorのクラスメソッドをご覧ください。

プロジェクトページ

HoneyGingerはsqueaksource上で公開しています。 ライセンスはMITライセンスで、ソースコードを配布しています。

ギャラリー

Lagoon

南の島の珊瑚礁の上を滑るように泳いで、その波を楽しんでください。

画面は南の島の白い珊瑚礁を上から観ていると思ってください。

マウスカーソルを動かすと、マウスカーソルは水の抵抗を受けながら、波をつくります。

波は浅瀬を伝搬していき、なぜか壁に反射してきます。

動画では、まずは水面の水粒子を点として表示して、マウスカーソルを動かすところから始まります。

次に、水面をポリゴンで表示します。 各ポリゴンは粒子を頂点とする三角形分割でポリゴン化され、重心点での水圧により三角形の透明度を変化させています。

最後に、水面を矩形メッシュで細分化し、それぞれの微小矩形の中心の水圧により矩形の透明度を変化させています。

Splash!

次は波がおこす水しぶきを楽しんでください。

画面は直方体のガラス製の水タンクを横から観ていると思ってください。

最初は水は右側にだけあります。

重力があるので、水は落ちて左側に殺到します。 すると左側で大きな飛沫をつくり、また右側に返っていきます。

そして波はだんだんと落ち着き、最後は静かな水面になります。

動画では、まずは水面の水粒子を点として表示します。

次に、水面をポリゴンで表示します。 各ポリゴンは粒子を頂点とする三角形分割でポリゴン化され、重心点での水圧により三角形の透明度を変化させています。

最後に、水面を矩形メッシュで細分化し、それぞれの微小矩形の中心の水圧により矩形の透明度を変化させています。

水面

では、今度は波がおこす水しぶきを線画で楽しんでください。

画面は直方体のガラス製の水タンクを横から観ていると思ってください。

最初は水は右側にだけあります。

重力があるので、水は落ちて左側に殺到します。 すると左側で大きな飛沫をつくり、また右側に返っていきます。

そして波はだんだんと落ち着き、最後は静かな水面になります。

動画では、まずは水面の水粒子を点として表示します。

次に、水面を線で表示します。 具体的には、マーチング・スクエア法と呼ばれる、場の境界値を追跡するアルゴリズムで、圧力が空気圧と水圧の中間の部分を表示します。

さらに、次は水を面で表示します。 同じくマーチング・スクエア法で、圧力が空気圧と水圧の中間値よりも高い部分を水色で塗っています。

最後に、水面を線と面の両方で表示します。 単純に線表示と面表示を組み合わせただけですが、どことなしに、マンガ的な表現になっていると思います。

らくがき

では、今度は波がおこす水しぶきを幼児の落書き風の描画で楽しんでください。

濡れた絵

画面上の絵を濡らしてみましょう。

画面上の絵をビットマップとして切り取り、各ピクセルの色の明るさによって、暗いピクセルを障害物とします。

その障害物の間に水を入れて、色々な可視化で表示してみましょう。

ただし、重力がマウスカーソルの方向にかかります。 つまり、マウスカーソルが画面の下にあれば重力は上から下にかかります。 もしマウスカーソルを右上に動かせば、重力は右斜め上にかかります。

動画では、まずは水の粒子を点として表示します。 水の粒子が障害物を避けて流れていく様子がわかると思います。

次に、水面を矩形メッシュで細分化し、それぞれの微小矩形の中心の水圧により矩形の透明度を変化させています。 なんとなく、絵に水が滲んでいるように見えますね。

モーフと珊瑚礁

シミュレーション世界の外からシミュレーション世界に干渉してみます。 場面は再び南の島の珊瑚礁です。 珊瑚礁の中にメニューを持ってくると、あたかも珊瑚礁にバシャーンと投げ込んだかのように波を立てます。

メニューからサブメニューを開くと、その動きに応じて珊瑚礁に波が起きます。 ウィンドウを重ねると、やはり重なった部分が水を押しのけて波を立てます。 メニューやウィンドウを閉じたり外に移動させると、今までメニューやウィンドウがあったところに水が殺到して、やはり波が起きます。

Morphicフレームワークといえば、アニメーションです。試しに、大きな円弧を描いて動く青いモーフをいくつか出してみます。 すると、モーフが水上バイクのように波を立てて走り去っていきます。

モーフを沢山連射してみると、波同士が重なって、大きな水の流れができます。

明鏡止水

次に、反射/屈折です。 水面の角度に応じて画像を屈折させると、鏡のように綺麗な水に風景が映り込んでいるかのように見えます。

マウスカーソル、メニュー、ウィンドウ、モーフなど、色々なものを水面に投げ込んでみると、水面が乱れて風景もうまく見えなくなります。

蒸気と水気

次に、写真に潤いを与えてみます。 粒子や屈折を組み合わせると、温かな食べ物から湯気が出るような演出ができます。また、スープの表面が濡れているようなタッチに見えます。 これらは静止画に対してシミュレーションを使って擬似的な「時間」を付加することで、通常の静止画の描画ともビデオ撮影した動画とも異なる印象を与えるエフェクトとして利用することができます。

マウスカーソルを使って、蒸気や水を絵の具のように塗ることができます。