オススメ機能
Twitter
お気に入り
記事履歴
ランキング
お気に入りタイトル/ワード

タイトル/ワード名(記事数)

最近記事を読んだタイトル/ワード

タイトル/ワード名(記事数)

LINEで4Gamerアカウントを登録
QRコードでLINEの4Gamer
アカウントを友達登録すると
月〜金の週5回,21時に厳選
ニュースをお届けします!
※購読にはLINEアプリが必要です
特集記事一覧
注目のレビュー
注目のムービー
印刷2011/09/09 18:24

イベント

[CEDEC 2011]Android向けのハイエンドゲームを作るには? 「Tegra技術概要およびTegraゲーム開発について」レポート

NVIDIA デベロッパーテクノロジー デベロッパーテクノロジーエンジニアの小林忠人氏
 CEDEC 2011最終日となる2011年9月8日,「Tegra技術概要およびTegraゲーム開発について」と題された講演をNVIDIAの小林忠人氏が行った。
 「Tegra」を強調したタイトルではあったが,NVIDIA製ツールの紹介やTegraに関する注意点はところどころに入るものの,大筋はAndroidでハイエンドゲーム開発を行うときの注意点などを解説するという内容だった。
 本講演のポイントとして挙げられるのは,以下の2点。

  • NDK(後述)の使用を前提としている
  • すでにあるゲームの移植を前提としている

Androidにおける開発ガイドとしては少し珍しい内容といえるだろう。

ミドルウェア/開発ツール
 講演内容のメイン部分とはあまり関係ないのだが,最初に軽く行われたTegraプロセッサの解説を紹介しておこう。Tegraプロセッサは,NVIDIAが出荷しているARM系CPUコアを採用したSoC(System-on-a-Chip)だ。日本でも,Tegraプロセッサを採用したAndroidタブレットが販売されている。
 なお,現行製品である「Tegra 2」の次世代SoC「Kal-El」(カルエル,開発コードネーム)は,2011年内に登場する予定。Kal-Elは,搭載されるGPUとCPUがそれぞれTegra 2比で3倍の性能になるほか,他社製のARM系CPUでは多く採用されているNEON命令にも対応し,より使いやすいSoCとなっていくとのことだ。

ミドルウェア/開発ツール ミドルウェア/開発ツール

ミドルウェア/開発ツール
 さて,ここからが本題である。Androidでハイエンドゲームを作るときの手順を順に紹介していこう。

 まず,決めなければならないのは,どのAPIとどのAndroid OSのバージョンをターゲットにするかだ。
 一般的なAndroidのプログラムは,基本的にJavaを使って作られているので,CPUを問わず中間コードベースで実行可能だ。Java自体にはノウハウの蓄積もあり,仕様的に見てもそれなりによいプログラミング言語といえるが,仮想マシン上で動作させる環境となっている点が長所であり短所でもある。つまり,最大の問題は,パフォーマンス的な部分なのだ。基本的には中間コードでの実行なので,最先端のハードが投入されているのに,iPhoneなどと比べてAndroidのゲームにもっさり感があったりするのは,Androidを触ったことがある人ならなんとなく分かるだろう。

ミドルウェア/開発ツール
 これに対して,2009年に発表されたNDK(Native Development Kit)は,PCなどでの一般的なプログラムと同じように,CPUのネイティブコードで動くAndroidプログラムを作れるものだ。プログラミング言語には,CやC++などが使われる。
 ネイティブコードでプログラムを実行すれば,速度的な問題は一気に解決されることになる。ただし,現状のNDKでは,サポートされているのがARMのみとなっているはずなので,これからAndroidで頑張る姿勢を見せているIntelにとってはちょっと残念なことなのかもしれない(別途バイナリを用意すれば解決できそうだが)。
 いずれにしても,今回は「ハイエンドゲーム」をターゲットにしているので,NDKの使用を前提として話が進められている。

 続いて決めるべきは,Android OSのどのバージョン以降をターゲットにするかだ。これについては,現在の市場動向やバージョンによってサポートする機能の違いなどがまとめて紹介された。

 Android 2.1は,NDKで作ったネイティブコードの実行がサポートされた初めてのバージョンである。ただ,ネイティブコードから使用できない機能も多く,SDカード上にプログラムを置くこともできない。
 Andorid 2.2では,描画サーフェスに対し,CPUでの描画ができるようになる。プログラムをSDカードにインストールできるようになったことも大きなメリットといえるだろう。
 Android 2.3では,ネイティブコードでできることが非常に拡大し,ほぼネイティブコードだけでアプリケーションを作ることができるようになった(Native Activity)。これまでは,Javaコードを呼び出さなければならなかったプレイヤーによる各種入力操作も直接取得できるほか,ビデオ再生以外のほとんどのことがJavaを使わずに実行できるようになっている。
 なお,Android 3.0,Android 3.1,Android 3.2でのネイティブコードの扱いは,Android 2.3とほとんど変わらないそうだ。

