• 株式会社ディー・エヌ・エー
  • Japanリージョンゲーム事業本部 技術・編成部 開発基盤グループ
  • 恵良 和隆

Cocos2d-xのカスタマイズで実現 「ユーザーの新体験を創る」ゲーム開発エンジン

今回のソリューション:【Cocos2d-x】

スマートフォンの普及に伴い激化するネイティブアプリ市場。その業界をリードする株式会社ディー・エヌ・エーでは、OSSのゲームエンジン「Cocos2d-x」をカスタマイズしたフレームワーク「Lift Engine」を開発し、自社のゲーム開発に活用している。

OSSの独自カスタマイズという、大多数のエンジニアは一歩引いてしまうようなプロジェクト。その大役を1人で担う、同社開発基盤グループのグループマネージャー恵良 和隆さんにお話を聞いた。

優秀なクリエイターが自由にゲームを作れる環境を

私がゲームの業界に足を踏み入れたのはちょうどPlayStation 2やNINTENDO GAMECUBEが出た頃ですね。新卒で入社した会社がコンシューマーゲームを作っていて、そこからずっとゲームプログラミングの世界にいます。その頃からコンシューマーゲームの世界も技術競争がシビアになってきていて、このままでは生き残れないなと。そこで競争力をつけるために作り方そのものを見直すような、開発環境の再構築プロジェクトを実行しました。

実は、ゲームそのものを作りたかったというわけではないんですよね(笑)。それよりもクリエイターを支援したいという気持ちの方が強くて。優秀なクリエイターが無駄な苦労をせずに良い物を作り、そこで生まれたプロダクトが新しいユーザ体験を与える。そのための地盤を作っていきたいなと思っています。

より高度な表現を目指してLift Engineを開発

DeNAに入社したタイミングではちょうどブラウザゲームからネイティブゲームへの移行時期で、ノウハウが溜まっていない中でゲーム開発に取り組んでいました。ただモバイルゲームの世界でもやはり競争力を付けていかないと生き残れなくなってきていると。そこで勝ち抜くための基盤技術を作り上げるため、各ゲーム開発チームにライブラリを提供するチームが立ち上がり、昨年の秋にグループリーダーになりました。

全社に共通のアーキテクチャというか、開発プラットフォームを提供していくチームです。現在、研修目的のメンバーなども含めると40名ほどが所属しています。

私が最初に、Cocos2d-xをベースに開発したのがLift Engineです。DeNAでは元々Kickmotorというフレームワークを使って開発していましたが、Kickmotorはブラウザベースなのでそれなりの制限もありました。Lift Engineでは、よりネイティブに最適化することで、より高い表現力を実現し、ユーザーの方に新しい体験を提供することを目指しています。

OSSをカスタマイズするのは結構大変なので、1人で開発をしてひと通りの機能が出来るまでに3、4ヶ月かかりましたね。Lift Engineを使ったもので既にリリースしたゲームは1本ありますが、フレームワークとしてはまだ開発も継続中です。日々新しい機能を追加しています。

OSSだから実現できるパフォーマンスチューニング

KickmotorとLift Engine、どちらもCocos2d-xというOSSフレームワークをベースに開発しています。ゲームエンジンをゼロから作るのは大変ですからね。ネイティブアプリのゲームエンジンと言えばUnityが有名ですが、Unityは統合開発環境としては良くできているのですが、すごく凝ったゲームを作るときにどうしても痒いところに手が届かない部分が出てきてしまうんです。特殊な表現をしようとするとパフォーマンスを引き出しにくいとか。ある程度は拡張して対応するのですが、手が出せない部分も多くあります。

Cocos2d-xも不得意なところはあるにはあるのですが、OSSですのでカスタマイズの自由度が高い。不満なところがあればチューニングしてしまえばいいと。エンジンをカスタマイズする前提で考えるとCocos2d-xの方がやりやすい部分が多いと思いますね。

汎用的なゲーム開発エンジンを自社開発に最適化

Lift Engineの開発でまず始めたのはパフォーマンスチューニングです。リソースの限られたコンソールゲーム出身者から見ると、Cocos2d-xには無駄な処理がかなりあるのが気になっていました。それをひたすらチューニングして、パフォーマンスを最適化させていきました。

例えば、Cocos2d-xはレンダリングにOpenGL ESを使用しているのですが、その特性に合わせて実装を大きく変更しました。パフォーマンスだけではなく、ロギングやデバッグ機能などの開発を効率化するための機能も追加しています。

今後はもっと、今以上に開発がしやすいようなものを提供したいですね。ゲームエンジンは汎用的になればなるほど効率が悪くなっていくんですよ。例えばLuaのスクリプトでCocos2d-xのほとんどの機能にアクセスできるような機能があるのですが、そんなもの望んでない(笑)。コンパイルが不要だったりメリットはあるんですが、本格的なゲームを作る場合にはやはりネイティブでの実装が重要なので、スクリプトの利用範囲としては適していないと思っています。このような機能は削除して自分たちの作り方に特化させています。

3.x系のリリースでパフォーマンスが改善

現在のLift EngineはCocos2d-xは2.x系を使用しているのですが、今は3.x系が安定版になっていますね。実は2.x系のコードは端から順に突っ込みどころが満載で(笑)おそらくゲーム開発に詳しくない人が書いたんだろうなというコードがいくつか見られますね。これが3.x系になるとゲーム開発に明るい人がジョインしたのか、かなり改善しているようです。

私達がカスタムで入れていたようなコードが組み込まれていてパフォーマンスが良くなっているので、これから新しくCocos2d-xを使うのであれば、3.x系を使うのが基本ですね。OSSをカスタマイズするのは今回のようにメジャーアップデートに対応し辛いというデメリットはありますよね。

アップデートは待たない 現場の必要性に応じて次々カスタマイズ

Lift Engineを3.x系に置き換えるのはコストがかかるので、Lift Engineに関しては必要とされる機能やバグフィックスだけを取り込む形で進めています。ただ、実装されるのを待ってはいられない場合も多いので、ベースになるものは使いながらも必要な物は自分で作ってしまおうというのが私の考え方ですね。現場に新しい必要性があればどんどん直していくし、開発者が幸せにゲーム開発できて、それがユーザーのより良い体験に繋がっていくのが一番です。

;