かなり密度の高い内容のソース・コード付き3Dプログラミングの解説書 ―― 『実例で学ぶゲーム3D数学』

大野 典宏

tag: 組み込み Interface

書評 2009年5月 8日

かなり密度の高い内容のソース・コード付き3Dプログラミングの解説書

163dmath.jpg『実例で学ぶゲーム3D数学』
著者: Fletcher Dunn,Ian Parberry
翻訳: 松田 晃一
出版社: オライリージャパン
ISBN-10: 4873113776
ISBN-13: 978-4873113777
484ページ
発売日: 2008年10月4日
価格: 3,400円(税抜き)
Amazonで購入



 本年の4月,ドイツで行われたプログラミング・コンテスト「Breakpoint」にて,4Kバイト以下部門で優勝した「elevated」というプログラムが世界中の注目を集めました.Windows上で動作する3Dアニメーション作品なのですが,かなり複雑な自然の地形や音楽まで含めて,わずか4Kバイトという信じられないサイズに収めてしまったのです.

 世界中のプログラマが驚愕したと言っても過言ではないかもしれません.

 4Kバイトと言われても,メモリがバブル状態になっている昨今ですから,あまり実感が湧かないかもしれなせんが,毎週書いているこの書評は,テキストで4Kバイトです.どれくらいのものなのか,分かるでしょう.

 実際にプログラムをダウンロードして実行してみましたが,裏技を使いまくっているらしく,セキュリティ・プログラムが警告を出したり,埋め込みのデータを最小限にして計算式で算出しているらしく,実行されるまでにかなりの時間がかかりました.ですから,試すのはあまりお勧めできませんが,実行結果の動画を見れば誰もが納得するでしょう.

 まあ,これはある種の「競技」ですから,このプログラムで用いられた手法が一般的なアプリケーションで使って良いものなのかどうかは意見が分かれるところだと思います.

 このプログラムから得られるのは,データよりも計算式のほうがコンパクトであるという当たり前の事実です.「車輪の再発明」のようなことですが,とにかく高価なオーサリング・ツールを使い,巨大なデータの固まりをマッピングして塗りつぶしまくる,という現在の手法に対する反逆のような気がして非常に興味深いと思いました.

 さて,何度か書いていますが,そもそもコンピュータというものは計算しかできません.絵を描くのも,文章が書けるのも,ゲームで遊べるのも,すべては計算の結果です.普通はプログラム言語で記述し,抽象化されているので実感が薄まってきているかもしれませんが,最終的にコンパイルし,機械語のレベルになったら,もうプロセッサは計算しかしていません.その結果をさらに加工し,テキストや絵として表示しているからこそ,Webの閲覧もテキストの書き込みもできるわけです.

 ですから,WindowsであろうとLinuxであろうと,ユーザ・インターフェースによって隠されていますが,煎じ詰めると「常に何かを計算している」という事実は動きません.たとえテキスト・エディタしか使わなくても,Windowsはウィンドウの表示,フォントの展開と表示,スクローリングの際の再計算など,かなり複雑な計算を行っているわけです.

 まあ,そんな事情があるので,Windowsの同じアプリケーションでもバージョンやCPUのパワーによって速くなったり遅くなったりするわけです.

 何度も取り上げていますが,評者が数学にこだわるのは,「ツールがどれだけ便利になろうとも,最後には数学の知識に還元されるので,プログラマは自分が向き合っているプロダクトに必要な数学の知識を持っているのかどうか,そこで実力が決まる」と考えているからです.

 さて,今回紹介する本は,「ゲーム」と題されていますが,これは3Dのアプリケーションの中で最も高速で複雑な処理が必要とされるのがゲームである,というだけの話にすぎません.実際には座標変換や行列,四元数といった計算は,シミュレーションや立体CAD,ロボットの制御,ヴァーチャル・リアリティなどでも必要になります.

 いくら便利なツールがあるからといって,組み込み機器にShadeやMayaを組み込む人はいないでしょう.または3D表示用のミドルウェアを買ってしまうという手段もありますが,予算との兼ね合いになります.ですから,面倒くさくても理解していた方が絶対に「お得」です.

 本書は,数式とC++のコードばかりで埋め尽くされているので,立ち読みする段階では「引いてしまう」かもしれませんが,実際に読み込んでみると,かなり懇切ていねいに書かれています.これまでも類書はありましたが,コーディングの根拠まで書かれた親切な本だと思います.

 誰もが最初に挙げた「elevated」を実装できるレベルにある必要はありませんし,「elevated」は縮小化しすぎているために計算処理が重くなりすぎてしまっているので,実用的ではありません.

 しかし,膨大なデータを用意して,それをパラパラ・アニメで動いているように見せる原始的な力業と,計算で全部をまかなってしまうという極端な「力業」の間にある中間点を知る意味では有用でしょう.


大野典宏
Project NR
norihiro.oono@gmail.com

組み込みキャッチアップ

お知らせ 一覧を見る

電子書籍の最新刊! FPGAマガジン No.12『ARMコアFPGA×Linux初体験』好評発売中

FPGAマガジン No.11『性能UP! アルゴリズム×手仕上げHDL』好評発売中! PDF版もあります

PICK UP用語

EV(電気自動車)

関連記事

EnOcean

関連記事

Android

関連記事

ニュース 一覧を見る
Tech Villageブログ

渡辺のぼるのロボコン・プロモータ日記

2年ぶりのブログ更新w

2016年10月 9日

Hamana Project

Hamana-8最終打ち上げ報告(その2)

2012年6月26日