これをまだ紹介していなかった。改めて献本御礼。

実例で学ぶゲーム3D数学
Fletcher Dunn・ Ian Parberry/ 松田晃一訳
[原著:3D Math Primer for
Graphics and Game Development]
クォータニオンは四元数と呼ばれる数学上の特殊な概念で、1995年の日本には少なくともクォータニオンを解説した書籍はひとつもなかった。大学の図書館で何度検索しても見つからず、結局、秋葉原の書泉ブックタワーで、一万円もする分厚い洋書を買って、そこにほんの2ページばかり載っていただけだった。
実のところ実用面における四元数 (Quaternion) が知られていないのは今もそれほど変わっていないのだけど、「これ読め」ならこうしてまとまっているのだから。
本書「実例で学ぶゲーム3D数学」は"3D Math Primer for Graphics and Game Development"の全訳。本書があくまで数学の本であってプログラミングの本でないのは、コードサンプルが生のC/C++で書かれていることでもわかる。これがプログラミングの本であったらOpenGLやDirectXを使っていただろう。
それだけにむしろ本書の理論と実践のバランスは、それぞれの専門書よりも取れていると感じた。ゲームプログラマーでない私にもよい線形代数の復習となった。うち一番目から鱗だったのが、四元数の扱い。
むしろ数学や物理を習った人は、「四元数」という言葉を見て不吉に感じるのではなかろうか。あの大天才ハミルトンは、自らの発見にはまって逝ってしまったのだから。
ウィリアム・ローワン・ハミルトン - Wikipedia晩年のハミルトンは、アルコール中毒に溺れながら誰にも理解される事のない数学研究に没頭した。遺体が発見された時、ハミルトンの部屋は酒と肉汁にまみれた二百数十冊のノートで埋め尽くされており、この中には正しい物、誤った物、判断のつかない物が入り混じった数式の山が残されていたという。また四元数は一部に「四元数カルト」と呼ぶべき一団を構成するものの、大勢からは無視され、省みられるまでに100年ほどの時間を必要とした。
その「四元数」に引導を渡したのが、ベクトル解析。そこにおいてハミルトニアンはなくてはならないものだというのが歴史の皮肉をさらに深めている。
そんな四元数が復権を果たした--いや、果たしつつあるというべきか--のは、なんと1990年代。手元の「数学用語小辞典」(原著1992年、訳書1996年)を見ても、四元数はハミルトンの欄にはあっても独立した項目がなかったぐらいだ。
Quaternion - Wikipedia, the free encyclopedia^ Ken Shoemake (1985). "Animating Rotation with Quaternion Curves". Computer Graphics 19 (3): 245–254. doi:10.1145/325165.325242. http://www.cs.cmu.edu/~kiranb/animation/p245-shoemake.pdf. Presented at SIGGRAPH '85.
Tomb Raider (1996) is often cited as the first mass-market computer game to have used quaternions to achieve smooth three-dimensional rotations. See, for example, Nick Bobick's, "Rotating Objects Using Quaternions", Game Developer magazine, July 1998
ゲームへの応用も、Tomb Raiderが嚆矢だとある。ララは四元数の賜物だったのだ。
それではなぜ四元数なのか。
すべてのジンバルロックを、生まれる前に消し去れるからだ。
専門家でなくとも、3Dを扱うのに三次元における物体の向きを扱う必要があることはわかる。その向きをどう表現するか?軸を三つ用意して、その角度を使えばいいというのは子供でも理解できる。首を左右に傾けるのがロール(roll)、前後に振るのがピッチ(pitch)、左右に振るのがヨー(yaw)。三軸で方角を表すことを、専門用語ではオイラー角という。
ところが、オイラー角だと方角が一意に定まらないのだ。同じ3次元でも位置は(x,y,z)で一意に決まるのに。たとえば、真上を向くことを考えてみよう。素直に首を90度上に傾けてもよいが、左右どちらを向いてから首を上げてもやはり真上になってしまう。
これが、ジンバルロックだ。
Gimbal lock is the loss of one degree of freedom in a three-dimensional space that occurs when the axes of two of the three gimbals are driven into a parallel configuration, "locking" the system into rotation in a degenerate two-dimensional space.ジンバル - Wikipedia
航空宇宙分野の慣性航法システムのジャイロにおけるジンバルなど、3軸の全てに自由な運動がある場合は、機体の回転によって3つのジンバルリングのうち2つの軸が同一平面上にそろってしまうジンバルロックという現象が発生しうる。発生すると、本来3あるはずの自由度が2になってしまう。
これがいかに困った自体を引き起こすか。アポロ11号は、それで遭難しかけたのである。
Gimbal lock - Wikipedia, the free encyclopediaRather than try to drive the gimbals faster than they could go, the system simply gave up and froze the platform. From this point, the spacecraft would have to be manually moved away from the gimbal lock position, and the platform would have to be manually realigned using the stars as a reference.
このときは天体観測で向きをあわせることによって事なきを得たが、Collinsの「四軸目のジンバルをクリスマスプレゼントに」とはなんとも罪作りな台詞ではないか。これのおかげで歴史が四半世紀程遅れたのだとしたら。
このジンバルロックを、四元数は実に鮮やかに解決してみせる。どう解決しているかは本書を読んでのお楽しみ--といいたいところであるが、よりによってこの肝心要の部分に誤植があった。恐い。恐すぎる。
正誤表 = O'Reilly Japan - 実例で学ぶゲーム3D数学より。ここで紹介する正誤表には、書籍発行後に気づいた誤植や更新された情報を掲載しています。以下のリストに記載の年月は、正誤表を作成し、増刷書籍を印刷した月です。お手持ちの書籍では、すで修正が施されている場合がありますので、書籍最終ページの奥付でお手持ちの書籍の刷版、刷り年月日をご確認の上、ご利用ください。
■P.164 式9-9- 【誤】
- 【正】
- 【誤】
- 【正】
これ、一体どこが間違っているのかぱっと見ておわかりいただけるだろうか?私も一目ではわからなかった。最後の×(cross product)に注目。v1とv2が逆になっている。残念ながらこのかけざんは3x5と違って順番が×だと×である。くわばらくわばら。
クォータニオン - UEI/ARC shi3zの日記「そうだな。じゃクォータニオンをサポートさせようか。あれがあるといろいろ便利だしねえ」
私の記憶が確かなら、OpenGLもまだネイティブにはサポートしていない。Webをざっと見る限り、皆自前でやっているようだ。こういうものこそ、ライブラリー化すべきだと思うのだが。専門書ですら誤植がなかなか指摘されないのだから。
ゲームに限らず、位置と方角を扱うプログラムを書いていて途方に暮れている方は、ぜひ。地図そのものだって間違っている可能性があることをも本書は教えてくれたけど。
Dan the Disoriented
目次O'Reilly Japan - 実例で学ぶゲーム3D数学より
|
|
このブログにコメントするにはログインが必要です。
さんログアウト
この記事には許可ユーザしかコメントができません。