2012年1月1期ゲ製作技術16: 物理演算エンジンってどうやって作るの? (82) TOP カテ一覧 スレ一覧 2ch元 削除依頼
・ 次のスレ
17: 物理エンジン AGEIA PhysX (545)
18: ゆめにっきっぽいゲームを作るスレ 10部屋目 (541)
19: おまえら土日までに一本ゲーム作るスレ13 (561)
20: 【XNA】1がアクションSTGを作るスレ【コントラ】2 (370)

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


1 :07/05/24 〜 最終レス :12/01/08
ハーフライフとか、オブリビオンのあれです。
詳しい人教えて

2 :
            o
            /  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ /
           /   このスレは無事に  /
           /  終了いたしました    /
          / ありがとうございました  /
          /                /
         /   モララーより      /
         / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄/
  ∧_∧  /                /∧_∧
 ( ・∀・) /                /(・∀・ )
 (    )つ               ⊂(    )
 | | |                   | | |
 (__)_)                  (_(__)

3 :
\               U         /
  \             U        /
             / ̄ ̄ ヽ,
            /        ',      /     _/\/\/\/|_
    \    ノ//, {0}  /¨`ヽ {0} ,ミヽ    /     \          /
     \ / く l   ヽ._.ノ   ', ゝ \       <   バーカ!  >
     / /⌒ リ   `ー'′   ' ⌒\ \    /          \
     (   ̄ ̄⌒          ⌒ ̄ _)    ̄|/\/\/\/ ̄
      ` ̄ ̄`ヽ           /´ ̄
           |            |
  −−− ‐   ノ           |
          /            ノ        −−−−
         /           ∠_
  −−   |    f\      ノ     ̄`丶.
        |    |  ヽ__ノー─-- 、_   )    − _
.        |  |            /  /
         | |          ,'  /
    /  /  ノ           |   ,'    \
      /   /             |  /      \
   /_ノ /              ,ノ 〈           \
    (  〈              ヽ.__ \        \
     ヽ._>              \__)

4 :
________
|              |
|  / ̄ ̄ ヽ,  |
| /        ', |
| {0}  /¨`ヽ {0}, !
|.l   ヽ._.ノ   ', |
リ   `ー'′   ',|
|              |
 ̄ ̄ ̄ ̄ ̄ ̄ ̄
5代目住職 ジュウシマツ和尚

5 :
>>1
まず金子氏のサンプルプログラムとにらめっこをしてみるんだ。
http://homepage1.nifty.com/kaneko/indexp2.htm
それで理解できなければ↓を読むといいだろう。
http://www.rutles.net/books/180.html
ちなみに俺は今から注文してみるぜ。

6 :
マジレスするとプログラムと物理をとことんやれば作れる

7 :
>>5
その本はプログラムで等加速度運動や円運動の
解析解を求めてるだけだったような…
金子氏のサイトを読んでるなら分かってると思うけど
あれは一定の時間刻みで数値積分していく方法で
こういうやり方は上記の本には全く載っていなかったはず
上記の本の内容がゲームと全く関係ないとは言わないけど
この内容なら高校物理の教科書があれば事足りるとも言える
なけなしのお小遣いを使うなら立ち読みして熟考したほうがよい
金子氏のサイトのソースコードについて勉強するなら
数値積分、オイラー法とかのキーワードでぐぐって勉強したほうがいい
お金があるならGame programming Gems5邦訳版がオヌヌメ

8 :
うわー、ごめん
>それで理解できなければ↓を読むといいだろう。
って書いてたね。>>7は忘れてくれ!

9 :
重複じゃボケぇと思ったら物理スレはDAT落ちしてた
ゲームのための物理(力学)
http://pc5.2ch.net/test/read.cgi/gamedev/1018255106/
まぁあれだ
>>1はODEのソースでも読んでろってこった
http://www.ode.org/

