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