2ちゃんねる ■掲示板に戻る■ 全部 1- 最新50    

■ このスレッドは過去ログ倉庫に格納されています

物理演算エンジンってどうやって作るの?

1 :名前は開発中のものです。:2007/05/24(木) 19:10:51 ID:NTMqyc86.net
ハーフライフとか、オブリビオンのあれです。

詳しい人教えて


50 :名前は開発中のものです。:2011/02/15(火) 13:43:32 ID:FJMNz0Ob.net
振動を抑えるのはタイムスライスを細かくして見えない幅にするくらいか

51 :名前は開発中のものです。:2011/06/28(火) 17:50:29.78 ID:omvPf4gy.net
物理演算興味持って1から趣味で作り始めたんだけど
これってやっぱ物理学関係ない所で詰まりがちやねw

52 :名前は開発中のものです。:2011/06/29(水) 01:09:53.80 ID:navapLQb.net
剛体の力学の本を買ってきて理解する。
あとは、これを読めばおk。今の剛体の処理で主流の奴
http://www.pixar.com/companyinfo/research/pbm2001/pdf/notesg.pdf

最終的に、線形相補性問題を解くことになる。これをいかに効率よく解くかが鍵。
昔やったときは、前フレームの情報を利用して効率化したけど、それでも全然遅い。

53 :名前は開発中のものです。:2011/06/29(水) 01:18:46.99 ID:navapLQb.net
てゆうか >>25 に書いてるな。
コンストレイントソルバーっていうのが線形相補性問題を解くっていうこと。

ODEは基本>>52の論文の方法。
ODEには処理速度で互角か勝てるぐらいまでいける。でも、それ以上のフリーじゃないやつはムリポ。

剛体が300個とかになってくると、線形相補性問題の行列の情報がキャッシュに乗り切らないから、そこがボトルネックになる。
対称行列になるからとか工夫してもムリポ

実家にdelphiだけどソースコードあるはずだから、需要あるなら公開しよっかな。

54 :名前は開発中のものです。:2011/06/29(水) 07:03:03.83 ID:tEh/8tcG.net
自然な動きを求めると非物理エンジンになる不思議!

55 :名前は開発中のものです。:2011/07/05(火) 00:56:10.85 ID:Mr5lFhmq.net
>>53
じゅようあり ノシ

56 :名前は開発中のものです。:2011/07/05(火) 01:29:26.88 ID:V4itKPNJ.net
>>55
http://www.dotup.org/uploda/www.dotup.org1759994.zip
物理計算の主要な部分だけ。3、4年前だから何やってるかわからんwww
具体的には何が知りたいんだ?

57 :名前は開発中のものです。:2011/07/05(火) 20:58:16.48 ID:Mr5lFhmq.net
>>56
ありがとう
つい最近OpenGLに手をだしてやっとモデルデータを表示できるとこまで来たんだけど
それを動かすとっかかりになればなーと 参考にさせてもらいます!

58 :名前は開発中のものです。:2011/07/05(火) 21:30:52.64 ID:V4itKPNJ.net
>>57
待てよ。そのレベルだと参考にならないぞ
数学はどの程度知ってるの

59 :名前は開発中のものです。:2011/07/05(火) 22:36:42.54 ID:Mr5lFhmq.net
>>58
工業系の大学数学レベルまでならしったかぶり出来る程度には・・・
とにかく右も左も分からなくて情報をかき集めてる段階です

60 :名前は開発中のものです。:2011/07/14(木) 15:23:42.32 ID:UBDMyCUV.net
>>59
数学が大丈夫なら、>>52に全部書いてると思う

61 :名前は開発中のものです。:2011/07/22(金) 12:09:26.27 ID:7j2Z83oX.net
物理エンジンの作り方って需要あるの?
ガチの本とか書いたら売れるのかな?

62 :名前は開発中のものです。:2011/07/22(金) 20:03:08.75 ID:KJLHBA7J.net
しかし英語がよめんかった

63 :名前は開発中のものです。:2011/07/22(金) 20:33:54.61 ID:7j2Z83oX.net
>>62
本書いたら買ってくれる?
表紙に萌え萌えな絵付ければ売れるかな

でも、面倒だから。お金目的じゃなくて、純粋な自己顕示欲で書くかもwww
http://haihu.zouri.jp/

64 :名前は開発中のものです。:2011/07/22(金) 20:49:28.81 ID:7j2Z83oX.net
いいの見つけた
http://kmkz.jp/mtm/mag/lab/

65 :名前は開発中のものです。:2011/07/23(土) 15:33:51.14 ID:q6zHW1Rk.net
既存の物理エンジンだけで飽和状態なので需要はないに等しい。使い方の方が圧倒的に需要あると思う。

66 :名前は開発中のものです。:2011/07/23(土) 16:01:34.95 ID:QTkODIag.net
そうなのかよ。
原理から知りたいっていう熱心な若者はいないのか?

67 :名前は開発中のものです。:2011/07/24(日) 02:58:39.80 ID:8WLTW02y.net
○○というゲームの○○の動きをプログラムで再現してみよう
みたいなのはうけるんじゃない 本にはできなさそうだけど