10 :
>>7
いや、コメントどうもありがとう。
偉そうに書いたけど、おいらは物理詳しいわけじゃないからね。
14歳から〜を出したのは、物理の基礎知識を知りたかったからってのが大きい。
それに硬い文章とか計算式嫌いだし、子供用なら砕いて書いてあると思ったんだ。
ちなみに家の近くの本屋には置いてなかったので、本当に注文してしまった。
Gemsは会社にあるかな。今日見てくるわ。
あと、詳しそうなので聞きたいんだが、金子氏のサンプルにある、
各質点を移動する点と見て自由に移動・質点間の初期距離の維持、のみを交互に繰り返す
というのは一般にゲーム用の物理エンジンには使われている手法なのだろうか?
軽そうなので、自分は携帯用ゲームの物理演算に使っているのだけど、
この手法をベースに使っていると、後々困ることが起きたりするのかと心配なんだ。
>>9のODEのソースも開いてみたけど、その辺の処理をしている部分がどこなのかサッパリ見当が付かなかったよ。
いきなりソースコードから読むのって辛杉だよな。な!

11 :
数式見ても分かんないと思うが…詳しく載ってても実装技術がないとデバッグの荒らし

12 :
ペナルティの良い解説ない?
やっぱspringhead?

13 :
>>12
アルゴリズムが知りたいだけなら、
金子氏のソースを見るのが一番早い。
ペナルティー法を知った上で、
いろんな不都合を回避する方法が知りたければ、
実験を積み重ねるしかないんじゃないかなぁ・・・

14 :
物理わからない自分が最近物理知りたいと思ってちらっと本を覗き見している。
物理てなんかいろいろな数式があるけども、
全てが関連しているわけではなくて、物理の表し方が違って
似たようなことを表すにもいろいろな表現方法があるかんじ?
(この計算方法だと正確な値は取れないが計算が楽とか)
ゲーム開発に必要な物理ってどういう風に学んでいくものでしょうか?

15 :
http://www.amazon.co.jp/%E3%82%B2%E3%83%BC%E3%83%
A0%E9%96%8B%E7%99%BA%E3%81%AE%E3%81%9F%E3%82%81%E3
%81%AE%E6%95%B0%E5%AD%A6%E3%83%BB%E7%89%A9%E7%90%86%E
5%AD%A6%E5%85%A5%E9%96%80-Beginning-Math-Physics-Progra
mmers/dp/4797329076/ref=sr_1_1/250-4262830-8714649?ie=UTF8&
s=books&qid=1180155658&sr=8-1

16 :
>>15
ゲーム開発のための数学・物理学入門
http://www.amazon.co.jp/dp/4797329076/
ゲームプログラミングのための3Dグラフィックス数学
http://www.amazon.co.jp/dp/4939007375/
前者¥2,940。後者¥7,350。
安物買いの銭失いの典型例

17 :
F = ma

18 :
ゲームプログラミングのための3Dグラフィックス数学
は第二版も出てるよ。
http://www.amazon.co.jp/dp/1584502770/
しかも、価格: ¥ 4,194 (税込)!

19 :
>>5の金子氏のサンプルプログラムを見て感動したんですが、
このサンプルプログラムの解説とかって無いんですか?
ソース見てもいまいちわからないです・・・

20 :
見て盗め…職人の世界か;

21 :
いまいち分からない時は答えを見るよりも試行錯誤して自分で
注釈いれていった方がよい。見るだけでは盗めない。

22 :
理論は普通に勉強するしかないだろ

23 :
エンジンではないけど、日本語の本一通り読んだところ次が一番良かった
OpenGLで作る力学アニメーション入門
http://www.amazon.co.jp/exec/obidos/ASIN/4627845618/

24 :
まだ、金子さんのSampleを色々と見て研究程度だけど、
この分野に興味をもったので保守代わりのあげ・・・・

