【Unity】Androidでスプライトのベンチマーク

twitterでいろいろと話題になった第7回テックヒルズでのUnityのスプライトベンチマークですが
Androidでの話があまりないので検証してみたいと思います。

経緯やiPhoneでの検証結果は強火で進めさんが記事にされています

[Unity][Unity3d]クルーズさんの30fpsでスプライトが何枚表示出来るかのベンチマークのUnity版を実際に試してみた
http://d.hatena.ne.jp/nakamura001/20131209/1386621448

検証環境は

  • Unity4.3.1f1フリー版
  • Google Nexus7(2012) Android 4.4
  • SHARP GALAPAGOS 005SH Android 2.3.4

です。
また、端末は検証前に念のため再起動しておきました。
※面倒なので検証内容ごとに再起動までは行っていません

検証1:CROOZさんのコード

CROOZさんが検証に使ったというコードはGitHubに公開されています
https://github.com/crooz-techblog/game_engine_compare

ちなみに、こちらのコードではUnityスプライトを使用しておりますが
テックヒルズ時点ではUnity4.3が公開されていませんでしたので
実際の検証コードは別にあると思います。
おそらく、後日公開されたスライドで使用したコードだと思うのですが、
こちらでもiPhoneでの結果がおかしいのは、前述の強火で進めさんの記事を見るに謎が多いです。

公開されたスライドというのはこちら。

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

それでは、実際にそれぞれの端末で検証してみます。

Google Nexus7(2012) Android 4.4

結果は640でした。

SpriteTest_CroozCode_Nexus7

スライドのGalaxy4Sが500枚ということで、Nexus7との性能差を鑑みるに妥当な結果ということなのでしょうか
とはいえ、iPhoneとの結果が著しく違うのが気になります・・・

SHARP GALAPAGOS 005SH Android 2.3.4

結果は790でした

SpriteTest_CroozCode_005SH

スプライト生成後にFPSが瞬間的に30切ってしまう場合があったので、
警告表示はとりあえず無視して、30切り安定したのが790枚って感じです。
Nexus7よりも枚数が多いのが謎すぎます。

検証2:Unity2D レンダリング負荷(仮)のコード

こちらに動画で公開されている検証コードです

http://www.youtube.com/watch?v=pyQdbKDQknM

GitHubはこちら
https://github.com/anchan828/techhills-unity

今回はちっちゃいスプライト(32×32)での検証のみ行いました。
シーンはSprite – Performance2/Example1/Example.unityになりますので
Build Settingsのシーンをこちらに置き換えてビルドします。

マテリアルは普通にSpriteDefaultで行いました。

ではでは、検証結果をば。

Google Nexus7(2012) Android 4.4

結果は2478くらいです

SpriteTest_UnityCode_Nexus7

さすがにちっちゃいだけあって結構な数が出ますね。
ただ、動画元の内容と比較するとiPhone5の半分しかないというのはちょっと考え物かもしれません。
(Android自体の性能って意味で)

SHARP GALAPAGOS 005SH Android 2.3.4

結果は1743です。

SpriteTest_UnityCode_005SH

こちらはNexus7よりも低い結果となりました。
そこそこ古い端末なのでこれが普通だと思うのですが
逆にやはりCROOZさんのコードではNexus7よりも高かったのが謎すぎます。

まとめ

結論としては、ちっちゃいスプライトをばら撒く系(弾幕STGとか)も普通にAndroidでも作れそうですね。
もちろん描画負荷以外にも衝突判定などもあるので、検証結果の数出せるわけではないですが・・・。
それに、大き目のサイズ(128×85)だとしても、画面(1280×800)を埋め尽くすだけなら100枚くらいで済みますからね。
実際問題、それっぽくゲームとして成り立てばそれでいいのですよ。

また、今回試したのはフリー版なので静的バッチができませんが
プロ版ならマップチップなどをタイルで作ったとしても、Staticにチェックしておけば最適化できると思います。

あと気になる点としては、
動的バッチだとしてもフリー版とプロ版で最適化具合が異なってる可能性とか
AndroidビルドとiPhoneビルドでバッチアルゴリズムが異なってる可能性とか
ボクみたいな単なるUnityユーザーでは見えない部分で何か違いがあるのかも。
なんていろいろと邪推してしまいますが。
まあ、そんなことまで気にしていたらUnity使っていけないので気にしなーい!

NGUIやSpriteStudioってどうなの?

別の疑問として、アセット類を使った場合の負荷も気になりますね。
処理も全然違うでしょうし、また違った結果になりそうです。
いずれこの二つも検証してみたいと思います。

もちろんAndroidでね!
(Macホスィ・・・)

Unityのアセット販売中!

ステートマシンの状態遷移やパラメータはエディタで編集でき、
ゲームロジックに依存するステートの挙動はスクリプトで記述可能なエディタ拡張。

詳細はこちら

RPGツクールVXやWOLF RPGエディターのオートタイルに準拠したエディタ拡張。

詳細はこちら

オススメ!