68 :名前は開発中のものです。:2011/07/24(日) 06:58:28.18 ID:1B5hZOTx.net
昔、本買って自作したけど、独立した物体同士の相互作用までは
出来たけど関節(拘束)のやり方が載ってなくて挫折した。
なのでそこんとこ頼むわ>本書く人

69 :名前は開発中のものです。:2011/07/24(日) 12:39:43.00 ID:P4/beFJ3.net
関節のほうが計算量少ないから、簡単だぞ
なんで、できなかったんだ?

70 :名前は開発中のものです。:2011/07/25(月) 09:17:53.21 ID:zl9SHWwo.net
>関節のほうが計算量少ない
え?え?(^ω^;)
ググってもよー判らんわ。関節。

71 :名前は開発中のものです。:2011/07/25(月) 09:21:53.53 ID:MgUklQO7.net
それって、(本に記載されているロジック通りに組んだら)出来た
って事?

72 :名前は開発中のものです。:2011/07/25(月) 14:32:49.26 ID:tsuW/g3z.net
関節は、連立一次方程式になるから、計算量最悪は n * n * nで解ける。
普通の接触は、線形相補性問題になるから、計算量は最悪、2^n。

実際は反復法でやるから、ここからだいぶ減らしていくんだけど。
減らしていっても、関節のほうが圧倒的に計算量が少ない

73 :名前は開発中のものです。:2011/07/26(火) 01:20:44.78 ID:Nkp9uwXJ.net
俺が買った本、
「ゲーム開発のための物理シミュレーション入門」って奴なんだけど、
まず、
>普通の接触は、線形相補性問題になるから
ここがすっぽ抜けてる希ガス。
なので接触したらいい具合に押し戻すって感じ。ダメだこりゃ。

74 :名前は開発中のものです。:2011/07/26(火) 07:24:43.62 ID:zKjxXwQ5.net
>>52のpdfを検索したけどLCPとかcomplementary等の単語がみつからなかったけど、
そのへんものってるでしょうか?>読んだ人

75 :52:2011/07/26(火) 07:35:42.55 ID:VOyddbGv.net
>>74
俺は実は読んでないwww今読んだら、quadratic programって書いてある。同じことだと思う
ページG53に、そのことが書いてあって。関節も一緒に扱えるみたいなことが書いてある

需要あるのか?

76 :名前は開発中のものです。:2011/07/26(火) 07:47:43.81 ID:VOyddbGv.net
剛体シミュレーションの処理時間のほとんどは、線形相補性問題に裂かれるから
その速い解き方を考えれば有名になれるはず

剛体特有の性質を使わないと速くならないから、剛体の接触から得られる行列がどういう性質を持っているか考えるのが重要

77 :名前は開発中のものです。:2011/07/27(水) 17:02:29.87 ID:jpUYGiJj.net
みんな言語何使ってるの?
勉強用のやつ作ってみようと思ってるけど、C#とかDelphiとか読めるの?
C++は使いたくないお

78 :名前は開発中のものです。:2011/07/27(水) 17:58:59.82 ID:jpUYGiJj.net
http://www.ynl.t.u-tokyo.ac.jp/publications/pdf2007/oral07/20.pdf

これのピボット法じゃなくて、ガウスザイデルに近いやり方でやってた。
収束が保障されてないってかかれてるけど、剛体に関して言えば全体のエネルギーみたいなものに着目すれば
各ステップごとに確実に減少していくから収束はするんじゃないかなって思ってる。

lemke法は知らない。今調べてる

79 :名前は開発中のものです。:2011/07/27(水) 18:22:13.85 ID:DcAliuH1.net
JavaかC#ならいいんでない?
ちっと重いかもだが

80 :名前は開発中のものです。:2011/07/27(水) 21:27:20.00 ID:jpUYGiJj.net
わかったC#で作ってみる

81 :名前は開発中のものです。:2011/07/29(金) 22:36:28.71 ID:YKUBReqf.net
lemke法、本当に収束するのかとか、どのくらいで収束するのかとか理解してないけど。少し理解した
剛体が増えると不利だな。元々の疎行列が活かしづらい

マルチグリッドLCPが出来れば超速くなるはず

82 :名前は開発中のものです。:2012/01/08(日) 13:49:46.00 ID:i1iv+V/j.net
BulletXのソース読んでみたけど、あれって拘束ベースなのかな?力積ベースなのかな?
constraint(拘束)Solverっていうディレクトリが在ったから読んでたら、Impulse(力積)を加えてたんで判んなくなった。
拘束ベースの判り易いソースって知ってたら教えて欲しいな。VC++よりはC#の方が読み易いからうれしい。

83 :名前は開発中のものです。:2012/02/25(土) 23:00:55.81 ID:HsM02eP/.net
拘束条件を解く方式のエンジンでも、拘束されてる(物体どうしが一定時間以上
連続して接触している)ときも常に力積を加え続ける方式のものもあるよ。
つまり、力積が吊り合ってたら物体が静止状態になるってことね。

