【CEDEC 2014】ヘキサドライブ流 OPTPiX SpriteStudio の最適化術・・・「OPTPiX を256倍使うための頁」第10回 | GameBusiness.jp

【CEDEC 2014】ヘキサドライブ流 OPTPiX SpriteStudio の最適化術・・・「OPTPiX を256倍使うための頁」第10回

その他 その他

ゲーム業界にはさまざまな開発環境が存在します。最近でこそ商用ゲームエンジンが普及していますが、いまだに社内の内製エンジンを使用する企業プロジェクトも少なくありません。そのため汎用スプライトアニメーション作成ツール「OPTPiX SpriteStudio」では、作成した
  • ゲーム業界にはさまざまな開発環境が存在します。最近でこそ商用ゲームエンジンが普及していますが、いまだに社内の内製エンジンを使用する企業プロジェクトも少なくありません。そのため汎用スプライトアニメーション作成ツール「OPTPiX SpriteStudio」では、作成した
  • ゲーム業界にはさまざまな開発環境が存在します。最近でこそ商用ゲームエンジンが普及していますが、いまだに社内の内製エンジンを使用する企業プロジェクトも少なくありません。そのため汎用スプライトアニメーション作成ツール「OPTPiX SpriteStudio」では、作成した
  • ゲーム業界にはさまざまな開発環境が存在します。最近でこそ商用ゲームエンジンが普及していますが、いまだに社内の内製エンジンを使用する企業プロジェクトも少なくありません。そのため汎用スプライトアニメーション作成ツール「OPTPiX SpriteStudio」では、作成した
ゲーム業界にはさまざまな開発環境が存在します。最近でこそ商用ゲームエンジンが普及していますが、いまだに社内の内製エンジンを使用する企業プロジェクトも少なくありません。そのため汎用スプライトアニメーション作成ツール「OPTPiX SpriteStudio」では、作成したスプライトアニメーションデータを表示・制御するためのPlayer Library「SSPlayer」がオープンソースで公開されています。



またUnityとCocos2d-x向けには、それぞれ「SSPlayer for Unity」「SSPlayer for Cocos2d-x」など、各々のゲームエンジン向けバージョンが用意されており、自社のゲーム開発環境にあわせて最適化が可能です。特にゲームエンジン自体がオープンソースで提供されているCocos2d-xでは、タイトルにあわせてゲームエンジン側に手を入れられているケースが多いため、嬉しい仕様でしょう。

しかし、実際にどこまでSSPlayerに手を入れる必要があるのかは、タイトルごとにまちまちです。そのため、詳細が明かされる機会は極めて限定されていました。こうした中、CEDEC2014で実施されたスポンサーセッション「ヘキサドライブ流 OPTPiX SpriteStudio の最適化術!」は、きわめて貴重な機会となりました。