ミドルウェア/開発ツール ミドルウェア/開発ツール

 現在の市場を見る限り,ほとんどの製品がAndroid 2.2以降を採用しているので,現状では一般的なAndroidアプリならば,Android 2.2以降をターゲットにして作ればほぼ問題ないだろう。しかし,NDKの活用という意味では,Android 2.2とAndroid 2.3で大きな違いがあるため,今後の市場動向を見越してAndroid 2.3以降をターゲットに開発を進めるのもアリといえそうだ。
 サポートするバージョンを増やすことは,市場を広げるという効果があるのだが,制作時に発生する作業量も増えていくので,そのあたりのバランスを取ることも重要になるだろう。

ミドルウェア/開発ツール

ミドルウェア/開発ツール
 続いてプログラムの移植だが,移植作業は以下の3段階に分けられる。

  1. 組み込み
  2. チューニング
  3. 製品化

 それぞれを順番に説明していこう。

●組み込み


ミドルウェア/開発ツール
 まず,組み込み部分では,開発環境を整備し,移植するプログラムで必要になる要素を整えていく。つまり,元のシステムのAPIをAndroid側のAPIに合わせたり,足りない部分を補ったりといった作業が必要となる。

 移植元によっては,レンダリングエンジンを適合させることも重要な要素に成り得る。たとえば,Androidでは「OpenGL ES」が使われているのだが,Android OSのバージョンによってOpenGL ES 1.xをサポートしたものとOpenGL ES 2.0をサポートしたものとの2種類があったりする。もちろん,今後はOpenGL ES 2.0を使うことが望ましい。
 なお,デスクトップ用の「OpenGL」に「OpenGL ES 2.0プロファイル」を適用することで,OpenGL ES 2.0とほぼ同じ機能を備えたものが実現できる。デスクトップPCで十分にデバッグしてから実機へと持っていったほうが,より楽に開発できるはずだ。
 また,この段階で最終的な製品をどのようなものにするのか,しっかりプランニングしておくとやり直しの作業が発生しにくくなるので,できるだけ初期段階で仕様を詰めておくのが望ましい。

ミドルウェア/開発ツール ミドルウェア/開発ツール
ミドルウェア/開発ツール ミドルウェア/開発ツール


●チューニング


ミドルウェア/開発ツール
 続いてはチューニング。Android端末は種類が多いため,そのパフォーマンスなども異なったものになっている。とくにタッチパネルの感度などは,機種によってまちまちとのことなので,できるだけ多くの実機でテストするのが望ましい。

 グラフィックス部分でのパフォーマンス最適化は,NVIDIAが公開している「PerfHUD ES」の活用が推奨されている。これはTegraでしか動作しないが,ハードウェアに依存する代わりに非常に突っ込んだ機能を備えたツールとなっている。
 現在は「Parallel Nsight」に取って代わられているが,PC用の「PerfHUD」というツールが公開されていたので,使ったことがある人もいるかもしれない。このPerfHUDのTegra版がPerfHUD ESというわけだ。

ミドルウェア/開発ツール ミドルウェア/開発ツール
ミドルウェア/開発ツール

 ちなみにCPU部分のパフォーマンス最適化に向けた「Quad Damage」というツールが近日リリース予定だそうだ。CPUコアの使用状況はもちろん,キャッシュの状態なども確認できるツールになるという。こういったものが使えるのと使えないのとでは開発効率にもかなり差が出てきそうだ。

ミドルウェア/開発ツール ミドルウェア/開発ツール


●製品化


ミドルウェア/開発ツール
 製品化の工程では,最低限クラッシュしない状態に仕上げ,単体での動作以外にOS上で問題なく動くように仕上げることが重要となる。OS上でのライフサイクル管理は重要で,さまざまなシステムイベントに対してきちんと対応しておく必要がある。とくにAndroid 3.0以降は,Pause時の挙動が変わっているので注意が必要だ。
 また,端末を縦向きから横向きにされたときにどうするか,電話がかかってきたらどうするかといったことに対しても,一定の処理が必要になる。

