2016-08-20 2 views
1

Ich habe auf meine GearVR App Performance-Probleme (bezogen auf Unity entwickelt 5.4), so habe ich beschlossen, ein kleines Experiment zu tun, und die möglichst einfache Szene einrichten Leistung zu studieren:Leistungsproblem auf GearVR/Unity

  • Eine statische Ebene
  • Eine statische Würfel
  • Beide mit dem gleichen Material mobile unbeleuchteten Shader mit 8X8 unicolor Textur
  • Ein gebackenes gerichtetes Licht
  • Standard schnellste Qualitätseinstellungen
  • Standard-Player-Einstellungen für VR speichern aktiviert und Multi-Threaded-Rendering aktiviert

Auf meinem PC, wenn ich am Profiler ich das folgende Profil erhalten aussehen:

PC profile profile

über das, was Sie würde erwarten: nahe 4000 FPS.

Jedoch, wenn ich meine genau die gleiche Szene zu bauen und es auf meinem Galaxy S6 (mit ETC2 GLES 3.0 Texturkomprimierung) laufen lasse, erhalte ich dieses Profil:

enter image description here

Es ist nun nach unten über 60FPS zu gegangen ist. WTF? Wenn ich ein bisschen mehr in die Details aussehen sehe ich, dass die überwiegende Mehrheit der CPU-Auslastung Zeit für die GPU verbringt warten:

enter image description here

Und dann, wenn ich auf der GPU Nutzung aussehen sehe ich, dass es verbringt 99% seiner Zeit Anwendung GUITexture.draw:

enter image description here

Das Problem ist, ... es gibt keine freaking GUI Textur in meiner sehr einfachen Szene! Ich verstehe nichts davon. Könnte mir jemand erklären, was passiert und wie der extreme Leistungsunterschied zwischen PC und Handy reduziert werden kann?

Antwort

2

Ich weiß nicht, ob Sie die Antwort gefunden haben (ich hoffe, Sie haben), aber ich hatte das gleiche Problem vor nicht allzu langer Zeit und andere können das gleiche Problem haben.

1) GUITexture.Draw

The GUITexture.Draw beruht die "Entwicklung build" -Modus. Es fügt nach dem Rendern der gesamten Szene eine Entwickler-Wasserzeichentextur hinzu. Wir können es in Unity's Frame-Debug sehen. Unity frame debug

Die Shader-Eigenschaften besagt, dass es eine Textur namens "UnityWatermark-dev" als _MainTex verwendet. Du kannst mit einem Grafik-Debugger bestätigen, dass ich den Mali Graphics Debugger benutzt habe.

Hier ist, was die Textur aussehen würde: UnityWatermark-dev

Ich weiß nicht, warum es so Overhead im VR-Modus erstellt, aber es ist ziemlich billig, wenn Sie die VR deaktivieren.

2) Profil

Sie Ihren PC nicht verwenden, wenn Profilieren, es sei denn, Ihre Planung einen Riss oder vive Version zu starten. Es gibt große Unterschiede in der Prozessleistung zwischen Ihrem Galaxy S6 und Ihrem PC (oder sogar zwischen PCs, wenn Ihre GPU und Prozessoren anders sind).

Verwenden Sie Ihr Zielgerät immer als Profil. Nur so haben Sie die richtige Einsicht in das, was in Ihrem Projekt passiert. Wenn Sie ein Rift/Vive-Projektprofil auf Ihrem PC starten möchten, sollten Sie ein GearVR-Versionsprofil auch in Ihren mobilen Geräten verwenden.