「物理演算エンジン」の版間の差分
Administrator (トーク | 投稿記録) 編集の要約なし |
|||
| (3人の利用者による、間の9版が非表示) | |||
| 1行目: | 1行目: | ||
'''物理演算エンジン'''(読み:ぶつりえんざんエンジン、[[英語]]:physics engine)とは、質量・速度・摩擦・風といった、古典力学的な法則をシミュレーションする[[コンピュータ]]の[[ソフトウェア]] | '''物理演算エンジン'''(読み:ぶつりえんざんエンジン、[[英語]]:physics engine)とは、質量・速度・摩擦・風といった、古典力学的な法則をシミュレーションする[[コンピュータ]]の[[ソフトウェア]]である。略して「物理演算」、「物理エンジン」、「Physics」とも呼ばれる。 | ||
==概要== | ==概要== | ||
[[3DCG]]の品質向上に伴い「物体の動き」も現実的な挙動が求められるようになってきた。そうした需要を満たすために登場したのが物理演算エンジンである。 | |||
既存の3Dモデルに「重さ」や「硬さ」などのパラメーターを持たせ、物理演算エンジンに投げ込み、「何ミリ秒進む」などという命令を実行すると、その時点における物体間の衝突や移動先などを自動計算してくれるというものである。物理演算エンジンを使うだけの[[プログラマー]]は挙動について深く考える必要がなくなる。 | |||
物理演算エンジンのほとんどは[[プログラム]]などに組み込む[[ミドルウェア]]([[ライブラリ]])である。稀に[[スタンドアロン]]で動く[[ソフトウェア]]もある。スタンドアロン製品は[[ロボコン]]に出ているような[[ロボット]]の開発者なんかが設計段階の大雑把なシミュレーションに使っているらしい。 | |||
=== 非リアルタイムとリアルタイム === | |||
[[ググる]]と[[ゲームエンジン]] | 物理演算エンジンとひとことでいっても、映像作品向けのリアリティを追求したものと、[[ゲーム]]向けの物理法則を無視して派手に作用するものがある。 | ||
前者はリアルタイム性が求められないため分散処理などへの対応が進んでいる。[[データ]]を複数の[[コンピューター]]に分散配置して一気に演算を行うため、データ分配に時間がかかるため瞬発力はないが、膨大な演算能力を割り当てることができる。いわゆる[[スーパーコンピューター]]などを使う方式だ。 | |||
一方、後者のゲーム向け物理演算エンジンは1フレームの処理時間(60fpsであれば16ミリ秒)の一部しか使えない。1フレーム中には物理演算以外の他の処理もあるので物理演算に割り当てられるのはせいぜい半分の8ミリ秒程度であろう。そのため大胆な近似モデル(それらしい挙動になるざっくり演算)が採用されているのが一般的である。 | |||
一昔前の[[ゲーム]]で多様された[[Havok]]など一部のライブラリでは放送用とゲーム用の演算方式を設定で簡単に切り替えられる。 | |||
== 検索キーワード == | |||
[[ググる]]と[[ゲームエンジン]]系の情報は豊富にある。日本語による情報は少ないため[[検索キーワード]]は[[英語]]の「physics」を使うと捗る。 | |||
==主な物理演算エンジン== | ==主な物理演算エンジン== | ||
=== | ===物理演算エンジン付きアプリケーション=== | ||
=== | *[[Phun]] = 物理演算エンジン付きドローソフト。描いたイラストに物理演算(重力)が適用されてまともに描けない。 | ||
* [[PhysX]] | *[[RigidChips]] | ||
*: [[NVIDIA]]が買収。 | *[[Blender]] = 3Dモデリングソフト。 | ||
* [[Havok]] | *[[Unity]] = [[ゲームエンジン]] | ||
*: [[Intel]]が買収。[[Bullet]]登場以前は[[AMD]]も推奨していた。 | *[[Godot]] = [[ゲームエンジン]] | ||
* [[Bullet]] | |||
*: [[AMD]]が引き抜いた[[Havok]]開発者の新作。裏に[[Google]]もいる。 | ===三大物理演算エンジン=== | ||
三大物理演算エンジンは半導体メーカーの資金援助が色濃い。 | |||
*[[PhysX]] | |||
*:[[NVIDIA]]が買収。 | |||
*[[Havok]] | |||
*:[[Intel]]が買収。[[Bullet]]登場以前は[[AMD]]も推奨していた。 | |||
*[[Bullet]] | |||
*:[[AMD]]が引き抜いた[[Havok]]開発者の新作。裏に[[Google]]もいる。 | |||
===.NET Framework向けライブラリ=== | |||
この項目は[[Xamarin.Mac]]および[[Xamarin.Android]]における[[MonoGame]]で使える物理演算エンジンを調査するために書いている。よって内容は極端に偏っているし、ざっくり触った程度での大嘘も含まれる。 | |||
;2D | ;2D | ||
* [[Box2DX]] | |||
*: [[Box2D]]のラッパーライブラリ。 | *[[Box2DX]] | ||
*: ラッパーライブラリなので[[Xamarin]]環境では使えない。 | *:[[Box2D]]のラッパーライブラリ。 | ||
* [[CocosSharp Box2D]] | *:ラッパーライブラリなので[[Xamarin]]環境では使えない。 | ||
*: [[Box2D]]を[[C Sharp|C#]]で書き直した[[ピュアマネージド]]版。 | *[[CocosSharp Box2D]] | ||
*:[[Box2D]]を[[C Sharp|C#]]で書き直した[[ピュアマネージド]]版。 | |||
;3D | ;3D | ||
* [[BulletSharp]] | |||
*: [[Bullet]]のラッパーライブラリ。 | *[[BulletSharp]] | ||
*: ラッパーライブラリなので[[Xamarin]]環境では使えない。 | *:[[Bullet]]のラッパーライブラリ。 | ||
* [[Bullet-XNA]] | *:ラッパーライブラリなので[[Xamarin]]環境では使えない。 | ||
*: [[Bullet]]を[[C Sharp|C#]]で書き直した[[ピュアマネージド]]版。 | *[[Bullet-XNA]] | ||
*: Bulletが壮大なライブラリであるため部分移植であり[[Bullet]]のすべてが使えるわけでは無い模様。 | *:[[Bullet]]を[[C Sharp|C#]]で書き直した[[ピュアマネージド]]版。 | ||
*: 調査中。最有力候補かもしれない。 | *:Bulletが壮大なライブラリであるため部分移植であり[[Bullet]]のすべてが使えるわけでは無い模様。 | ||
* [[UrhoSharp Physics]] | *:調査中。最有力候補かもしれない。 | ||
*: これも[[bullet]]ベースらしい。 | *:https://code.google.com/archive/p/bullet-xna/ | ||
*: 調査中 | *:https://github.com/Stereoarts/bullet-xna-unity - Unity移植版 | ||
* [[Jitter Physics]] | *[[UrhoSharp Physics]] | ||
*: [[C Sharp|C#]]でで書かれたオリジナルの物理演算エンジン。 | *:これも[[bullet]]ベースらしい。 | ||
*: [[反発係数]]の指定が0〜1の範囲ではなかったり、どうやっても[[重力]]を無視してフワフワしてしまう。[[ソース]] | *:調査中 | ||
*[[Jitter Physics]] | |||
*:[[C Sharp|C#]]でで書かれたオリジナルの物理演算エンジン。 | |||
*:[[反発係数]]の指定が0〜1の範囲ではなかったり、どうやっても[[重力]]を無視してフワフワしてしまう。[[ソース]]を<del>追う気力はない</del>追った結果、これに若干の手直しを入れるのが一番現実的ではないかという結論に至った。 | |||
*:https://github.com/mattleibow/jitterphysics | |||
==関連項目== | ==関連項目== | ||
*[[ゲームエンジン]] | *[[ゲームエンジン]] | ||
[[category: 物理演算エンジン]] | |||