ミドルウェア/開発ツール

ミドルウェア/開発ツール ミドルウェア/開発ツール
ミドルウェア/開発ツール ミドルウェア/開発ツール

 移植作業の流れは以上のようになるのだが,ゲーム制作においてグラフィックス周りで重要となる描画パフォーマンスを上げるための,最適化Tipsも紹介された。
 ゲームのパフォーマンスを上げるための注意事項としては,Draw Callをどの順番で行うかに注意することが必要だという。これは,とくにTegraで問題になる項目とのことで,描画効率を上げるにはZcull機能を有効に使うことが重要となるという。
 Zcull機能を有効に使うというのは,Zバッファを使った描画の最適化で,新しく書こうとしているポリゴンより手前にあるポリゴンが,すでに描かれている部分の描画処理をスキップするというものだ。たとえば,手前に大きな物体が見えている場合,その後ろにあるものを全部描画しなくても問題ないので,ここで大幅な負荷削減ができることになる。「手前にあるものから先に描く」場合と「奥にあるものから先に描く」場合とで効率が全然変わってくることは分かるだろう。

ミドルウェア/開発ツール

 また,半透明やαブレンドは,この規模のGPUコアにとってかなり重い処理なのでなるべく避けたほうがいい。Draw Callを減らすことがパフォーマンスアップにつながるというのはよく聞く話だが,スマートフォンやタブレットにおいてもこれは有効な手段である。
 スキニングについては,CPU処理のほうがGPU処理に比べてパフォーマンスが上がることもあるそうで,現にゲームエンジン「Unity」ではCPUによるスキニングを行っているとのこと。

ミドルウェア/開発ツール
 NVIDIA提供のツール群についてはすでにいくつか紹介しているのだが,なにより素晴らしいのは,それらをまとめて「Tegra Android Development Pack」として無料で配布していることだ。これは単にNVIDIA製のツールをまとめたものではない。JDKからEclipse,Cygwin,ADK,NDK,Ant,そしてNVIDIA製ツールと,Android用ゲームの開発に必要な環境一式をまとめてインストールできる。
 ありがたみがピンとこない人もいるかもしれないが,Android SDKのインストールは,ドキュメントに「書かれているとおりに行うと絶対にうまくいかない」仕様になっていたときがあるので,いろんなものをまとめて簡単にインストールできるのは本当にありがたい(以前が変だっただけだが)。
 このTegra Android Development Packは,Tegraという名前が付いてはいるものの,大半はTegra以外でも使用できる開発環境を提供するものであり,NDKでゲーム開発をする人全般を支援するものになっている。プロファイラなど一部のツールについてはTegraでしか動かないものの,これから開発を始めるという人なら,まずこのTegra Android Development Packをインストールするといいだろう。
 とくにネイティブコードに対応したデバッグマネージャNVDMなどは,ネイティブコードを使うつもりがあるのなら,必須の環境といっていいだろう。

 2011年3月に開催された「GDC 2011」のセッションでは,「NDKのデバッグ環境が『printf』だけではなくなりました」というだけで喝采が起きていたように,ネイティブコードの適用範囲と開発環境が凄い勢いで整備されつつある。
 最初にAndroidでネイティブコードを動かすと聞いたときは,単にJNIのようなものかと思っていたのだが,ほぼ完全にネイティブコードで開発できる状況にもなってきている。ことゲームにおいて,この流れは歓迎すべきものといえるだろう。
 今後は,Eclipseだけでなく,Visual StudioでのAndroidプログラム開発が可能になるようで(Visual Studioの統合は“Coming Soon”とのこと),ますます魅力的な開発環境になりそうな気配がある。今後のさらなる開発環境整備にも期待できそうだ。
  • 関連タイトル:

    ミドルウェア/開発ツール

  • この記事のURL:
line
4Gamer.net最新情報
トピックス
スペシャルコンテンツ
注目記事ランキング
集計:08月22日〜08月23日
タイトル評価ランキング
92
82
ARMS (Nintendo Switch)
74
スプラトゥーン2 (Nintendo Switch)
74
鉄拳7 (PS4)
2017年02月〜2017年08月