GLKitの基本

iOS 4あたりから、iOSにおけるグラフィックプログラミングの土台がOpenGL ES1からES2に移行されました。ES2ではシェーダー言語を使った実装が基本となるため、ES1に比べて初心者にとっての敷居が高いのが問題で、それを解決できるかもしれない注目のフレームワークがGLKitだったわけです。残念ながらiOS 5が正式リリースされた現在、GLKitはAPIとして使える状態にはなっているものの、ドキュメントはフレームワークリファレンスのみで、なかなか公式資料が他にでてこないのが困ったところ…。

 GLKitに関する基礎情報

  1. iOS 5で追加されたフレームワーク
  2. OpenGLアプリケーションを作るとき用
  3. 今までiPhoneでOpenGLアプリケーションを作るときに不便だった部分を補完してくれる

2009年にあの本を書いた時代はまだOpenGL ES 2.0に対応している端末が少なかったこともあり、iPhoneアプリではOpenGL ES 1.0を使うのが主流でした。しかし最近ではiOSのバージョンアップに伴い古い端末のサポートはどんどん打ち切られていき、それに伴いアプリでもより高性能なES 2.0を使うことが主流となりました。2.0は表現の幅が広くなりハードウェアの性能を最大限活用できる一方で、シェーダー言語等覚える事が多くなってしまったため初心者の敷居が上がってしまいました。そんな中でOpenGL ES2.0を少ない学習コストで使えるようにしてくれるのがGLKitです。

GLKitが提供する機能

GLKit Framework Reference – Introduction to GLKitによるとGLKitの機能は大きく分けて4つあります。

1. テクスチャローダ

OpenGLはテクスチャに対応しているのですが、ファイルからテクスチャを生成する機能は提供していないので、自前でファイルを展開してビットマップを作る必要がありましたが、GLKitではその部分の機能が提供されてます。詳細はこの前のポストで。

2. 数学ライブラリ

特に3D描画ではどうしてもベクトル/行列の計算等がでてくるのですが、そのために必要なクラス/関数が用意されてます。実はこれが結構便利で、GLUにあるような視野角の設定(のための行列生成)などを実現するための関数が用意されています。

3. ビュー関連

これは、iPhoneアプリでOpenGLの描画結果を表示するビューやビューコントローラ等に関するものですが、今までもテンプレートで用意されていたもので十分といえば十分だったので、そこまで「おお」とはなりませんが、フレームレート調整できるようになっていたり、描画と更新のタイミングで通知してくれたり、結構気が利いてます。

4. エフェクト

これが肝で、簡単にいうと「シェーダーを自分で書く事なくES 2.0で簡単にオブジェクトを描画できる便利なもの」です。これがあることによって、覚えなければいけないものの量が大幅に減るし、コードもかなり読みやすくなります。具体的な使い方はテンプレート解読のポストで。

GLKitのメリット/デメリット

メリット

GLKitを使うメリットは、少ない学習コスト/短いコードで意図した描画を実現できることです。GLKitを使ったコードはシェーダー言語を使った場合に比べて短いだけでなく、意図したことが直感的に伝わるため、可読性/保守性が高いです。これはデバッグのコストを減らす事につながるので、大きなポイントです。

デメリット

GLKitに限った話ではありませんが、フレームワークやライブラリを使うとどうしても若干のオーバーヘッドが発生します。シビアに最適化をしていきたい場合にはそれがネックになる可能性もありますが、実際どの程度のロスがあるのかはそのうち気が向いたら調べてみましょう。(あるいは誰か調べてみてください)

GLKitとゲームエンジン

以上をふまえて、ではゲームを作るときにGLKitをどんどん使っていくべきか、というと一概にそうとは言えません。

ゲームエンジンの存在

昨今のiPhoneゲームでは、2D/3D問わず既製のゲームエンジンを使うのが一般的になっています。前述の通りオーバーヘッドがあるため、一昔前までは処理能力の限られたスマートフォンでゲームエンジンを使う事によるデメリットも大きかったのですが、最近は端末の処理能力が大幅にアップしていることもあり、メリットの方が大きくなってきているように思います。
2DではCocos2Dの出来が素晴らしく、会社に来ている学生の子達に積極的に進めています。3DではUnityが急速に普及してきています。物理演算等の機能も含まれているし、実際のところ、0からコードを書くのに比べて圧倒的にクオリティの高い/ボリュームのあるゲームを実現することができます。

ではGLKitは

正直に行ってしまえば、2Dゲームを作りたいのであれば、まずCocos2Dを検討したほうがいいでしょう。GLKitは色々便利な機能を提供してくれるとはいえ、ゲームエンジンではないのでゲームエンジンであるCocos2Dの方がより便利で使いやすいです。またCocos2DはObjective-Cで書け、物理演算も簡単に組み込めるようになっています。多少オーバーヘッドはあるとはいえ、Cocos2DよりGLKitを強く推薦する理由はあまり見当たりません。
一方3Dに関しては、GLKitを検討すべき理由は沢山あります。Unityをはじめとする多くの3Dエンジンは学習コストがそこまで小さくなく、ライセンスも有料のものが多いこと、Objective-C以外で実装されているものに関してはiOSの機能との連携が難しい事、実装が隠蔽されていてデバッグが難しいこと、等個人で特に初心者が使う場合には様々なハードルがあるためです。

GLKitを使ってアプリを作る楽しさ

上記のことを踏まえても、3Dはもちろん2DゲームでもゲームエンジンではなくGLKitを使う理由はあります。それはシンプルで、自分でOpenGLの仕組みを知りながらプログラムを構築していくことができる楽しさにあります。
GLKitは適度に親切で過保護ではありません。どちらかというと「意味もなく不便な部分を便利にしてくれる」程度のフレームワークであり、プログラムの重要な部分はプログラマーが自分で実装していく形になります。ここにはプログラミングの本質的な楽しさがあるように思います。また、仕組みを理解することでゲームエンジンを使う場合の中での動きを理解することができるようになります。
というわけで、自分で3D(2D)プログラムを作り上げていく楽しさを味わいたければGLKitを、そんな部分には興味はないから手っ取り早くゲームが作りたければゲームエンジンを検討するのがよいのかな、というのが僕の意見です。

Pocket

「GLKitの基本」への2件のフィードバック

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です