なお講演のスライドは、ウェブテクノロジのブログ(http://www.webtech.co.jp/blog/event/7173/#slide)で公開していますので、そちらも合わせてご覧ください。

■ソースを覗いてみてわかった、SSPlayerの「伸びしろ」

講演をつとめたのはヘキサドライブの開発部でマネージャーをつとめる奥田仁一郎氏です。奥田氏は同社が開発にかかわった『拡散性ミリオンアーサー』(スクウェア・エニックス)と、自社配信に向けて開発中の『ダイコン王の野望ッッッン!!』という二つのスマホ向けゲームで、SSPlayerの最適化事例を紹介。またセッション後半ではウェブテクノロジの浅井維新氏から、「OPTPiX SpriteStudio」の最新情報も共有されました。



もともと「拡散性ミリオンアーサー」はある開発会社によって開発・運営業務が行われていましたが、諸事情によって現在の運営会社が業務を引き継ぐことになりました。ところが、クライアント部分がOpenGL ES 1.xを活用した独自フレームワークで実装されていたのです。そのためツールやプログラムがブラックボックス化し、運営会社が望む追加要素の実装が困難でした。抜本的な変更が不可欠だったにもかかわらず、運営に手をとられて運営会社の社内では対応が難しい事態に。そこでヘキサドライブがサポートすることになったのです。

ミッションは明快でした。サーバはほぼそのままに、クライアントアプリだけを「ベタ移植」するのです。更新のしやすさを考慮して、ゲームエンジンにはCocos2d-x、UI部分にCocosBuilder、アニメーション・エフェクトにSpriteStudioが採用されました。CocosBuilderとSpriteStudioの併用については不安もありましたが、Spriteクラスを共有できるため、サンプルを動かすだけなら簡単だったといいます。

ただし、実際に開発をはじめると、そう簡単にはいきませんでした。SpriteStudioとCocosBuilderで異なるレイヤーを指定し、重ね合わせる処理が、Cocos2d-xでうまく管理できなかったのです。いろいろ試したものの、うまくいかず、最終的にプログラマがCocos2d-xに手を加えて、ハードコーディングで解決しました。「あまり美しい解決方法ではありませんが、プログラマが力業で対応しました」(奥田氏)

またデータをコンバート後、ループなどの情報が欠落したり、ダメージの数字やスキル名など、文字列への対応がないなどの問題も生じました。そこでユーザーデータで対応することに(SpriteStudioではアニメーションを表示するためのデータ以外にも、「数値」「矩形」「座標」「文字列」の情報をファイルに埋め込むことができ、制御用データとして利用できます。これらを「ユーザーデータ」と呼んでいます)。いずれも、そこまで致命的な障害ではありませんでした。

むしろ問題になったのは、「SSPlayer for Cocos2d-x」の実行速度の遅さです。その遅さは致命的で、まったくゲームにならないほど。そこでコードを検証してみると、フレームごとにスプライトのデータ生成を繰り返していることがわかりました。さっそく事前にまとめて生成するように改良し、軽量化に成功しました。

しかし、PCのエミュレータ上ではサクサク動作しても、実機上では一気に動作が重くなる現象は変わりませんでした。奥田氏は「最初は描画面積ではないか?」と疑ったとのこと。近年のスマホでは描画解像度と端末スペックのバランスが悪く、描画面積がネックになることが多いからです。

しかしオリジナル版では同じ端末で問題なく動作しており、腑に落ちません。そこでさらなる解析を進めたところ、意外なボトルネックがみつかりました。SSPlayerのピクセル(フラグメント)シェーダーで分岐処理が行われていたのです。ポリゴンとテクスチャの組み合わせで「ミックス」「乗算」「加算」「減算」の4種類が選択でき、毎回データ構造を読み取って分岐処理がなされていたことが、動作が重くなる原因でした。


そこで奥田氏は「アルファブレンドと加算ブレンドしか使用しない」「カラーブレンドは乗算のみ」というように、処理を限定したと説明しました。前述のようにオリジナル版の描画部分はOpenGL ES 1.xベースでプログラミングされており、複雑なブレンド処理をしていませんでした。なまじSSPlayerが高性能だったために、処理の低下を招いていたのです。

もっともタイトルによっては、フルでこの機能を使用している場合もあります。奥田氏は「最適化を進めるなら、データ構造をみなおすべき」だと補足しました。仮にデータ構造の見直しが難しくても、CPUで事前計算することもできます。ピクセルシェーダーではなく、バーテックスシェーダーで処理するという逃げ道もあります。タイトルにあわせて最適化を進めて欲しいと語りました。

■自社タイトルに必要ない機能はどんどん削除する

さて、「拡散性ミリオンアーサー」はこうした改良で事なきを得ましたが、さらなる最適化が必要なタイトルが存在しました。それが同社が開発中のオリジナルタイトル「ダイコン王の野望ッッッン!!」です。各々が10〜45のパーツで構成されており、多彩なアニメーションを行うキャラクターが多数登場する、2Dタワーオフェンスゲームです。仕様を聞くだけで、描画負荷が高そうなゲームだといえるでしょう。

実際にSSPlayerでの描画も非常に辛いものがありました。例によってソースを解析したところ、なぜかランタイム内でNew(初期化)命令が繰り返されていることがわかったといいます。「最低限必要なものを除いて、Newを撤廃しました」(奥田氏)。アニメーションの初回フレームの処理負荷が高いという問題も、よくよく調べるとアニメーションの処理が2回呼ばれていたことがわかり、すぐに修正したそうです。

アニメーション更新処理の重さについても「とにかく呼び出し関数が多かったので、各パラメータの参照を整理してオーバーヘッドを軽減したり、パラメータのキャッシュ化やロジックの最適化に務めました」とのこと。同じくアニメーションの参照処理負荷が高い問題も「総当たりで文字列の比較を行っていることがわかったので、初期化時にインデックス化すると劇的に早くなりました」。他にコリジョン判定処理やサブアニメーション機能など、使用しない機能はどんどんカットしていったといいます。

このように奥田氏は「SSPlayerは自分たちのゲーム用途に対して最適化されているわけではありません。どんどんソースコードに手を入れていきましょう」とコメント。その上で「エディターで出力したファイルを自動でプレハブ化する機能」や「ドローコール対策のため、自動でテクスチャをアトラス化できる機能が欲しい」と要望を出しました。ちなみに同社では、前者の機能は自分たちで構築したそうです。

またアーティストが作業をするうえで、仕様をなかなか守ってくれないので、「プロジェクトごとにデフォルトの設定を維持したり、機能のマスクを定義して配布できる仕組みが欲しい」と感じたそうです。もっとも、後になってからこの機能がすでにあることに気づいたとのこと。次回からはぜひプロジェクトで活用したいと話されました。

ちなみにSSPlayerがGitHubで公開されているのは、各社それぞれでカスタマイズしたプレイヤーをどんどん公開し、業界で共有を進めたいから・・・。ウェブテクノロジの浅井氏から、そのように補足がありました。

奥田氏の講演終了後、浅井氏は「ヘキサドライブさんでも、ぜひ今回のバージョンを公開して欲しいですね」と話をもちかけました。すると奥田氏は「自社のプロジェクトに最適化しすぎてしまって、はたして他社で流用できるか怪しいところがあります。でも、なんとか公開できるように進めたいですね」と前向きな姿勢が示されました。

■ゲームエンジンや開発環境にますます対応

最後に浅井氏から恒例のSpriteStudioの最新情報が共有されました。2014年1月にVer5.2が公開され、アニメーションのリサイズ機能が追加。5月にVer5.3が公開され、インスタンス機能やラベル機能が追加されたSpriteStudio。今年後半に予定されているVer5.4では、いよいよ動画出力機能が加わります。作成したアニメーションデータを無圧縮avi形式に出力するもので、社内外でのデータ確認やプロモーション素材の作成などに使えます。CRI・ソフトウェアのムービー向けミドルウェア「CRI Sofdec2」にも対応します。



他に2Dパーティクルの作成機能も実装される予定です。これにより「キャラクターが剣を振ると、剣から炎のエフェクトが発生する」などの凝ったアニメーションを、同じUI上で作成できます。Cocos2d-xや、Unityのパーティクル「Shuriken」との互換も視野に入れているといいます。

続いてSS5 SDKの情報もアップデートされました。SpriteStudioをさまざまな環境で使用できるようにするためのツール&ライブラリ群で、5種類のゲームエンジン&開発環境に順次対応していく予定です。

はじめにOpenGLを利用した描画モジュールの「Drawer」では、新たにDirectX向けにも対応することが明らかになりました。浅井氏は「GitHubをフォローしてくれていた同人・インディゲーム開発者から、DirectX対応のPullRequestが来た。CEDECが終わったところで早めにPullしていきたい」と語ります。

続いて「SS5Player」シリーズでは、新たにParadoxEngineへの対応が発表されました。シリコンスタジオが自社開発したゲームエンジンで、モバイルなどに加えてPS4などのコンソール機にも対応しており、オープンソースで配布されます。シリコンスタジオ自身による「SS5Player for ParadoxEngine」の開発が進行中だとされました。

またCocos2d-xでは、当初「SS5Player for Cocos2d-x」をv3.x専用としていましたが、あらたにv2.x系と両対応になるとのこと。UnrealEngine4向けの「SS5Player for UnrealEngine4」の開発も順調に進行中で、ファイルをインポートすると、アセット形式を自動で変換してくれる機能が加わるそうです。

Unityの対応も強化されます。Unity2D向けコンバーター「SS5Converter for Unity2d」です。SpriteStudioから出力される「.sspj」ファイルを、Unity2Dの形式に変換するUnityスクリプトで、これも SDK由来 とのこと。GitHubで公開が予定されています。

最後にDSP Anime用のプラグイン「DSP Anime for SpriteStudio」も紹介されました。DSP(Dynamic Sound Packs)はtsugiが展開するSE作成ツールで、「DSP Anime」はそのアニメ版。GUIベースのシンプルなUIで、アニメ風ゲームに必要な効果音をプロシージャルに作成できます。「DSP Anime for SpriteStudio」を使用すると、SpriteStudioの出力データから効果音を自動生成できるのです。これで、さらなる表現の幅が広がりそうです。

もっとも、こうしたツールやライブラリ群も、すべての環境で対応できるわけではありません。前述のように昨今のゲームエンジンはオープンソースで提供される例が多く、プロジェクトごとにカスタマイズされることが前提となっているからです。そのため、今回のヘキサドライブの事例やGitHubを活用して、ぜひSSPlayerやツール群を使いやすく改良していって欲しい。浅井氏はそのようにまとめました。

ヘキサドライブ ホームページ
OPTPiX SpriteStudio 製品ページ
SpriteStudio GitHub
《GameBusiness.jp》

関連ニュース

特集

人気ニュースランキングや特集をお届け…メルマガ会員はこちら