ちなみに、ソース読むよりも代数学の行列とか勉強した方が早いかも。
連立方程式を反復法で適当に解いてくエンジンとか、
すごい高度な数学のテクニックで解いてくエンジンとかいろいろある。
まずそっちの知識が無いと、ソースだけ読んでもわけわからん。

84 :名前は開発中のものです。:2012/02/25(土) 23:04:14.93 ID:lzeArZyh.net
>>82
俺が教えてやるよ。もちろん数学はできるんだよな?

・ペナルティ法
・撃力
・拘束

85 :名前は開発中のものです。:2012/02/25(土) 23:05:24.17 ID:lzeArZyh.net
撃力について

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

これは静止状態が重いんだわ

86 :名前は開発中のものです。:2012/02/25(土) 23:08:49.02 ID:lzeArZyh.net
だから、それに加えて力積 or 力に関してのLCP(線形相補性問題)を解く
これはどういう式かっていうと

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

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

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

これを高速に解くのがキモなの

87 :名前は開発中のものです。:2012/02/25(土) 23:13:50.63 ID:lzeArZyh.net
おおまかな流れとして

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

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

撃力を打ちどめることが多いので、近似になるけど速度をLCPで押さえこんだほうがいい。撃力を打ち止めてほっておくとめり込む
LCPで解く対象は速度だから、外力を加えるときは、dtをかけて力積として加えてしまう

88 :名前は開発中のものです。:2012/02/25(土) 23:15:24.27 ID:lzeArZyh.net
ペナルティ法

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

ステップ数を広くできないから、他の方法と比べて衝突判定のコストが上がってしまう

89 :名前は開発中のものです。:2012/02/26(日) 22:13:56.93 ID:uCaFSiki.net
>>82-88
レスありがとうございます。>>82です。

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

>>82を書き込んだ後、拘束ベースに関しては以下の本読んで勉強してました。
http://www.amazon.co.jp/Physics-Based-Animation-Graphics-Jon-Sporring/dp/1584503807

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

LCPの解き方がキモなのですね。次は、LCPの辺り重点的に読んでみます。

90 :名前は開発中のものです。:2012/02/27(月) 08:02:04.56 ID:+ONGrtda.net
ソルバも重要だけど、もちろん衝突検出の幾何学の部分も重要だよ。
そこがてきとーすぎると、やっぱり細かいとこで変な挙動になったり
誤差がふりつもってガクガクしたりするからね。

91 :名前は開発中のものです。:2012/02/27(月) 09:37:13.51 ID:nYOAmwnM.net
衝突検出に関しては、以下の本を1/3程度読みました。
「ゲームプログラミングのためのリアルタイム衝突判定」

時間さえ掛ければ自分のプログラムに応用できそうですし、挙動を見ながらの方が理解が早いと思っています。
初心者の自分には今時点では、目途の立っていない運動方程式の方に意識が行っています。

92 :名前は開発中のものです。:2012/02/27(月) 11:18:23.63 ID:svWsgWM6.net
衝突判定なんてLCPに比べればカスみたいなもの
適当やってればいい
Rapidだか、Opcodeとか参考にすれば?

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

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

あとあの方程式は非線形だけどエネルギーを保存するやり方で差分化できる
ちょっと考えるとな

93 :名前は開発中のものです。:2012/02/27(月) 11:20:53.53 ID:svWsgWM6.net
衝突判定で唯一やっかいな問題は
これ

http://iup.2ch-library.com/i/i0575663-1330309239.png

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

opecodeですか、ソースありそうですしダウンロードして見てみます。ありがとうございます。

95 :名前は開発中のものです。:2012/02/27(月) 12:17:40.99 ID:svWsgWM6.net
>>94
おいおい、最初はまず任意の多面体でやれよ
シリンダー専用衝突判定なんていうは高速化のためな

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

opecodeソース読んでも分からないと思う。まあ、デモ動かしてみて計算速度の目安にするとか
解説読むとか

96 :名前は開発中のものです。:2012/02/27(月) 20:08:42.36 ID:+ONGrtda.net
>>93
やっかいだけど、現実的な解決方法はちゃんとある。

97 :名前は開発中のものです。:2012/02/27(月) 20:13:04.45 ID:+ONGrtda.net
>94
判定方法にもよるけど、球とかシリンダーとかの曲面を含むようなのは
面倒だから後回しで、最初は頂点と辺(直線)と面だけで作れる多面体だけでいいよ。

なんとかツリーとかの判定の高速化も後回しでOK。

98 :名前は開発中のものです。:2013/01/22(火) 15:53:44.40 ID:JCFnqPH7.net
新しい剛体シミュの方法思いついた
もう少し練ってデモ作る
撃力でも拘束ベースでもペナルティ法でも無い奴

99 :名前は開発中のものです。:2017/12/31(日) 20:12:15.69 ID:/rN76OKL.net
簡単にお金が稼げる方法興味ある人だけ見てください。

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

UO82Y8FR9Z

総レス数 99
31 KB
掲示板に戻る 全部 前100 次100 最新50
read.cgi ver.24052200