強火で進め

このブログではプログラム関連の記事を中心に書いてます。

クルーズさんの30fpsでスプライトが何枚表示出来るかのベンチマークのUnity版を実際に試してみた

(2012/05/07 追記)
何故か公開されていたスライドとソースコードが削除されたみたいです。
ソースコードは自分がフォークしたものがこちらに有りますのでそちらを参照下さい。
(追記ここまで)

始まり

第7回テックヒルズ「Game Engines!!どのゲームエンジンを選ぶ?」というイベントが開催。後日、記事が掲載される。

こちらの記事は11月18日公開。

セミナーリポート】あなたの最適な開発環境はUnity?それとも…第7回テックヒルズ「Game Engines!!どのゲームエンジンを選ぶ?」開催! | Social Game Info
http://gamebiz.jp/?p=124209

こちらの記事は11月25日公開。

【インタビュー】第7回テックヒルズ後日談…クルーズ浦田氏に聞くゲームエンジンの未来、話題のエンジン比較の真相とは?(検証コードなど追記) | Social Game Info
http://gamebiz.jp/?p=124414

どちらが公開された時もUnityを使っている人の間ではUnityの2Dのスコアが極端に低い事に疑問の声が上がっていました。

後日、スライドが公開

こちらのスライドは12月2日公開。

第7回テックヒルズ『Game Engines!!〜どのゲームエンジンを選ぶ?〜』資料
http://www.slideshare.net/crooz_techblog/7-131112144201phpapp01

こちらのスライドは12月5日公開。

Unity2 d vs cocos2d x ゲームエンジン比較(外部公開用)
http://www.slideshare.net/mobile/crooz_techblog/unity2-d-vs-cocos2d-x

相変わらず、Unityが圧倒的にスコアが悪いという結果のまま。

検証してみる

11月27日に第7回テックヒルズのスライドの情報の元に成ったプログラムがGitHubに公開されていた様です。今回はこのソースコード(※)を使って検証してみる事にします。
※ボタンの描画部分がコメントアウトされていたのでそこのコメントアウトを外すという作業はしています。

検証環境はこちら

第7回テックヒルズのスライドではスプライトのサイズはどのサイズのものを使っているかは明記されていませんでしたがUnityで約94枚と記載されているため、それと該当するものを「Unity2 d vs cocos2d x ゲームエンジン比較(外部公開用)」のスライドの中から探してみたのですが今回のベンチマークのプログラムの実装と同じ静止画の場合の結果に該当するデータは見つかりませんでした。

その為、取り敢えずデフォルトで設定して有る128x85(「Unity2 d vs cocos2d x ゲームエンジン比較(外部公開用)」のスライドでは128x128と記載されて有りましたが実際に表示されるサイズは128x85でした)のサイズのものを使って検証しました。スライドによるとiPhone 4Sでは330枚表示出来たみたいです。

fpsが30を切ったタイミングで表示される「FPS fell below〜」のメッセージが表示されるタイミングを3回計測した結果はこちら。

  • 2136枚
  • 2133枚
  • 2138枚

うーむ、330枚って事だったのに随分実際の計測結果と違いが出ました。

オフスクリーンレンダリングしてるものにFPSの値を持ち出すのも変な話なのでそこのデータは除外すると128x128の時のcocos2d-xのスコアは950枚なのでUnityはそれより遥かに多くのスプライトが描画出来てる事に成ります。

なお、GUI表示が負荷に成っているかと思いGUIを非表示にする処理を入れてみましたがこちらはほとんど影響は無かったです。現在のバージョンでは昔に比べると随分と負荷が低くなっている様でした。

続いて sprite512 (画像のサイズは512x341)のスプライトの場合にはどうなるか3回計測してみました。結果はこちら

  • 596枚
  • 594枚
  • 599枚

第7回テックヒルズのスライドを作る時に使ったベンチマークのプログラムにも関わらず、そのプログラムに付属している最大サイズのスプライトを使用した場合にもスライドに記載されていた約94枚という結果からは大きく異なる結果となりました。

皆さんもテストしてみて

皆さんも実際にビルドしてみてiPhoneで動作させてみるとどれくらいのスコアに成ったかコメント欄にて結果を教えて頂けると嬉しいです。

なお、いずれのテストでもスプライトの生成時に一時的に負荷が上がるのを考慮し、ボタンは連打では無く、多少間隔を空けて押しました。まぁ、実際にゲームを作成する場合にこの負荷を気にする様な場合には事前に生成しておいて画面外に置いていたり、非表示にしておくという実装にするでしょうからこの部分の負荷はかけないように検証しました。

他の方の検証結果

自分もこの結果をみると同じ感想です。


こちらの動画は今回のソースコードを使った検証では無いですがUnityで実際にどれくらいのスプライトが表示可能かの参考に成ります。結論としてはUnityは2Dでも必要十分な性能が出ていると思います。


上の動画で使用されたプログラムのソースコード

anchan828/techhills-unity
https://github.com/anchan828/techhills-unity