実例で学ぶゲーム3D数学

このたび、「実例で学ぶゲーム3D数学」を
株式会社オライリー・ジャパン、宮川様、
ハイパーコンテンツ株式会社、長久様より書籍を進呈して戴きました。
重ね重ねお礼申し上げます。

実例で学ぶゲーム3D数学

実例で学ぶゲーム3D数学


まず、これを読んだからといってゲームが創れるようになる訳ではありません。
この本のターゲットはどちらかというと、
ゲームをもう作り始めているけれど、
ベクトルとか行列とか、難しいなあと苦手意識を持っている人が読む本だと思われます。


数学って苦手、だけど何だか言い出せない……なんて開発者も結構居ると思います。
ゲーム開発時には意外とこの辺りをしっかりとしてなくても、
描画を行ってくれるライブラリなんかはありますし、
動きに関してもググったりしていればそれっぽく動いてしまったりするからです。


で、そんな自分を変えたいとか、もっときちんと理解したい、
なんてときに数学書を手に取ってみては、
……わからない、という感じで挫折してしまう人もいるんじゃないでしょうか。
そういうときに、この本はとても良いと思います。


自分がこの本で良いなと思うところは座標系から入っているところで
ゲームというのはとにかく座標とベクトルをよく扱うので、
ワールド座標系、ローカル座標系、スクリーン座標系、
キャラ座標、カメラ座標、オブジェクト座標などが出てきます。


それらに対しデカルト座標系から説明に入り、
それぞれの座標空間に対する解説が入ることは、
良い導入であると感じられました。


例えば2Dゲームでもワールド座標とスクリーン座標の区別が付かない人もいます。
多くの2Dハードウェアでは、
スプライトなどはスクリーン座標系で扱われることが多いので、
これらをワールド座標系から変換しなければ正しくスクリーン内に描画することができないのですが、
ここが理解できない、なんていう人もいます。


なので、まず空間を意識すること、
座標をその空間においての座標として捉えること、
座標空間がどのような関係にあり、どう変換されるのか?
ということに着眼点を置いている導入は「イイネ!」です。


ベクトル、行列、オイラー角、クォータニオンときてC++のクラス解説が続き、
ポリゴンの構成基礎に入る流れは素直で読みやすい良書と言えると思います。


内積、外積のあたりなどは本来ドット積、クロス積と書かれていたものを
日本で使われることが多い、内積、外積といった表現に
きちんと置き換えて解説していることにも好感が持てます。*1


惜しむらくは、では、これをどう使って良いのか?
というところに踏み込めてはいないことです。
例えばベクトルを使った際に、速度や加速度といったものを用いてキャラクタを表現することがありますが、
では、
「ベクトルを使ったらゲームでどんなゲームがつくれるの? どんな表現ができるの?」
「行列を使ったら? 使えるといいの?」
という問に対する答えは書かれていません。


ただ、この本はそうしたゲームテクニック本ではなく、
数学的知識や理解を底上げしてくれる書として捉えるべきなのでしょう。


これはとても有用な事で、
日本では「ゲームを作ろう!」といった完成型を示して、
それを作るまでの浅いところをサポートした本が多い中、
こうした基礎レベルを向上させる著書は殆どないため、
大変良い物だと思います。


Webで言うと、
Railsで10分でWebアプリケーションを作ろう!」(htmlとかDBとか知らなくても良いよ派
という本と、
「リレーショナルデータベース入門」(RDBがどのような仕組みで動いているのかちゃんと知っておこうよ派
という本の違いです。


基礎を知ることで、どう使おう、こう使おうなんていう切欠にもなるのではないかと感じました。
高校生程度の数学くらいしか解らないよ、といったプログラマや、
実務でやってきたけれど、独学なんで再確認したいよ、なんてときにも良い指導書となると思います。


付録には数学の復習とゲーム開発者のための確率・統計入門もついていますので、
rand()は使った事があるけれど、偶数や奇数が交互にでてくる! なんて人や、
確率や統計なんて考えたこともなかった! なんて人にもうってつけかと思います。

*1:訳語にも気を遣っているという話をうかがいました