[過去ログ] 物理演算エンジンってどうやって作るの? (99レス)
1-

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
1
(2): 2007/05/24(木)19:10 ID:NTMqyc86(1) AAS
ハーフライフとか、オブリビオンのあれです。

詳しい人教えて
80: 2011/07/27(水)21:27 ID:jpUYGiJj(3/3) AAS
わかったC#で作ってみる
81: 2011/07/29(金)22:36 ID:YKUBReqf(1) AAS
lemke法、本当に収束するのかとか、どのくらいで収束するのかとか理解してないけど。少し理解した
剛体が増えると不利だな。元々の疎行列が活かしづらい

マルチグリッドLCPが出来れば超速くなるはず
82
(2): 2012/01/08(日)13:49 ID:i1iv+V/j(1) AAS
BulletXのソース読んでみたけど、あれって拘束ベースなのかな?力積ベースなのかな?
constraint(拘束)Solverっていうディレクトリが在ったから読んでたら、Impulse(力積)を加えてたんで判んなくなった。
拘束ベースの判り易いソースって知ってたら教えて欲しいな。VC++よりはC#の方が読み易いからうれしい。
83: 2012/02/25(土)23:00 ID:HsM02eP/(1) AAS
拘束条件を解く方式のエンジンでも、拘束されてる(物体どうしが一定時間以上
連続して接触している)ときも常に力積を加え続ける方式のものもあるよ。
つまり、力積が吊り合ってたら物体が静止状態になるってことね。

ちなみに、ソース読むよりも代数学の行列とか勉強した方が早いかも。
連立方程式を反復法で適当に解いてくエンジンとか、
すごい高度な数学のテクニックで解いてくエンジンとかいろいろある。
まずそっちの知識が無いと、ソースだけ読んでもわけわからん。
84: 2012/02/25(土)23:04 ID:lzeArZyh(1/5) AAS
>>82
俺が教えてやるよ。もちろん数学はできるんだよな?

・ペナルティ法
・撃力
・拘束
85: 2012/02/25(土)23:05 ID:lzeArZyh(2/5) AAS
撃力について

衝突したら撃力を加えるっていうのを何度もやる。
静止状態も実は撃力を何度も加えて結果的に静止してる

これは静止状態が重いんだわ
86: 2012/02/25(土)23:08 ID:lzeArZyh(3/5) AAS
だから、それに加えて力積 or 力に関してのLCP(線形相補性問題)を解く
これはどういう式かっていうと

普通静止させたい場合は、衝突部分の相対速度の法線成分が0になるっていう式を連立させて解けばいいよな?
でも、離れようとしてるのに力を加えたり、マイナスの力を加えるのはおかしいよな?

だから
力 >= 0、相対速度 >= 0、力 = 0 or 相対速度 = 0
っていう式を立てるのよ

どっちかがゼロでなければもう片方はゼロっていう

これを高速に解くのがキモなの
87: 2012/02/25(土)23:13 ID:lzeArZyh(4/5) AAS
おおまかな流れとして

・撃力を加える(静止状態とかだとかなりの回数になるから、どこかで打ち止め(近似))
・重力とかの外力を加える
・LCPを解く

速度と加速度を別に保持しておくか、速度だけにするか
つまりLCPで解く対象を速度にするか、加速度にするか

撃力を打ちどめることが多いので、近似になるけど速度をLCPで押さえこんだほうがいい。撃力を打ち止めてほっておくとめり込む
LCPで解く対象は速度だから、外力を加えるときは、dtをかけて力積として加えてしまう
88: 2012/02/25(土)23:15 ID:lzeArZyh(5/5) AAS
ペナルティ法

めり込みに応じて反発力を。めり込んだ体積に比例させたり、距離に比例させたり
ステップ数が十分短ければどれも正しいんだけど、ステップ数が広いときにどれがいいのか
って分からない

ステップ数を広くできないから、他の方法と比べて衝突判定のコストが上がってしまう
89: 2012/02/26(日)22:13 ID:uCaFSiki(1) AAS
>>82-88
レスありがとうございます。>>82です。

