WebOS Goodies

WebOS の未来を模索する、ゲームプログラマあがりの Web 開発者のブログ。

WebOS Goodies へようこそ! WebOS はインターネットの未来形。あらゆる Web サイトが繋がり、共有し、協力して創り上げる、ひとつの巨大な情報システムです。そこでは、あらゆる情報がネットワーク上に蓄積され、我々はいつでも、どこからでも、多彩なデバイスを使ってそれらにアクセスできます。 WebOS Goodies は、さまざまな情報提供やツール開発を通して、そんな世界の実現に少しでも貢献するべく活動していきます。
Subscribe       

難解だが高度な内容が光る「iPhone 3D プログラミング」書評

オライリーさんから書籍「iPhone 3D プログラミング」を献本いただいたので、本日はそれをレポートしたいと思います。実は献本いただいたのは一ヶ月以上前なのですが、なかなか記事を書くことができずに時間が経ってしまいました。

書籍の全体の印象としては、ちょっと説明が難解で、初心者の方にはあまりおすすめできないと感じました。とくに 3D プログラミングの知識のない方がいきなりこの本を購入すると後悔することになるでしょう。

しかし、内容自体はとてもしっかりしており、他の書籍ではほとんど解説されない内容も多く含まれています。この記事を読んだ上で興味を持てる方なら、間違いなく買って損はありません。それぐらいエッジの効いた本です(私に献本がまわってくるのはそういう本ばっかりな気が ^^;)。

強火で進めさんでも本書を紹介されています。あわせて参照すると、より本書の傾向がわかるかと思います。

「iPhone 3D Programming」の翻訳本「iPhone 3Dプログラミング ―OpenGL ESによるアプリケーション開発」
http://d.hatena.ne.jp/nakamura001/20110304/1299258710

「iPhone 3Dプログラミング ―OpenGL ESによるアプリケーション開発」についてもう少し詳しく
http://d.hatena.ne.jp/nakamura001/20110403/1301848563

概要

まずは各章の内容を簡単にご紹介します。

1 章 クイックスタートガイド
iPhone 開発の概要に始まり、開発環境を構築して矢印を表示するサンプルプログラムを構築します。
2 章 3DCG のための数学
OpenGL ES の基礎概念、座標変換行列、透視変換、行列スタック、クォータニオンといったところを OpenGL のコードを交えて解説し、 1 章で作成したサンプルの矢印を立体(円錐)に差し替えます。
3 章 頂点とタッチポイント
最初にタッチイベントの処理方法を解説して 2 章のサンプルをタッチした方向に矢印が向くように変更します。その後、 VBO / IBO について解説し、パラメトリック曲面をワイヤーフレームで表示するサンプルを新たに構築します。
4 章 照明効果とシェーディング
まずデプスバッファ、パラメトリック曲面の法線の算出方法、ライティング計算などについて解説し、 3 章のサンプルをライティングされたサーフェイスモデルで表示するように改良します。さらに、 Wavefront の OBJ ファイル読み込みにも対応させます。
5 章 テクスチャと画像キャプチャ
4 章のサンプルにテクスチャマッピングの機能を追加しつつ、 UIImage による PNG 画像の読み込み、 Open GL ES のテクスチャの基礎、バイリニア・ミップマップフィルタ、 PVRTC 圧縮テクスチャなどを解説します。さらに Quartz を使ってテクスチャの変形などを行う方法を解説し、最後にカメラ画像を球面に貼り付けるサンプルを作成します。
6 章 ブレンディングと拡張現実
OpenGL ES の半透明合成の機能をひととおり説明した後、鏡像とステンシルを利用して床面反射の表現、 FBO を利用したアンチエイリアスやジッタ処理、テクスチャを利用した線のアンチエイリアスなどのテクニックを紹介します。さらにカメラ画像と OpenGL ES のレンダリング画像を合成して AR っぽいことをやるサンプルを作成します。
7 章 スプライトと文字列
Python スクリプトで文字のテクスチャを作成し、テキストをレンダリングする方法を解説しています。さらにマルチテクスチャによる少し凝ったテクスチャアニメーション、 UIKit のコントロールと OpenGL ES 画像との合成、ポイントスプライトなどのトピックを解説します。
8 章 高度な照明効果とテクスチャ技法
OpenGL ES 1.1 のテクスチャコンバイナについて解説した後、 DOT3 バンプマップを OpenGL ES 2.0 と 1.1 の双方で実装します。さらにキューブマップを利用した環境マッピング、異方性フィルタ、ブルームエフェクトなどの実現方法を解説します。
9 章 最適化
最適化ツール Instruments の使い方、 DOT3 ライティングや焼付けによる照明効果、カリングとクリッピング、シェーダー最適化のコツ、 GPU スキニングといった、パフォーマンス最適化に関連するトピックを解説しています。
付録 A C++ ベクトルライブラリ
本書で使用しているベクトル演算ライブラリのソースコードです。
付録 B プロが使う最適化テクニック
監修の安藤幸央氏により、 iPhone のハードウェアに密着したさまざまな情報、テクニック等が紹介されています。
付録 C 経験則による最適化テクニック
頓智ドット株式会社の高橋憲一氏により、主に AR アプリケーションの開発に役立つ最適化が紹介されています。

