MENU閉じる

HEXA BLOG

研究・開発

HEXA BLOGその他研究・開発2008.6.4

流体シミュレーションデモ

こんにちは!イワサキです。
前回はクロスシミュレーションの実装をしてみましたが
いかがだったでしょうか。
もし好評ならシリーズ化してもいいかも!?目(笑)
今回のお題は「流体力学シミュレーション」です。
いつもよりも増量してお送りします!
流体力学とは連続体力学で流体(液体や気体)の変形や応力を
扱う分野です台風。水専門では「水力学」というそうです。
今回もデモを作ってみました。
先日のGDC2008で面白そうな記事がありまして
リアルタイムの流体を扱うライブラリが紹介されていたのがきっかけです。
■西川善司の3Dゲームファンのための
「GDC 2008最新ゲームエンジン」講座(前編)
和製CAE対応「オクターブエンジン」、
ソニー製なのにXbox 360対応「PHYRE ENGINE」、
Valve「Team Fortress 2」

http://watch.impress.co.jp/game%2Fdocs/20080228/3de.htm
ヘキサドライブでも自社のゲームエンジンにこのような流体を
扱う仕組みがあれば面白そうだなぁと思い立って
感化されて作ってみました!わーい(嬉しい顔)

以下のスクリーンショットはヘキサドライブお手製の
流体シミュレーションの画像です

2008-06-04_1.jpg
2008-06-04_2.jpg


水がバシャーン!あせあせ(飛び散る汗)と跳ねます。
今までの表面だけの挙動計算とは違って水飛沫や先端が尖る
うねりなどが表現できるのが面白いですよネ。
これが表現できるようになれば夢がまた広がります。
子供の頃よく遊んだ水遊びのようなものがゲームの中で
再現できれば楽しいと思いませんか?ぴかぴか(新しい)ぴかぴか(新しい)
砂山作って水流したり溝つくって流れを変えたり。
あのワクワク感はクリエイターの心意気そのものだとおもいます。

────────────────────

今回もバイナリでサンプルプログラムを公開します。
描画に少々特殊なことをしていますのでShaderModel3.0
記述しています。そのため、GeForce6x00シリーズ以降か
RadeonX1x00シリーズ以降などのSM3.0対応グラフィック環境で
実行してください

【動作確認済環境】
  CPU Intel Core2Duo 6300
  CPU Intel Core2Quad 6600
  GeForce6800
  GeForce7300LE
  GeForce8600GTS
  GeForce8800
2008-06-04_3s.jpg

球体をリアルタイムレイトレーシングで描画生成しています。
ポリゴンで球を作るよりも丸くてツルツルですぴかぴか(新しい)
水しぶき・白波が立つ場所はすこし粒子が明るく光るように
表示しています。
今回ブログ用に実装反映したのは「密度」「圧力」「粘性」のみです。
まだ入れていない要素は「表面張力」「分子間拘束」です。
そのため、軽い重圧で体積が大幅に変化してしまい、やや圧縮気体に
近い動きをしてしまっています。
急作りですのでまだまだ改良の余地があります。ふらふら
この現象は粒子数を増やしたときにあらわれています。
デモで比べてみてください。

2008-06-04_4s.jpg
2008-06-04_5s.jpg
2008-06-04_6s.jpg
【実行ファイル】
HexaFluid.zip (1.8MB)

■操作方法■
‘1’,’2′,’3′,’4′,’5′ 配置初期化
     (粒子数が変化します)
‘Z’  初期化リセット
‘X’  「密度」を表示 ON/OFF
‘C’  「速度」を表示 ON/OFF
‘SPACE’  「球体配置」ON/OFF
‘A’  「球体半透明」ON/OFF
‘S’   水槽を揺さぶる OFF/弱/強
‘↑’, ‘↓’   カメラ上下
‘←’, ‘→’   カメラ左右移動
‘PageUp’, ‘PageDown’
     カメラ 接近/後退

────────────────────

参考書籍は
粒子法シミュレーション―物理ベースCG入門
ISBNコード 978-4-563-01574-9 (4-563-01574-1)
を参考にコーディングしました。
book.jpg
粒子法の流体力学や粒子法に着目した
剛体シミュレーションの紹介など
流体力学の書籍のなかでも比較的
読みやすい内容です。
著者は流体・粒子法の第一人者でも
あり、さきほど紹介したライブラリ
オクターブエンジンの開発にも
携わる東京大学の越塚 誠一氏です。
この本のお陰で今ここにプログラムを
公開することができました。

CFD(Computational Fluid Dynamics)
日本語では「数値流体力学台風」と言います。
そのなかでもSPH法と呼ばれる手法で今回は実装しました。
今回のシミュレーションで特に参考にしたのは上記の本の
44ページ目の前後に載っている力積や圧力ソルバ・
密度ソルバ・粘性ソルバの計算式です。
このページ前後が一番重要かも?
今回は時間積分・座標更新に前回のVelret法ではなく
Leap-Frog法(蛙跳び法)を採用しています。
Leapfrog integration (Wikipedia(英語))
http://en.wikipedia.org/wiki/Leapfrog_integration
精度はverlet法に近いです。
ゲームを作る上でゲームプログラマーの大切な使命の一つに
『ゲーム企画の可能性を少しでも広げること・表現できるようにすること』
ということがあります。
新しい技術を導入すると表現できる選択肢が増えますし、
高速化はより快適にプレイできるようになり、
より多くのものを空間内に配置できるようになる
メリットがありますグッド(上向き矢印)
作品を遊んでくれる人・楽しみにしてくれている人のために
ゲームプログラマーは日々努力しています。
技術を磨きながらそれを仕事に反映することができる、
そんな理想的な環境がヘキサドライブにはあります。
それがもしゲームソフトだとしたら仕事も楽しいものになると
思いますよネ!ぴかぴか(新しい)ぴかぴか(新しい)
ヘキサドライブは常時ゲームプログラマーを募集しています!
一緒に素敵なゲーム作品を作ってみませんか?手(パー)
採用情報はこちら↓です。
https://hexadrive.jp/sub3.html

RECRUIT

大阪・東京共にスタッフを募集しています。
特にキャリア採用のプログラマー・アーティストに興味がある方は下のボタンをクリックしてください

RECRUIT SITE