物理エンジン関係の資料はいくつか読んで、物理・数学関係は断片的な知識としてはあります。
それをプログラムに実装するにはどうしたらいいか判らなくてソース読んでました。

>>82を書き込んだ後、拘束ベースに関しては以下の本読んで勉強してました。
外部リンク:www.amazon.co.jp

この辺りまでは、判りました。
>>普通静止させたい場合は、衝突部分の相対速度の法線成分が0になるっていう式を連立させて解けばいいよな?

LCPの解き方がキモなのですね。次は、LCPの辺り重点的に読んでみます。
90: 2012/02/27(月)08:02 ID:+ONGrtda(1/3) AAS
ソルバも重要だけど、もちろん衝突検出の幾何学の部分も重要だよ。
そこがてきとーすぎると、やっぱり細かいとこで変な挙動になったり
誤差がふりつもってガクガクしたりするからね。
91: 2012/02/27(月)09:37 ID:nYOAmwnM(1/2) AAS
衝突検出に関しては、以下の本を1/3程度読みました。
「ゲームプログラミングのためのリアルタイム衝突判定」

時間さえ掛ければ自分のプログラムに応用できそうですし、挙動を見ながらの方が理解が早いと思っています。
初心者の自分には今時点では、目途の立っていない運動方程式の方に意識が行っています。
92: 2012/02/27(月)11:18 ID:svWsgWM6(1/3) AAS
衝突判定なんてLCPに比べればカスみたいなもの
適当やってればいい
Rapidだか、Opcodeとか参考にすれば?

普通にAABBTreeかOBBTreeでやるのが楽だな

運動方程式理解できないとか勉強足りないぞ。
オイラーのなんたらってやつやろ?

あとあの方程式は非線形だけどエネルギーを保存するやり方で差分化できる
ちょっと考えるとな
93
(1): 2012/02/27(月)11:20 ID:svWsgWM6(2/3) AAS
衝突判定で唯一やっかいな問題は
これ

画像リンク[png]:iup.2ch-library.com
94
(2): 2012/02/27(月)12:11 ID:nYOAmwnM(2/2) AAS
自分の作るプログラム上で予想どおりに動かなかった場合には、衝突判定も深く勉強しようと思います。
形状も最初は球や直方体やシリンダーといった単純な形状で考えて、シミュレーション出来たら種類を増やしていこうと思います。
自分のレベルではまだ複雑な事までチャレンジできるかんじでは無いので。

opecodeですか、ソースありそうですしダウンロードして見てみます。ありがとうございます。
95: 2012/02/27(月)12:17 ID:svWsgWM6(3/3) AAS
>>94
おいおい、最初はまず任意の多面体でやれよ
シリンダー専用衝突判定なんていうは高速化のためな

多面体でシリンダー作ればいいんだから。AABBTreeとかにすれば面の数に対して処理時間はそんなに増えない

opecodeソース読んでも分からないと思う。まあ、デモ動かしてみて計算速度の目安にするとか
解説読むとか
96: 2012/02/27(月)20:08 ID:+ONGrtda(2/3) AAS
>>93
やっかいだけど、現実的な解決方法はちゃんとある。
97: 2012/02/27(月)20:13 ID:+ONGrtda(3/3) AAS
>94
判定方法にもよるけど、球とかシリンダーとかの曲面を含むようなのは
面倒だから後回しで、最初は頂点と辺(直線)と面だけで作れる多面体だけでいいよ。

なんとかツリーとかの判定の高速化も後回しでOK。
98: 2013/01/22(火)15:53 ID:JCFnqPH7(1) AAS
新しい剛体シミュの方法思いついた
もう少し練ってデモ作る
撃力でも拘束ベースでもペナルティ法でも無い奴
99: 2017/12/31(日)20:12 ID:/rN76OKL(1) AAS
簡単にお金が稼げる方法興味ある人だけ見てください。

グーグル検索⇒『来島のモノノリウエ』

UO82Y8FR9Z
1-
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.133s*