HEXA BLOG
ヘキサブログ
研究・開発
流体シミュレーションデモ
こんにちは!イワサキです。
前回はクロスシミュレーションの実装をしてみましたが
いかがだったでしょうか。
もし好評ならシリーズ化してもいいかも!?(笑)
今回のお題は「流体力学シミュレーション」です。
いつもよりも増量してお送りします!
流体力学とは連続体力学で流体(液体や気体)の変形や応力を
扱う分野です。水専門では「水力学」というそうです。
今回もデモを作ってみました。
先日のGDC2008で面白そうな記事がありまして
リアルタイムの流体を扱うライブラリが紹介されていたのがきっかけです。
■西川善司の3Dゲームファンのための
「GDC 2008最新ゲームエンジン」講座(前編)
和製CAE対応「オクターブエンジン」、
ソニー製なのにXbox 360対応「PHYRE ENGINE」、
Valve「Team Fortress 2」
http://watch.impress.co.jp/game%2Fdocs/20080228/3de.htm
ヘキサドライブでも自社のゲームエンジンにこのような流体を
扱う仕組みがあれば面白そうだなぁと思い立って
感化されて作ってみました!
流体シミュレーションの画像です
↓


水がバシャーン!と跳ねます。
今までの表面だけの挙動計算とは違って水飛沫や先端が尖る
うねりなどが表現できるのが面白いですよネ。
これが表現できるようになれば夢がまた広がります。
子供の頃よく遊んだ水遊びのようなものがゲームの中で
再現できれば楽しいと思いませんか?
砂山作って水流したり溝つくって流れを変えたり。
あのワクワク感はクリエイターの心意気そのものだとおもいます。
今回もバイナリでサンプルプログラムを公開します。
描画に少々特殊なことをしていますのでShaderModel3.0で
記述しています。そのため、GeForce6x00シリーズ以降か
RadeonX1x00シリーズ以降などのSM3.0対応グラフィック環境で
実行してください。
CPU Intel Core2Duo 6300
CPU Intel Core2Quad 6600
GeForce6800
GeForce7300LE
GeForce8600GTS
GeForce8800

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



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)
を参考にコーディングしました。
粒子法の流体力学や粒子法に着目した
剛体シミュレーションの紹介など
流体力学の書籍のなかでも比較的
読みやすい内容です。
著者は流体・粒子法の第一人者でも
あり、さきほど紹介したライブラリ
オクターブエンジンの開発にも
携わる東京大学の越塚 誠一氏です。
この本のお陰で今ここにプログラムを
公開することができました。
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
CATEGORY
- about ヘキサ (166)
- 部活動 (6)
- CG (18)
- プロジェクトマネジメント (1)
- 研修 (5)
- 美学 (1)
- いいモノづくり道 (230)
- 採用 -お役立ち情報も- (149)
- プログラム (188)
- デザイン (99)
- ゲーム (274)
- 日記 (1,104)
- 書籍紹介 (113)
- その他 (875)
- 就活アドバイス (20)
- ラーメン (3)
- ライフハック (25)
- イベント紹介 (10)
- 料理 (23)
- TIPS (7)
- 怖い話 (3)
- サウンド (5)
- 子育て (1)
- 筋トレ (1)
- 商品紹介 (21)
- アプリ紹介 (31)
- ソフトウェア紹介 (33)
- ガジェット紹介 (12)
- サイト紹介 (10)
- 研究・開発 (34)
- 回路図 (4)
- アナログゲーム (40)
- 交流会 (21)
- 報告会 (3)
- インフラ (25)
- グリとブラン (6)
- カメラ (9)
- クラフト (27)
- 部活 (14)
- 画伯 (15)
- カレー (6)
- 音楽(洋楽) (6)
- 映画・舞台鑑賞 (43)
- 飼育 (5)
- いぬ (8)
- ねこ (19)
ARCHIVE
- 2025年
- 2024年
- 2023年
- 2022年
- 2021年
- 2020年
- 2019年
- 2018年
- 2017年
- 2016年
- 2015年
- 2014年
- 2013年
- 2012年
- 2011年
- 2010年
- 2009年
- 2008年
- 2007年