メインメニューを開く

差分

物理演算エンジン

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