これだけ見るととても充実した内容に思えます・・・だがしかし。

6 章以前は忘れてください。

とにかく構成がまずい。チュートリアル形式と言えば聞こえはいいのですが、サンプルで必要になった知識を場当たり的に説明していくので、まったく体系化されないんですよね。現在解説されているのが iOS の機能なのか、 OpenGL なのか、はたまた一般的な数学なのかも、初心者にはわからないんじゃないかと思います。全体的に、わかっている人にしかわからない説明という印象を持ちました。

Zファイティングへの対策や PVRTC の使い方、 iPhone 3G でのステンシルの代替手段など有用な情報も多いのですが、初心者向けの情報の中に埋もれてしまっているので探すのもひと苦労。もう少し読者層を絞った上で、構成を整えてほしかったところです。解説されている内容自体はとてもしっかりしているだけに残念。 

7章以降が本番

しかし、基礎知識を解説し終えた 7 章からは、筆者さんの深い知識が炸裂します。とくに 7 章で解説されている符号付き距離場 (signed distance field) を使ったフォントのスムージングと文字飾りの実装が素晴らしい。これはハーフライフで有名な Valve 社の Chris Green 氏が SIGGRAPH 2007 で発表したテクニックで(下に論文を貼ってあります)、低解像度のテクスチャでもジャギーを最小限に抑えた高品質なフォントを表示できます。さらにフラグメント・シェーダーで中抜きや影などの描画も可能です。

あまり広く知られた技術ではなく、とくに日本語の書籍で 8SSEDT による生成方法も含めて解説されたのは、これが初めてではないでしょうか(部分的な解説は Game Programming Gems 6 にもあります)。本書ではこのテクニックを iPhone で実現する方法が詳細に解説されており、「俺はこれを書きたかったんだYo!」という筆者さんの魂の叫びが聞こえてきそうです(笑)。

http://www.valvesoftware.com/publications/2007/SIG...

その後も、 7 章の最後ではバネ格子を使ったクロスシミュレータもどきをさらりと実装しますし、 8 章では DOT3 バンプマッピングとそれに付随する接線空間基底の説明、キューブマップを使った環境マッピング、 HDR っぽいブルーム効果の実現方法などを足早に説明します。そして 9 章では最適化やボトルネックになりやすい要素について個々に解説しています。

いずれも他の書籍ではあまり解説されていない高度な内容で、とても読み応えがあります。 iPhone で本格的な 3D アプリケーションを実装する際には、非常に役立つ知識だと思います。

付録も充実

安藤氏、高橋氏による付録も充実した内容です。安藤氏は iPhone / iPad の各機種ごとの違いとそれを吸収するプログラミングを中心に解説されていて、とくに各機種の OpenGL ES 拡張のサポート状況一覧表や iOS4 で有効になったフルシーンアンチエイリアスの使い方はとても資料価値が高いと思います。

高橋氏は実際の AR アプリケーションで必要となる実践的な最適化や描画クォリティ向上のテクニックを解説されています。大量のスプライトを効率よく表示する方法、複数のコンテキストでのリソース共有、 OpenGL ES の画面とカメラ画像との合成、 Android とのマルチプラットフォーム開発など、アプリ開発の前に知っておきたい情報が満載です。

ちなみに、ここで解説されている OpenGL ES とカメラ画像の合成方法(フレームバッファのアルファ値を保つ方法)はパフォーマンスが高い分、正確さは若干犠牲にされています。より正確なアルファ値が必要な場合はこちらの記事で説明した WebGL 向けの方法が応用できます。確認していませんが、たぶん iPhone 3G でもいけるはず :)

基本をマスターしてさらに上を目指す人におすすめ

以上のように、本書は iOS や 3D プログラミングが初めての方にはちょっとお勧めできません。しかし、基本的なことを覚えて、さらに上を目指そうという方にはかなり有用な資料になるでしょう。とくに 7 章以降は他の書籍では得られない知識が満載なので、それだけでも値段分の価値はじゅうぶんにあります。

とはいえ、本書が対象読者を適切に設定できていないのはとても残念です。筆者の Philip Rideout 氏は元 NVIDIA のエンジニアだそうですし、本書の内容から考えてもとても優秀な方なのでしょう。ぜひ次回は iOS+OpenGL の応用技術に絞った解説書を執筆してほしいと思います。

関連記事

この記事にコメントする

Recommendations
Books
「Closure Library」の入門書です。
詳しくはこちらの記事をどうぞ!
Categories
Recent Articles