25 :
金子氏のサンプルはさすがに古い。
つか間違ってるな(タイムステップ固定だと問題ないが)
数値積分なんか好きなのを適当に使えばいいけどverlet法がいいと思う。
むしろ物理エンジンはコンストレイント・ソルバーの実装が肝なんだが、CryEngineとか最近のは恐ろしくレベルが高い。
ODEとかBox2Dのソースを読むのはバックグラウンドとなる知識が無いと全く意味が無いぞ。Havokもタダで使えるようになるんだし、それらの使い方を覚えるほうがよっぽど有意義。
それでもあえて自作したいんならbulletのフォーラムを覗いてみるといい。
ゲームメーカーも英語出来ないプログラマの言葉を鵜呑みにして、物理エンジン自社開発とか無謀なことはしないほうがいい。もう追いつけるレベルじゃないから。

26 :
CryEngineの物理って蟹とか鳥投げると直線にすべて突き抜けてどこかに飛んでいくやつか

27 :
それは物理エンジンに接続するときのバグだろ。
さすがに定常時の人間だの鳥だのはシミュレートしてる訳じゃない。
が、奴等なら5年以内にやる。NaturalMotionのが早いかもしれん。

28 :
当たり抜けなのかも。
物理演算エンジンがしっかりしてても、衝突判定がしっかりできていない可能性。
衝突判定なくして物理挙動はできないだろうし。

29 :
≫25
Bullet等のコンサルティングと言うか受託開発についてはどう思う?

30 :
撃力ベースで物理エンジン作ってるやついる?

31 :
Havokって一般人も使えるの?

32 :
>>31
つ ttp://www.4gamer.net/games/032/G003263/20080602011/
> ゲームデベロッパ向けに無料で「Havok Physics」と「Havok Animation」の
> 提供を開始した。HavokのSDKやサンプルなども含まれており,配布対象は
> すべてのゲーム開発者。
> これは,趣味でゲームを開発している人や学生なども含まれている。

33 :
とりあえず高等範囲までの数学(もちろんIIIC含む)と物理くらい問題なくできるようになってこい
話はそれからだ。
本読んだだけで勉強した気になるなよ。
ちゃんとひとつずつ問題解けよ。

34 :
物理エンジンって
自由落下(x,y,T)とか渡したら
戻り値としてT時間次の座標が返ってくるとか
そういうプログラムのことですか?

35 :
中学や高校の教科書の公式をそのままプログラムにしてしまえばえーやんと思った。

36 :
複雑な形状の衝突や跳ね返りが面倒。

37 :
>>31
商用利用不可だけど無料版あるぜ

38 :
> 37
今は条件付き(PhysysとAnimationのみ、PCのみ)なら商用でも無料で使える。
小売価格10米ドル以上ならサイトに要登録、未満なら必要なし。
ライセンスに対する合意が必要なので、熟読して利用を判断すること。

39 :
落としてみたが、マニュアルが分からん・・・。
日本語の書籍とか出してくれないかな・・。
はじめてのHAVOKとかw

40 :
金子さんの質点バネモデルは大好きだ
簡単だしさ
やーらかい物シミュレートするにゃもってこいだら

