これは Three.js Advent Calendar 2019 の8日目の記事です。
Three.js Meetup Tokyo #0で「Oimo.jsがシンプルで使いやすくてオススメ!」と言ったけど、色々と考慮するとCannon.js または Ammo.jsの方が良いという話です。
メジャーな3D物理演算ライブラリ
2019年現在でThree.jsと組み合わせやすい物理演算ライブラリは、主に以下があります(更新日順)
| ライブラリ名 | サイズ | 最終更新日 |
|---|---|---|
| Ammo.js | 1.68MB | 2019/11/16 |
| Oimo.js | 352KB | 2019/01/22 |
| Cannon.js | 384KB | 2016/05/03 |
| Physijs | 43KB | 2015/10/20 |
現状でメンテされているのはAmmo.jsですね(npmの ammo.js は4年前から更新されてないけど)
Cannon.jsやPhysijsは3年以上更新されてない状況です。
オススメの物理演算ライブラリの話は three.js forum でも議論されてます。
Cannon.js はドキュメントが整備されており使いやすいがメンテされてない、Ammo.js はメンテされているがファイルサイズが大きいと言ってる人もいますね。
ちなみにBabylon.jsではCannon.js、Oimo.js、Energy.js、Ammo.jsと幅広くサポートしてます。
しかも物理演算用のInterfaceが提供されているので、どのライブラリを選択してもほぼ同じコードで動くという(babylon.js強い!)
const scene = new BABYLON.Scene(engine);
const gravityVector = new BABYLON.Vector3(0, -9.81, 0);
const physicsPlugin = new BABYLON.CannonJSPlugin();
scene.enablePhysics(gravityVector, physicsPlugin);
APIドキュメント
Ammo.js- ドキュメントなし。本家のBullet physicsやexamplesコードをみる必要あり。
- Three.js examplesのphysicsシリーズで
Ammo.jsを使ってるのでそれを見ればいける Oimo.js- ドキュメントなし。シンプルなのでReadmeとdemosコードでいける
Cannon.js- ドキュメントあり。ググっても情報がたくさんある
Physijs- Wikiにドキュメントあり
TypeScript対応
TypeSearchで調べると、現状はCannon.jsとPyshijsが対応していました。
Oimo.jsは対応する方向がなさそうですね。
Ammon.jsはTypeSearchでヒットしないが、有志の方が対応してくれてます。
その他ライブラリなどの物理演算の採用状況
-
PlayCanvas:OSSのゲームエンジン
-
A-Frame:WebXR用のフレームワーク
-
aframe-physics-components:
Cannon.jsサポートのPluginあり -
aframe-physics-system:
Cannon.jsとAmmo.jsサポートのPluginあり
-
aframe-physics-components:
-
nunuStudio:Three.jsベースのOSSゲームエンジン
- 物理演算に
Cannon.jsを使用(ReadMeに記述あり)
- 物理演算に
-
WhitestormJS:物理演算サポートのComponentベースのフレームワーク
-
Ammo.jsを使用(ReadMeに記述あり)
-
-
React-Three-Fiber:React製のThree.jsライブラリ
- サンプルで
Cannon.jsのReact Custom Hooksあり
- サンプルで
まとめ
更新が止まってるのは少し不安ですが、お手軽に使うならCanno.jsがベストかと思います。
保守性を求めてガッツリ作るならAmmo.jsが良いかと思います。
以上、読んで頂きありがとうございました。