XNAで物理エンジンを使ってみたい!という人へおすすめ「リアルな動きのためのゲーム物理プログラミング」

id:XELFさんから献本いただいた「リアルな動きのためのゲーム物理プログラミング」を読んでみた。本の中のサンプルコードはXNA Game Studio 3.1+Visual C# 2008で書かれているので、自作XNAゲームに物理エンジンを導入してみたい、という人にはうってつけの本だ。本の中ではFarseer Physics Engine、JigLibX、PhysX、3つのエンジンに触れているが、PhysXXbox 360上で動かないので、360で動かすことを考えるなら残り2つのどちらかになる。Farseerは2D向け、JigLibXは3D向けだ。

3章ではXNA上にFarseerとJigLibXを導入する方法について述べられている。いざ物理エンジンを使おうとしたときに、どういった初期設定をすればいいのか、エンジンと自前のゲーム部分をつなぐ部分はどう作ればいいのか、という部分でつまづくことは非常に多い。3章のサンプルコードを見れば、Farseerに自前の描画処理をどうやってくっつければいいか、などのつまづきポイントの解法が分かるので、参考になるだろう。ちなみに本書のサンプルコードは以下からダウンロードできる。

4章ではかなりのページ数を割いてマトリクスやクォータニオンなどの数学について触れられている。デュアルクォータニオンなど、普段あまりお目にかからないものまで述べられているのは興味深いのだが、ちょいページ数を取りすぎな感もある。

5章は独自エンジン実装による剛体物理説明。物理エンジンが内部で行っている基本的な演算を理解するに役立つだろう。ただ説明はややあっさりめで、ある程度の物理学の素養がないと理解は難しい感じもする。以下のページなどで理解を補強しながら見るとよいかと思う。

6章のFarseerを使った物理エンジンゲームの説明もコードに関する説明は少なめ。物理エンジンをゲームに導入する際には、あばれる物体を抑制するためのパラメタ調整や、それっぽくみせるためのインチキが必要だったりと、いろいろ工夫が必要だと思うので、その辺について触れられていればよかったなあと思う。

XNAへの物理エンジン、特にFarseer Physics EngineかJigLibXの導入には非常に役に立つ本だ。この本で触れられてなくて、個人的に気になるところはやはりパフォーマンスについて。FarseerやJigLibXがどの程度の物体を扱えるのかはよく分からないのだが、360の非力なCPUで素直に物理エンジンをぶんまわすと、結構早いうちから音をあげてしまいそうな感じはする。ただその辺の最適化に関してまで触れたら1冊では入りきらないだろうなあ。

Farseerのパフォーマンスチューンについての資料はいくつかあるみたいなので、よりディープにを使いたい人はこの辺を読み込めという感じかな。