41 :
static q[objs][3];//位置
static p[objs][3];//運動量
static f[objs][3];//力
main(){
 init();
 startThread();
 startEvent();
}
runThread(){
 popEvent(); //event→f
 calc(); //f→p, p→x
 display();//x→(display)
}
pushEvent(){ //(I/F)→event
 switch(){case A: addEvent();...}
}
何でもメインルーチンはだいたいこんな感じになるよね。
いかがお過ごし?
全然違う人とかいるかな。
毎回よく困るのは、衝突後の処理かな
判定までは簡単だけど、その後の対処が難しくて
同じ衝突イベントが連続で起こっちゃったり、
それを回避しようとするとすり抜けちゃったり
○○保存則が崩れて、ほっとくと毎回すんごい総エネルギー量になりますw
あと衝突後の位置修正処理がそのまま別の衝突を引き起こしたり…
みんな経験あるよねぇ?
自然ってほんと良く出来てるなぁと思います(ボソ

42 :
そうだ、離散時間シミュの衝突で食い込んだときの処理をどうやってるか教えてほしい。
(1) 何もせず撃力与えてそのまま
(2) 移動前時間まで戻して撃力与えてそのまま
(3) 真の衝突時間(分数ステップ)を計算し、そこまで慣性移動
→正確な撃力を求めてから残り時間中だけまた慣性移動
(1) だと食い込んだままになることが多々。
(2) で妥協することが多々。
(3) までやるのが理想なのかな?普通そこまでする?
まぁモノに依ると言われるとそれまでだけど…習慣として

43 :
中途半端だけど面の交点に戻して激力与えてるよ
ホントは(3)がやりたいけどめんどかった

44 :
>>25
すごいっすねー
自前でつくるなんて無理だわ・・・
CryEngine3
http://game.watch.impress.co.jp/docs/series/3dcg/20090501_167933.html
http://www.famitsu.com/game/news/1223057_1124.html

45 :
スレ機能してねーなw

46 :
アマゾン探してもphysXの本ならあるけど
じまえで全部作ることについて書かれた本とか全然ないし・・

47 :
シーグラフとかの論文読んで勉強して作ればいいと思うよ。

48 :
>>46
リアルタイムの実装で、処理の順番とか精度とかCPU負荷とか色々とチューニングが必要ですね
最近のPCスペックでやっと実用的にはなって来たけど、用途で色々と実装方法も変わってくる。
汎用エンジンでゲーム作るにしても理解が及んでいないとパラメータ設定もできないしまともに動かせないよ。
今ネットにある情報で作れないなら物理演算に触るなって事でしょ。

49 :
振動を抑えるためいろいろやってたら非物理エンジンになってた件について
やっぱ難しいわ

50 :
振動を抑えるのはタイムスライスを細かくして見えない幅にするくらいか

51 :
物理演算興味持って1から趣味で作り始めたんだけど
これってやっぱ物理学関係ない所で詰まりがちやねw

52 :
剛体の力学の本を買ってきて理解する。
あとは、これを読めばおk。今の剛体の処理で主流の奴
http://www.pixar.com/companyinfo/research/pbm2001/pdf/notesg.pdf
最終的に、線形相補性問題を解くことになる。これをいかに効率よく解くかが鍵。
昔やったときは、前フレームの情報を利用して効率化したけど、それでも全然遅い。

53 :
てゆうか >>25 に書いてるな。
コンストレイントソルバーっていうのが線形相補性問題を解くっていうこと。
ODEは基本>>52の論文の方法。
ODEには処理速度で互角か勝てるぐらいまでいける。でも、それ以上のフリーじゃないやつはムリポ。
剛体が300個とかになってくると、線形相補性問題の行列の情報がキャッシュに乗り切らないから、そこがボトルネックになる。
対称行列になるからとか工夫してもムリポ
実家にdelphiだけどソースコードあるはずだから、需要あるなら公開しよっかな。

54 :
自然な動きを求めると非物理エンジンになる不思議!

55 :
>>53
じゅようあり ノシ

56 :
>>55
http://www.dotup.org/uploda/www.dotup.org1759994.zip
物理計算の主要な部分だけ。3、4年前だから何やってるかわからんwww
具体的には何が知りたいんだ?

57 :
>>56
ありがとう
つい最近OpenGLに手をだしてやっとモデルデータを表示できるとこまで来たんだけど
それを動かすとっかかりになればなーと 参考にさせてもらいます!

58 :
>>57
待てよ。そのレベルだと参考にならないぞ
数学はどの程度知ってるの

59 :
>>58
工業系の大学数学レベルまでならしったかぶり出来る程度には・・・
とにかく右も左も分からなくて情報をかき集めてる段階です

60 :
>>59
数学が大丈夫なら、>>52に全部書いてると思う

61 :
物理エンジンの作り方って需要あるの?
ガチの本とか書いたら売れるのかな?

62 :
しかし英語がよめんかった

63 :
>>62
本書いたら買ってくれる?
表紙に萌え萌えな絵付ければ売れるかな
でも、面倒だから。お金目的じゃなくて、純粋な自己顕示欲で書くかもwww
http://haihu.zouri.jp/

64 :
いいの見つけた
http://kmkz.jp/mtm/mag/lab/

65 :
既存の物理エンジンだけで飽和状態なので需要はないに等しい。使い方の方が圧倒的に需要あると思う。

66 :
そうなのかよ。
原理から知りたいっていう熱心な若者はいないのか?

67 :
○○というゲームの○○の動きをプログラムで再現してみよう
みたいなのはうけるんじゃない 本にはできなさそうだけど

68 :
昔、本買って自作したけど、独立した物体同士の相互作用までは
出来たけど関節(拘束)のやり方が載ってなくて挫折した。
なのでそこんとこ頼むわ>本書く人

69 :
関節のほうが計算量少ないから、簡単だぞ
なんで、できなかったんだ?

70 :
>関節のほうが計算量少ない
え?え?(^ω^;)
ググってもよー判らんわ。関節。

71 :
それって、(本に記載されているロジック通りに組んだら)出来た
って事?

72 :
関節は、連立一次方程式になるから、計算量最悪は n * n * nで解ける。
普通の接触は、線形相補性問題になるから、計算量は最悪、2^n。
実際は反復法でやるから、ここからだいぶ減らしていくんだけど。
減らしていっても、関節のほうが圧倒的に計算量が少ない

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

74 :
>>52のpdfを検索したけどLCPとかcomplementary等の単語がみつからなかったけど、
そのへんものってるでしょうか?>読んだ人

75 :
>>74
俺は実は読んでないwww今読んだら、quadratic programって書いてある。同じことだと思う
ページG53に、そのことが書いてあって。関節も一緒に扱えるみたいなことが書いてある
需要あるのか?

76 :
剛体シミュレーションの処理時間のほとんどは、線形相補性問題に裂かれるから
その速い解き方を考えれば有名になれるはず
剛体特有の性質を使わないと速くならないから、剛体の接触から得られる行列がどういう性質を持っているか考えるのが重要

77 :
みんな言語何使ってるの?
勉強用のやつ作ってみようと思ってるけど、C#とかDelphiとか読めるの?
C++は使いたくないお

78 :
http://www.ynl.t.u-tokyo.ac.jp/publications/pdf2007/oral07/20.pdf
これのピボット法じゃなくて、ガウスザイデルに近いやり方でやってた。
収束が保障されてないってかかれてるけど、剛体に関して言えば全体のエネルギーみたいなものに着目すれば
各ステップごとに確実に減少していくから収束はするんじゃないかなって思ってる。
lemke法は知らない。今調べてる

79 :
JavaかC#ならいいんでない?
ちっと重いかもだが

80 :
わかったC#で作ってみる

81 :
lemke法、本当に収束するのかとか、どのくらいで収束するのかとか理解してないけど。少し理解した
剛体が増えると不利だな。元々の疎行列が活かしづらい
マルチグリッドLCPが出来れば超速くなるはず

82 :12/01/08
BulletXのソース読んでみたけど、あれって拘束ベースなのかな?力積ベースなのかな?
constraint(拘束)Solverっていうディレクトリが在ったから読んでたら、Impulse(力積)を加えてたんで判んなくなった。
拘束ベースの判り易いソースって知ってたら教えて欲しいな。VC++よりはC#の方が読み易いからうれしい。
TOP カテ一覧 スレ一覧 2ch元 削除依頼
・ 次のスレ
17: 物理エンジン AGEIA PhysX (545)
18: ゆめにっきっぽいゲームを作るスレ 10部屋目 (541)
19: おまえら土日までに一本ゲーム作るスレ13 (561)
20: 【XNA】1がアクションSTGを作るスレ【コントラ】2 (370)