OMEGA POINT独自の3Dゲームエンジン「OGX」
OMEGA POINTのスマホ向けゲーム開発を効率化するために独自に設計されました
独自設計のゲームエンジン
OGXはOMEGA POINTのゲーム開発を効率化するために独自に設計開発されました。
ゲームエンジンを設計するにあたり、「今後OMEGA POINTでどのようなゲームを開発していくのか?」という問いから始まりました。まず、本格的スマホゲーム参入第一弾として「セレスティアルフリート」の開発が決まっていました。このゲームをより効率的に開発することができることそれがOGXの最初の条件となりました。
セレスティアルフリートでは広大な宇宙空間にたくさんの数の宇宙戦艦モデルやビーム、爆発エフェクトなどが出現します。これらを効率的に行えるように設計に取り組みました。レンダリングにおいて宇宙戦艦一つ一つを同じモデル、同じテクスチャを共有するパーツごとに描画するようにしました。これによりフレームレートは劇的に向上しました。
また、宇宙戦艦モデルをシンプルな処理でそのディティールを美しく引き立てるようシェーダーにもさまざまな工夫を凝らしました。それらしく見えるをコンセプトに一部では物理法則を無視したライティングも行っています。
このようにOGXは「OMEGA POINTでどのようなゲームを今後作りたいか?」を念頭に置いたゲームエンジンとなっています。
Android、iOS両対応マルチプラットフォーム開発 (Xcode and AndroidStudio)
OGXはもちろんiOSにもAndroidにも対応しています。プラットフォーム固有の処理はゲームロジックと完全に分離しています。プラットフォーム固有の処理はJavaやObjective-Cなどで書かれていますが、ゲームロジックはC++で書かれています。ゲームロジックは両プラットフォームで99.9%以上互換性があります。(セレスティアルフリートではゲームロジック部分においてプラットフォーム独自の処理は300行にも満ちません。)
Mac上でXcodeとAndroid Studioを同時に立ち上げ同一のC++ソースコードを編集しながらゲームの開発を行うことが可能です。
(現時点ではiOSのほうが最適化が進んでいるため、パフォーマンス的に優れています。iPhone6であればセレスティアルフリートにおいてレンダリング時間は10ミリ秒程度となっています。)
課金処理、Twitter等のSNSへの投稿、スクリーンショットの取得と保存、インターネットへのアクセス、IO処理、ダイアログ等の表示などAPI固有の処理はPlatform APIとしてC++で書かれたインターフェースで統一されており、iOSでもAndroid版でもゲームアプリ側からは同じように処理することができます。(C++コードを介してAndroid版ではJni経由でJavaが実行され、iOSではObjecive-Cが実行されています。)
3DモデルにはPowerVR Insider SDKを使用
OGXでは3Dモデルのコンバートおよび描画にはPowerVR Insider SDKを使用しています。
PowerVR SDKはすべてソースコードが提供されており独自に改良・チューニングを施すことが可能です。
OGXではセレスティアルフリートの開発で大量の同一の宇宙戦艦モデルを効率よく描画を行うため独自にチューニングを施しました。
また、OGXでは3Dモデル作成にはメインにMODO 801を使用しています。一部LightWave3D 2015なども使用しています。
レンダリング用のGLSLはすべて独自に開発を行いました。
PowerVR Insider SDKの入手
3Dモデルデータの作成とコンバート
OGXでは3Dモデルデータ作成はMODOおよびLightWave3Dが使用されています。
個人ユースや小規模開発では上記のツールが最もコスト的にバランスが取れているものと判断し採用しました。
MODO,LightWave3DよりColladaフォーマットで出力した後、Shellスクリプトを用いてPowerVR SDK付属のPVRGeoPodにてPODフォーマットに変換を行っています。
サウンドテクノロジー・音響効果
OGXではサウンドテクノロジーにiOS版ではOpneALを使用しています。3D空間定位やドップラー効果など迫力の音響効果をゲーム映像に融合させることができます。
Android版ではOpenSLを使用しています。OpenSLは3D空間の定位やドップラー効果などの効果は表現できませんが、高速な音声再生やリバーブ等の環境エフェクトを適用することが可能です。
レベルデザインにはLuaスクリプトを使用
OGXではゲームのステージ構成や敵の強さ、配置といったレベルデザインにはLuaスクリプトを使用しています。
Luaで各ステージの構成を記述していきます。
プラットフォーム固有処理とゲームロジックの分離
ゲーム固有のロジックはC++で開発を行っています。
課金処理、ファイル入出力などプラットフォーム固有の処理はAndroidであればJavaで、iOSであればObjective-Cで構築されています。
基本的にそれらの処理はOGXでプラットフォームAPIとして隠蔽されゲームアプリ自体からは意識することなく処理を行えるように作成されています。
インターネット経由によるデータ更新のサポート
OGXではインターネット経由でのゲームデータ更新をサポートします。
ゲーム実行中にLuaスクリプトを更新して、新しいレベルの追加、ゲームロジックの更新などが可能です。
さらに画像データ、サウンドデータ、シェーダーなどもインターネット経由でアップデートすることが可能です。
インターネット経由による対話的ユーザーサポート機能
OGXでは課金処理が正常に行われなかったりした場合など、インターネット経由で対話的に問題を解決するプロセスが実装されています。
これにより一切専用サーバーでゲームデータを保持していないアプリであっても「課金が処理されなかった」などユーザー様の環境で発生している問題を対処、解決することが可能です。
レンダリングパフォーマンス
OGXを使用したセレスティアルフリートにおける各端末の1フレームあたりの平均レンダリング時間は以下のようになっています。
端末 |
1フレームレンダリング時間(ミリ秒) |
iPhone6
Sony SOV32 Sony SOL26 Sony SO-05F Sony SO-04G
Sony SO-03G Sony SO-02G Sony SO-02E SHARP SHL25
SHARP SHL25 SHARP SH-01F samsung SM-T561
samsung SM-T210 samsung SM-J700F samsung SM-G903F
motorola XT1060 motorola Nexus 6 Lenovo Tab2A7-10F
KYOCERA KYY24 kyocera C6730 KYOCERA 404KC
HUAWEI PE-TL10 HUAWEI HUAWEI Y221-U03 HTC HTX21
HTC HTL22 HTC Desire 600 dual sim igabyte
RCT6203W46 FUJITSU F-05F FUJITSU F-02G asus
ASUS_Z00AD |
10 20
35 47 29 36 44 79 62 39 22 37
98 25 34 33 36 26 35 50 37 30
47 32 26 50 27 49 33 33 |
※Google Analyticsによる集計
※Android版は十分なチューニングが行われていないためiOS版よりもフレームレートが低くなっています。今後、徐々に改善される予定です。