連続体シミュレーションエンジン「Elasto」開発記
Elasto
久しぶりの投稿です。
前回の記事で述べた通り最近は絵画教室に行ってデッサンの基礎を学んでおりますが、実はその傍らで物理エンジンを開発しておりました。
その名もElasto。
弾塑性体(伸び縮みしたり、形が変わったりする物質)を意味する形容詞であるElasto-plasticから命名しました。
本記事では、Elastoをなぜ開発しようと思ったのかや、苦労している点と現在の進捗、そして今後の展望について述べたいと思います。
開発の動機
流体シミュレーションエンジン「Fluidix」は流体と剛体のシミュレーションを可能にし、それを用いた代表作「Tsunami Tactics」は私のゲームの中で断トツで多くの方に遊んでいただいております。
ただ、Fluidixを用いたゲームを4つ作った後で、どうしても物足りなさを感じてしまいました。
Fluidixは、流体という「形の無い」物質と、剛体という「形が全く変わらない」物質をシミュレーションすることができますが、その中間である「形があって、そして変形する」ような物質は再現することができません。
例えば、風を受けてしなる木のような弾性を表現することはできませんし、そしてそもそも現実の世界には形の変わらない物質である剛体は存在せず、形は変わりうるものです。
そこで、Fluidixを拡張し、弾塑性体(伸び縮みしたり、形が変わったりする物質)のシミュレーションもできるようにする計画を始めました。
苦労している点
剛体の運動は重心の並進運動と回転運動の2つだけで記述することができますが、弾塑性体となると重心だけを考えればよいわけではないので難しくなります。
だからといって各粒子間の関係を丁寧に記述して実装しようにも、今度は計算量が壁として立ちはだかります。
そして、流体のシミュレーションでナビエ・ストークス方程式の粘性応力に対応する係数を一定以上上げると計算が発散してしまったように、弾塑性体の復元力を一定以上高くしてしまうと計算が発散してしまったので、係数をいじくればあらゆる性質を表現できるというわけではなく、表現の幅の狭さに苦心しております。
現在の進捗
動画のアヒルが弾塑性体で、城が剛体です。
アヒルが重力に従って落下していき、城のしゃちほこの部分に突き刺さるとそこから裂ける様子が分かると思います。
また、アヒルの背の部分は城の上に残っておりますが、こちらも形が変形してダランと垂れ下がっているのが分かると思います。
このアヒルは「プルプルするし裂ける」という意味では現実世界の豆腐のような物体ですが、Elastoを改良して「プルプルしないけど裂ける」ような物体も表現できるようにしたいですね。
今後の展望
弾塑性体が表現できるようになれば、以下のように物体のよりリアルな動きを表現することができます。
- ゴムが伸び縮みする様子
- 布がひらひらする様子
- 建物などが破壊される様子
既存のゲームの多くは上記のような挙動を表現しきれておらず、例えば建物が破壊される様子については爆風のエフェクトを用いて爆発している様子を見せながら、その陰で建物のオブジェクトを沈めたり消去したりして簡易的に表現していることが多いかと思います。
Elastoを使うことで物体のリアルな動きを表現できるようになれば、見て、そして触って動かすだけで楽しいような物理シミュレーションゲームができるのだと思っております。
基本的な部分については上記のとおりできあがってきましたので、今年の夏あたりに公開できるよう残りの調整作業を頑張っております!
追記
(2024/7/5追記)
Elastoのロゴを作成しました。
弾性体と言えばバネですが、そのバネでElastoのEを表現してみました。
また、アイコンフォントも作っております→