PR:この記事にはアフィリエイトリンクが含まれます。
ゲーム物理の本を探すときは、剛体の動きと衝突判定の関係が気になるはずです。仕組みを理解すれば、挙動を調整したり不具合の原因を探したりしやすくなります。
本ごとに扱う範囲はさまざまです。力学の基礎から学ぶもの、物理エンジンを組み上げるもの、衝突判定を掘り下げるものがあります。
物理本の守備範囲
剛体を動かす仕組みを学ぶ本と、接触位置を求める技術を学ぶ本では、中心となる処理が異なります。表では、各書の主な内容と学ぶ目的をまとめました。
| 書名 | 主な内容 | 著者・刊行年 | 学ぶ目的 |
|---|---|---|---|
Game Physics Engine Development | Cycloneを一から構築 | Ian Millington・2010年 | 物理エンジン全体を理解 |
Physics for Game Developers | 力学、剛体、2D・3Dシミュレーション | David M. Bourg、Bryan Bywalec・2013年 | 基礎から学習 |
Game Physics Cookbook | C++で衝突判定と応答を実装 | Gabor Szauer・2017年 | コードで試す |
Real-Time Collision Detection | 距離判定、空間分割、GJK | Christer Ericson・2004年 | 判定処理を深掘り |
C++ Game Development By Example | Bullet Physicsをゲームに組み込む | Siddharth Shekar・2019年 | 既存エンジンを使う |
5冊はいずれも英語の紙書籍です。価格は版や在庫、オンデマンド流通の状況によって変わります。購入時は書名と版を照らし、表示価格を目安にしてください。
Cyclone構築
Ian Millington著の『Game Physics Engine Development』は、CRC Pressの第2版として出版されました。2010年発行で、524ページの英語ペーパーバックです。Cycloneを題材に物理エンジンを一から組み立てます。
粒子・剛体から数値積分や拘束へ進み、衝突検出も扱います。接触の生成と解決、摩擦、安定性まで範囲が広がる構成です。個々の処理のつながりも追えますね。
衝突後の速度がどう変わるのか、接触をどう解決するのか。内部の処理を自分のコードで確かめたい人におすすめです。
物理の基礎
David M. BourgとBryan Bywalecが共著した『Physics for Game Developers』は、O’Reilly Mediaから2013年に刊行された第2版です。全578ページの英語ペーパーバックで、強い物理の予備知識がない開発者も対象にしています。
運動学や力を出発点に、剛体運動、数値積分、衝突応答へ進みます。Euler法などの積分方法と2D・3Dシミュレーションを、式やコード例とともに扱います。
物理の式に慣れていない方が、ゲーム内の動きと結びつけて基礎を学ぶのにおすすめです。衝突判定のアルゴリズムを集中的に掘り下げる内容ではありません。力や運動から入りたい人に合いますね。
C++実装
Gabor Szauer著の『Game Physics Cookbook』は、Packt Publishing刊の第1版です。2017年発行で480ページのペーパーバック。実務的なC++の基礎がある初心者から中級者を対象にしています。
ベクトルと行列の基礎から、2D・3Dの衝突・拘束解法・接触マニフォールド・インパルス・ばね・ジョイントをレシピ形式で実装します。プリミティブ形状の判定を含む簡易剛体エンジンの例も載っています。
判定から応答まで自分でコードにし、部品ごとの役割を確かめたい人におすすめです。微積分や線形代数の知識は役立つものの必須ではありません。理論書だけでは実装を始めにくかった人にも取り組みやすい一冊ですね。
判定を深掘り
Christer Ericson著の『Real-Time Collision Detection』は、Morgan Kaufmann刊の第1版です。2004年発行、全593ページのハードカバーで、CとC++のコード例を含みます。
中心となるのは物理エンジン全体より、衝突や距離の判定です。境界ボリューム・空間分割・動的交差テスト・GJKなど、判定処理を効率よく行い、数値的に安定させる技術を掘り下げます。
ベクトルや行列に加え、計算幾何や数値・幾何のロバスト性も前提になります。候補を絞って形状を詳しく調べる方法や、境界付近の判定が不安定になる問題を学びたい人にはEricsonの本がおすすめです。
Bulletの作例
Siddharth Shekar著の『C++ Game Development By Example』は、Packt Publishing刊の第1版です。2019年発行で420ページのペーパーバック。C++による2Dゲームや、OpenGL・Vulkanを使ったゲーム開発を扱います。
物理パズルの作例ではBullet Physicsを利用し、剛体と衝突判定をゲームに組み込みます。既存ライブラリをC++のゲームへ組み込む過程を、作例を通じて追える内容です。
物理の実装とあわせてゲーム制作や描画も学びたいC++開発者におすすめです。Bullet Physicsの理論を掘り下げるより、ライブラリを使った開発の流れを知りたい人におすすめします。
衝突処理の流れ
衝突判定と衝突応答は、似た名称でも役割が違います。判定側は形状が交差するかを調べ、接触点や法線を求めます。応答側はその情報を受けて速度や回転を変えます。
箱が床に落ちる場面を考えます。まず接触の可能性がある組み合わせを広く調べて候補を減らし、次に箱と床の形状を詳しく判定します。そこで得た接触情報から押し戻しや反発を計算し、次の時間刻みに進みます。
この流れを知ると、本ごとの対象範囲が見えてきます。衝突判定のアルゴリズムならEricson、接触点から応答までの実装ならSzauerがおすすめです。物理処理全体を組む場合はMillingtonをおすすめします。
剛体の安定性
剛体の位置を毎フレーム動かすだけでは、自然な運動になりません。力から加速度を求めて速度や位置へ反映する数値積分が欠かせません。時間刻みの扱いも挙動を左右します。
床との接触では、物体が沈まないよう押し戻し、反発の強さを決めます。滑る物体には摩擦も加わります。接触点やジョイントが増えると誤差が積み重なるため、応答計算と安定性は密接です。
衝突を検出しただけでは、物理エンジンは完成しません。判定で得た接触情報を拘束解法へ渡し、積分と連携させて初めて、積み木が崩れたり物体が転がったりする動きが生まれます。
物理エンジン全体を自分で作るならMillingtonの本、式の前提から学ぶならBourgらの本、衝突処理を実装するならSzauerの本がおすすめです。学びたい処理が本の中心にあると、説明とコードを結びつけやすくなります。
結論
ゲーム物理の基礎を固めたいなら『Physics for Game Developers』がおすすめです。C++で衝突判定と応答を実装したい人には『Game Physics Cookbook』をすすめます。理論の入口が必要か、コード中心で学びたいかを考えると選びやすくなります。
エンジンの内部を一から作るなら『Game Physics Engine Development』、衝突判定を深く学ぶなら『Real-Time Collision Detection』がおすすめです。Bulletを使ったゲームの作例を追う場合は『C++ Game Development By Example』を選んでください。
5冊はいずれも英語の本です。専門用語を調べながら読む時間も見込んでおきたいところ。数学と実装のどちらを先に強めたいかを考えれば、学びたい内容に合う一冊を決めやすくなります。
Amazon の PC をスコア化してみた
Amazonにある8〜14インチの小型WindowsタブレットやノートPCを、スペック別にスコア化して比較・ランキング。






