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
です。
また、端末は検証前に念のため再起動しておきました。
※面倒なので検証内容ごとに再起動までは行っていません
Contents
検証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でした。
スライドのGalaxy4Sが500枚ということで、Nexus7との性能差を鑑みるに妥当な結果ということなのでしょうか
とはいえ、iPhoneとの結果が著しく違うのが気になります・・・
SHARP GALAPAGOS 005SH Android 2.3.4
結果は790でした
スプライト生成後に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くらいです
さすがにちっちゃいだけあって結構な数が出ますね。
ただ、動画元の内容と比較するとiPhone5の半分しかないというのはちょっと考え物かもしれません。
(Android自体の性能って意味で)
SHARP GALAPAGOS 005SH Android 2.3.4
結果は1743です。
こちらはNexus7よりも低い結果となりました。
そこそこ古い端末なのでこれが普通だと思うのですが
逆にやはりCROOZさんのコードではNexus7よりも高かったのが謎すぎます。
まとめ
結論としては、ちっちゃいスプライトをばら撒く系(弾幕STGとか)も普通にAndroidでも作れそうですね。
もちろん描画負荷以外にも衝突判定などもあるので、検証結果の数出せるわけではないですが・・・。
それに、大き目のサイズ(128×85)だとしても、画面(1280×800)を埋め尽くすだけなら100枚くらいで済みますからね。
実際問題、それっぽくゲームとして成り立てばそれでいいのですよ。
また、今回試したのはフリー版なので静的バッチができませんが
プロ版ならマップチップなどをタイルで作ったとしても、Staticにチェックしておけば最適化できると思います。
あと気になる点としては、
動的バッチだとしてもフリー版とプロ版で最適化具合が異なってる可能性とか
AndroidビルドとiPhoneビルドでバッチアルゴリズムが異なってる可能性とか
ボクみたいな単なるUnityユーザーでは見えない部分で何か違いがあるのかも。
なんていろいろと邪推してしまいますが。
まあ、そんなことまで気にしていたらUnity使っていけないので気にしなーい!
NGUIやSpriteStudioってどうなの?
別の疑問として、アセット類を使った場合の負荷も気になりますね。
処理も全然違うでしょうし、また違った結果になりそうです。
いずれこの二つも検証してみたいと思います。
もちろんAndroidでね!
(Macホスィ・・・)
Unityのアセット販売中!
ステートマシンの状態遷移やパラメータはエディタで編集でき、
ゲームロジックに依存するステートの挙動はスクリプトで記述可能なエディタ拡張。
RPGツクールVXやWOLF RPGエディターのオートタイルに準拠したエディタ拡張。