頭と尻尾はくれてやる!

iOSアプリなどの開発日記です


煙の粒子の運動方程式

particleで煙っぽいのを表現してみようとしてるんだけど、噴出口みたいなのがあってそこから出た煙は上部へ、、、っていうのを実現するにはどうしたらいいんだろ?
粒子は最初は噴出時の方向で飛んで行くものの水平成分は減衰して最後は上方向のみになる、ってイメージだよな。
ということでparticleの運動は速度に比例する抵抗を受けるとしてやってみた。

放物運動に関する運動方程式の解説
↑これの [E] 速度に比例する空気抵抗を持つ放物運動 って部分。速度に比例する場合だと式を出しておけるみたいよ(実際は速度の二乗の方に近いみたいだけど、解を求めるのがえらい大変らしい)。

上のリンク先のは平面だけどz方向も考慮して結局座標はこんな感じの式になった。

粒子の運動方程式の解

U0,V0,W0は各方向の初速、Vtは終端速度、gは重力加速度だったのでgだけど、実際には煙に働く上向きの加速度。
いろいろやり方あるだろうけど、シェーダ内で計算があまり重複しない方がいいかなってことでこのp1からp5の係数をparticleごとにシェーダに送ってみた。なんだか面倒だよね、、、きっともっと上手い方法があるんじゃないかな、って気がしてならないけど、ともかくこんな感じになったんだ。



これで1000個のparticleだけど、iPhone 6だと普通に60FPSで表示されてる。さすがだな。
パラメータがたくさんあるのでテキトウな感じの煙だけど、いろいろと調整すればいろんな煙を表現できるんじゃないかなあ。
スポンサーサイト




<< Metalのステンシルバッファでマスクしてみる  TopPage  数式を画像出力してくれるサービスを使ってみた >>

コメント


管理者にだけ表示を許可する
 

トラックバック

トラックバックURL
https://ringsbell.blog.fc2.com/tb.php/975-db905f09




Copyright ©頭と尻尾はくれてやる!. Powered by FC2 Blog. Template by eriraha.