11
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Xperia X PerformanceがZ5 Compactより遅い件(一応解決)

Last updated at Posted at 2016-11-17

#より美しく、より使いやすく…でも遅い?

Xperia X Performanceは2016年6月、Z5 Compactは2015年11月発売の機種で、スペック的にもX Performanceのほうが良いはずなんですが、同じUnityアプリを実行すると、なぜかZ5 Compactのほうが安定して60fpsが出て、X Performanceは30fps前後。これはおかしい。

最初は画面解像度の違いで、X Performanceは1920x1080、Z5 Compactは1280x720だから後者の方がフィルレート的に有利なのかなーとも思ったんですが、Screen.SetResolutionで1280x720にしてもフレームレートの改善がほとんど見られませんでした。OSはともにAndroid 6.0。

#Profiling

ということで、Profilerで見てみました。

Xperia Z5 Compact
xperia_z5.png

Xperia X Performance
xperia_xp.png

CPUの"Others"がZ5では2ms程度、Xではなんと10ms。そりゃ16msに収まらないわけです。"Others"の中身は"Unaccounted"と"Overhead"。つまり、"不明"です。"Overhead"は同程度なので、明らかに"Unaccounted"に何かあります。

#調査編

日本語での情報はほとんどなく、英語だと関係ありそうな情報があるにはあるものの、Unityのバージョン5.4と特定の機種(解像度が高いものに多い?)の組み合わせっぽいというところまでは分かったんですが、このスレッドも解決には至っていませんでした。

Profiler constant 'unaccounted' entry takes 50% (13ms) on a SINGLE android device
http://answers.unity3d.com/questions/1235376/profiler-constant-unaccounted-entry-takes-50-13ms.html
BIG Performance Issue with Unity5 on Android !!!
https://forum.unity3d.com/threads/big-performance-issue-with-unity5-on-android.338847/

#解決編

…が、見つけましたー!!

Unity 5.3にアップデート後、Android端末での処理落ち
http://contoracutar.blog.fc2.com/blog-entry-37.html

簡単に言うと、"Player Settings->Other Settings"の"Auto Graphics API"のチェックを外して、"OpenGLES2"->"OpenGLES3"の順番に入れ替える、つまりOpenGL ES 3.0を使うのをやめると直るのでした。
OpenGLES.png

Profilerもこんな感じ。美しい!!
xperia_xp_2.png

#最後に

特定の機種でしか発生しないようなので、気付いていない開発者の方も多いと思います。OpenGL ES 3.0専用の機能を使っていないのであれば、OpenGL ES 2.0にすると、今まで以上にいろんなユーザーに喜ばれるかもしれません。

…ただ、実際の原因が分からないんですよねー。OpenGL ES 3.0を使うようにしたら直ったので、OpenGL ES 3.0のUnity側の実装がまずいのか、Xperia X Performance側の実装がまずいのか、そういうものなのか。試しにUnity5.5ベータでもビルドしてみましたが、結果は同じでした。うーむ。

#追記(2016/11/18)

気になって、修正前のUnityアプリに拙作のこれ( http://qiita.com/MARQUE/items/fd08fe57cbe4e0b53aa8 )を実装して各機種の描画APIを見てみたんですが、XもZ5も”OpenGLES3"と表示されました。予想していたのは「Z5だけOpenGL ES 2.0が適用される」だったんですが、違った…。Adrenoのドライバーの問題なのか、Unityが機種による実装レベルの違いを抽象化できていないのか、はたまた、1920x1080という画面解像度に最適化されていないという問題なのか…。

#追記2(2016/11/21)

Xperia X Performanceと同じSnapdragon820を搭載するGalaxy S7 edgeと、Exynos7420を搭載するGalaxy S6をチェック。どちらもOpenGLES3のままでも謎なCPU負荷は発生しませんでした。それどころか、2560x1440という高解像度ながらUnityChan程度なら60fps出るレベル。さらに謎。

11
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?