物が落ちる・ぶつかる・流れる・変形する ― それを計算で再現するのが「物理シミュレータ」です。ゲームや映像、ロボットの強化学習、システムの安全な反復試験まで、幅広く使われています。
ただ、高機能なシミュレータは、高精度な解法・大規模並列・レンダリング・ロボットモデルまで備えるぶん、実行環境や依存関係も相応に大きくなります。当社が欲しかったのは、その手前 ―「思いついた物理を、いま手元ですぐ試す」ための小さな道具でした。そこで、物理試行に必要な部分だけを小さく保った物理エンジン「physica」を自作しました。pip だけで動き、CPU でも実用、中身は読める ― AI エージェント時代の、手軽に動く物理エンジンです。
デモ映像
位置づけ:高機能シミュレータとは、狙いが違う
物理シミュレータの代表格 ― Isaac Sim / MuJoCo / Gazebo / PhysX / Genesis などは、いずれも非常に高機能です。しかも近年は、その多くがオープンに開発されています。MuJoCo は Apache-2.0 のオープンソースで pip install mujoco が使え、PhysX もソースが公開されています。Genesis は「Python で読みやすく拡張しやすい統合マルチフィジックス環境」を掲げ、剛体・FEM・MPM・PBD・SPH などを1つのシーンで扱います。NVIDIA Warp は Python で書いたカーネルを CPU/GPU 向けに JIT コンパイルし、機械学習との統合も前提にしています。「閉じていて中身に触れない」わけではありません。
一方で、高精度な解法・大規模並列・レンダリング・ロボットモデル・アセット群まで備えるぶん、
- 実行環境(機能によっては CUDA GPU が前提。たとえば PhysX の PBD 粒子系)
- 依存関係とセットアップの規模
も、相応に大きくなります。10万〜100万粒子の大規模計算や sim-to-real には向く一方、「手元でちょっと物理を試す」には道具として大きい場面があります。
physica は、そこを取りにいきません。物理試行に必要な部分だけを小さく保つ ― 目的の違う道具として作りました。
FSR の選択:あえて“軽量な物理シミュレータ”を自作
理由は明快 ― 当社の用途では「軽量かつ手軽に動かす」ことが必要だからです。physica は、そこに全振りしています。
高機能・大規模向けのシミュレータとは、はっきり住み分けます。physica が狙うのは、手元で軽快に回る、数千〜数万粒子の“試行の速さ”です。
技術の核:統一粒子表現(XPBD + PBF)
physica の設計の中心は、剛体・液体・気体・ゴムを《1つの粒子系》で連成して扱えることです。
多くのエンジンは材質ごとに専用のソルバを持ち、それらを結合して解きます(近年は Genesis のように、複数のソルバを1つのシーンへ統合する環境も登場しています)。physica は位置ベース動力学(XPBD / PBF)を土台に、すべてを1種類の粒子として統一的に解くため、水の中で剛体が浮き、ゴムが変形し…といった異材質の連成が自然に書けるのが利点です。
何ができる? ― 多彩な材質・現象を同じ engine で
同じエンジンで、流体・剛体・気体・ゴム、さらに水の渦・風・障害物・ワイヤーハーネス・布ドレープまで扱えます。表示は粒子 → ポリゴン → 粒子+ワイヤフレームの3モードを切り替えでき、内部の動きも見た目も両立します。
狙い:AI エージェントの“物理直感”を担う
physica を作る一番の理由は、AI エージェントにあります。エージェントがシーンを組む → physica で物理応答を素早く試す → 結果を見て次の一手を決める、というループの裏側で、物理の当たり前(物理直感)を肩代わりさせます。
もちろん、強化学習(RL)フレームワークとしても使えます。step 駆動の API で観測を取得でき、GPU なしでも回る=手元や CI で大量に試行できます。実験条件は JSON で保存・再現・共有できるので、「軽いからこそ、たくさん試せる」わけです。
パフォーマンス:当社環境で NumPy 実装比 最大 約10倍
「軽い」といっても、速度は妥協していません。同じシーン・同じ実装のまま、バックエンドだけを差し替えた当社環境の測定では、CPU の numba、GPU の CUDA がいずれも素の numpy 実装に対して大きく効きます。
規模に応じて最適なバックエンドを使い分けられます。小規模は CPU が有利で、1.2万粒子あたりから GPU が逆転します。
数値の位置づけ ― ここでの倍率は、physica 内部のバックエンド比較(当社環境・同一シーン)です。MuJoCo / PositionBasedDynamics(PyPBD)/ NVIDIA Warp(CPU)/ Genesis(CPU)などと同一条件でベンチマークしたものではないため、他フレームワークとの速度の優劣は主張していません。physica が取りにいくのは絶対性能の順位ではなく、依存の少なさと、手元ですぐ回せる試行の速さです。
比較:高機能・大規模向けシミュレータ vs physica
| 観点 | 高機能・大規模向けシミュレータ (Isaac Sim / MuJoCo / Gazebo / PhysX / Genesis) |
physica(本作) |
|---|---|---|
| 導入 | CUDA / SDK / 追加依存が要る場面が多い | pip install .(numpy / scipy のみ) |
| 動作環境 | CPU 対応も広い(GPU 前提の機能もあり) | GPU 動作可能・CPU でも実用 |
| 規模 | 10万〜100万粒子 | 数千〜数万粒子(手元で軽快) |
| 材質 | 材質ごとの専用ソルバを結合して解く | 単一の粒子ソルバで剛体/液体/気体/ゴムを連成 |
| 中身 | 多くは OSS(コアは C/C++/CUDA 中心) | 純Python 約3,000行(読める/改造可) |
| 主用途 | 大規模 RL・産業・sim-to-real | 学習・プロト・エージェントの物理試行 |
※ 表は“傾向”の比較です。MuJoCo のように pip だけで導入できるものもあり、ソースが公開されているものも多くあります。
どちらが優れているという話ではなく、目的の違いです。高精度・大規模・レンダリングまで必要なら前者、依存を増やさず手元で素早く物理を試したいなら physica ― という住み分けを想定しています。
まとめ
- 軽量・手軽 ― pip だけ・CPU でも実用・GPU でも加速。
- 統一粒子 ― 剛体/液体/気体/ゴムを《1つの系》で連成(XPBD + PBF)。
- 可読・純Python ― 約3,000行で中身を追える・改造できる。
- AI エージェント連携 ― 物理直感の肩代わり+軽量な RL 環境。
適所は、小規模を CPU で回す用途・教育やプロトタイピング・AI エージェントの物理試行です。「軽くて、読めて、AI と組める物理エンジン」を目指した、当社の物理シミュレータ ― それが physica です。デモやご相談を承っています。