Das Samsung Galaxy XR ist da und wird von Android XR unterstützt. Dieser Blogbeitrag ist Teil unserer Android XR Spotlight Week, in der wir Ressourcen wie Blogbeiträge, Videos und Beispielcode bereitstellen, die Ihnen helfen sollen, Ihre Apps für Android XR zu entwickeln und vorzubereiten.
Diese Woche hat Samsung das Galaxy XR Headset auf den Markt gebracht, das in Zusammenarbeit mit Google und Qualcomm entwickelt wurde. Wir möchten Sie dabei unterstützen, die bestmögliche Leistung aus Ihrer XR‑App herauszuholen.
Eine schlechte Leistung in Spielen und Apps auf Nicht-XR-Geräten kann für den Nutzer frustrierend sein. In der Welt von XR ist die Leistung jedoch nicht nur optional, sondern grundlegend für den Erfolg Ihrer App. Wenn Sie Ihr Framerate-Ziel in XR verfehlen, kann dies zu weitaus schwerwiegenderen Problemen wie Reisekrankheit führen.
In diesem Leitfaden werden die wichtigsten Leistungsoptimierungen beschrieben, die Sie für die Android XR-Entwicklung kennen müssen. Du erfährst, welche Funktionen die größten Leistungssteigerungen bringen, wann du sie verwenden solltest und wie sie zusammenarbeiten, damit du deine Framerate-Ziele erreichst.
Das ist unser Ziel:
- Mindestanforderung : 72 fps (Teil unserer Qualitätsrichtlinien für Spiele)
- Optional: 90 fps mit einem Budget von 11 ms pro Frame
Weitere Informationen dazu, warum es wichtig ist, eine so hohe Framerate beizubehalten, findest du in unseren Leistungsrichtlinien.
XR-spezifische Leistungsfunktionen
Wir beginnen mit zwei XR-spezifischen Leistungsfunktionen: Foveated Rendering und Vulkan Subsampling.
Foveated Rendering
Foveated Rendering ist eine Optimierung, die zwei Modi hat. Der erste ist ein statischer Modus, in dem die Mitte des Bildschirms mit einer höheren Auflösung gerendert wird. Die Auflösung wird dann immer geringer, je weiter Sie nach außen schauen.
Der zweite ist der Eye-Tracking-Modus, in dem der Bereich, auf den Sie gerade schauen, in voller Detailtiefe gerendert wird, während die Qualität in Ihrem peripheren Sichtfeld reduziert wird. Im Grunde wird damit die Funktionsweise des menschlichen Sehens nachgeahmt, bei dem wir nur in dem Bereich, auf den wir uns konzentrieren, feine Details sehen.
Durch Foveated Rendering wird die GPU-Arbeitslast deutlich reduziert, ohne dass die wahrgenommene Bildqualität für den Nutzer darunter leidet. Der Vorteil von Foveated Rendering ist, dass Nutzer die geringere Qualität im peripheren Sichtfeld nicht bemerken, die GPU aber von der verbesserten Leistung profitiert.
Stellen Sie sich vor, Sie erstellen eine Museumsanwendung mit komplexen 3D-Artefakten. Ohne Foveated Rendering wäre es schwierig, 90 FPS zu erreichen, wenn alles im Sichtfeld gerendert wird. Mit Foveated Rendering können Sie die hochauflösenden Details beibehalten, auf die der Nutzer blickt, während die Hintergrundumgebung in geringerer Qualität gerendert wird. Ihre Nutzer werden den Unterschied nicht bemerken, aber Sie haben die Möglichkeit, Ihrer Szene mehr Details hinzuzufügen.
Vulkan-Subsampling
Vulkan-Subsampling ist die perfekte Ergänzung für Foveated Rendering. Während beim Foveated Rendering entschieden wird, was in verschiedenen Qualitätsstufen gerendert werden soll, wird beim Vulkan-Subsampling mithilfe von Fragment Density Maps festgelegt, wie die verschiedenen Qualitätsstufen effizient gerendert werden.
In Kombination mit Foveated Rendering bietet Vulkan Subsampling zusätzliche 0, 5 ms Leistung. Außerdem werden gezackte Kanten im peripheren Sichtfeld geglättet, sodass das Bild insgesamt klarer wirkt.
In einem Flugsimulator-Spiel, in dem sich Nutzer auf Instrumente und Bedienelemente konzentrieren, können durch die Kombination von foveated Rendering und Vulkan-Subsampling die detaillierten Bedienelemente scharf gerendert werden, während die periphere Cockpitstruktur weniger Ressourcen verbraucht. Diese zusätzlichen 0,5 ms klingen nicht nach viel, aber sie machen den Unterschied aus, ob Platz für ein zusätzliches interaktives Element ist oder ob in intensiven Momenten Frames verloren gehen.
GPU-Funktionen für komplexe Szenen
Neben Foveated Rendering und Vulkan Subsampling gibt es einige GPU-Funktionen, die durch intelligentes Instancing und Culling unnötige Belastungen reduzieren. Sie eignen sich besonders für komplexe Szenen mit wiederholter Geometrie oder erheblicher Verdeckung.
GPU-Resident-Drawer
Der GPU Resident Drawer verwendet automatisch GPU-Instanziierung, um Zeichenbefehle zu reduzieren und CPU-Verarbeitungszeit freizugeben. Anstatt dass die CPU der GPU jedes Objekt einzeln mitteilt, fasst die GPU ähnliche Objekte zusammen.
Diese Funktion ist am effektivsten für große Szenen mit sich wiederholenden Meshes, z. B. Bäume in einem Wald, Möbel in einem Bürogebäude oder Requisiten, die in einer Umgebung verteilt sind.
Stellen Sie sich eine Waldszene mit 200 Bäumen vor, die alle dasselbe Basismesh verwenden. Ohne den GPU Resident Drawer werden 200 Zeichenbefehle von der GPU verarbeitet, wodurch die CPU entlastet wird. Wenn Sie diese Funktion aktivieren, instanziiert die GPU diese Bäume intelligent, was die Anzahl der Zeichenbefehle auf 5–10 reduzieren sollte. Das ist eine enorme GPU-Einsparung, die Sie dann in die Gameplay-Logik oder Physikberechnungen investieren können.
GPU-Occlusion-Culling
Beim GPU-Occlusion Culling wird die GPU anstelle der CPU verwendet, um verborgene Objekte zu identifizieren und das Rendern zu überspringen. Es wird automatisch erkannt, was hinter anderen Objekten verdeckt ist, sodass die GPU nicht für Dinge verschwendet wird, die der Nutzer nicht sehen kann.
Diese Funktion ist besonders nützlich in Innenräumen mit mehreren Zimmern, in dichten Umgebungen oder in architektonischen Szenen, in denen Wände, Böden und Objekte die Sicht versperren.
Nehmen wir als Beispiel an, Sie entwickeln eine Multiroom-Hausanwendung. Wenn sich der Nutzer im Wohnzimmer befindet, warum sollten dann GPU-Zyklen für die Darstellung der detaillierten Küche verschwendet werden, die sich hinter einer Wand befindet? Beim GPU Occlusion Culling wird das Rendern dieser verdeckten Objekte automatisch übersprungen, sodass mehr Leistungsbudget für die tatsächlich sichtbaren Objekte zur Verfügung steht.
Leistung beobachten
Es reicht nicht aus, diese Funktionen nur zu verwenden. Außerdem müssen Sie Ihre Optimierungen messen, um ihre Auswirkungen zu quantifizieren und zu überprüfen, ob Ihre Änderungen tatsächlich funktionieren.
Performance Metrics API
Die Performance Metrics API ermöglicht ein Echtzeit-Monitoring der Arbeitsspeichernutzung, CPU-Leistung und GPU-Leistung Ihrer Apps. Sie erhalten umfassende Daten aus den Compositor- und Laufzeitschichten, sodass Sie genau sehen können, was in Ihrer Anwendung passiert.
Legen Sie vor den Änderungen eine Baseline fest, wenden Sie eine Optimierung an, messen Sie die Auswirkungen und wiederholen Sie den Vorgang. Bei diesem datengestützten Ansatz wissen Sie, dass Sie die Leistung tatsächlich verbessern, anstatt nur Vermutungen anzustellen.
Vor der Aktivierung des Foveated Rendering beträgt die GPU-Frame-Zeit möglicherweise 13 ms, was über dem Budget von 11 ms liegt. Aktivieren Sie das foveated Rendering, messen Sie noch einmal und hoffentlich sehen Sie, dass der Wert auf 9 ms sinkt. Das sind 4 ms mehr Zeit, um Ihrer Szene mehr Details hinzuzufügen, die visuelle Qualität an anderer Stelle zu verbessern oder einfach für eine flüssigere Leistung bei einer größeren Bandbreite von Inhalten zu sorgen.
Ohne diese Messwerte optimieren Sie blind. Die Performance Metrics API liefert Ihnen die Wahrheit darüber, was für Ihren speziellen Anwendungsfall tatsächlich hilfreich ist.
Frame Debugger
Der Frame Debugger ist das integrierte Tool von Unity, mit dem Sie genau nachvollziehen können, wie Ihre Szene Frame für Frame gerendert wird. Sie sehen die Reihenfolge der Draw-Aufrufe und können sie durchgehen, um zu prüfen, ob Ihre Optimierungen richtig funktionieren.
Möchten Sie prüfen, ob der SRP-Batcher funktioniert? Suchen Sie im Frame Debugger nach Einträgen für „RenderLoopNewBatcher“. Prüfen, ob der GPU Resident Drawer ordnungsgemäß Batching durchführt? Suchen Sie nach Einträgen für „Hybrid Batch Group“. Anhand dieser visuellen Bestätigungen können Sie nachvollziehen, ob Ihre Optimierungseinstellungen tatsächlich wirksam werden.
Gehen Sie die ersten 50 Draw Calls Ihrer Szene durch. Wenn Sie sehen, dass ähnliche Objekte einzeln und nicht im Batch gezeichnet werden, funktioniert die Instanziierung oder das Batching nicht richtig. Mit dem Frame Debugger werden diese Probleme sofort sichtbar, sodass Sie sie beheben können.
Zusätzliche Optimierungen
Neben den oben beschriebenen Optimierungen werden in unserem vollständigen Leitfaden zur Leistung auch einige weitere Optimierungen behandelt. Hier eine kurze Zusammenfassung:
- URP-Einstellungen:Deaktivieren Sie HDR und Postprocessing für mobile XR. Diese Funktionen haben im Vergleich zu den Leistungskosten auf mobiler Hardware nur minimale visuelle Auswirkungen. Sie erzielen also messbare Leistungssteigerungen bei kaum wahrnehmbaren visuellen Unterschieden.
- SRP Batcher:Reduziert den CPU-Overhead für Szenen mit vielen Materialien, die dieselbe Shader-Variante verwenden. Wenn Sie die Änderungen des Rendering-Status zwischen Zeichenbefehlen minimieren, können Sie die CPU-Zeit für das Rendering erheblich reduzieren.
- Aktualisierungsrate des Displays:Die Aktualisierungsrate wird dynamisch zwischen 72 und 90 fps angepasst, je nach Komplexität der Szene. Senke die Framerate bei komplexen Sequenzen, um die Stabilität zu gewährleisten, und erhöhe sie bei einfacheren Momenten für eine besonders flüssige Interaktion.
- Tiefen-/opake Texturen:Deaktivieren Sie diese, sofern sie nicht speziell für Shader-Effekte benötigt werden. Sie verursachen unnötige GPU-Kopiervorgänge, die Leistung verschwenden, ohne für die meisten Anwendungen einen Vorteil zu bieten.
- URP Render Scale (URP-Renderskala): Mit dieser Einstellung können Sie mit einer reduzierten Auflösung rendern, um die Leistung zu verbessern, oder das Rendern hochskalieren, um die visuelle Qualität zu steigern.
Eine detaillierte Anleitung zu diesen und weiteren Optimierungen finden Sie in unserem vollständigen Unity-Leistungsleitfaden für Android XR.
Fazit
Die Leistung Ihrer XR-App ist nicht nur ein technisches Kontrollkästchen. Sie macht den Unterschied zwischen einer angenehmen, fesselnden Erfahrung und einer, die bei Nutzern zu Unwohlsein oder Übelkeit führt. Die besprochenen Optimierungen sind Ihr Toolkit, um die wichtigen Framerate-Ziele auf den neuesten XR-Geräten zu erreichen.
So geht es weiter:
- Beginnen Sie mit Foveated Rendering und Vulkan-Subsampling. Diese XR-spezifischen Funktionen sorgen für sofortige und spürbare GPU-Einsparungen.
- Fügen Sie GPU Resident Drawer und Occlusion Culling hinzu, wenn Sie komplexe Szenen mit wiederholter Geometrie oder Innenräumen haben.
- Mit der Performance Metrics API alles im Blick behalten, um sicherzugehen, dass Ihre Änderungen tatsächlich helfen
- Zusätzliche URP-Optimierungen für mehr Leistungsspielraum
Es ist wichtig, kontinuierlich zu messen und zu iterieren. Nicht jede Optimierung kommt jedem Projekt gleichermaßen zugute. Verwenden Sie daher die Performance Metrics API, um sich ein klares Bild davon zu machen, was für Ihren spezifischen Anwendungsfall tatsächlich hilfreich ist.
Nächste Schritte: Fähigkeiten erweitern
Sie möchten noch mehr erfahren? Dann sehen Sie sich gleich diese Infomaterialien an:
- Unity-Leistungsleitfaden für Android XR: Vollständige Schritt-für-Schritt-Anleitung zur Implementierung aller hier beschriebenen Funktionen.
- Erste Schritte mit Unity und Android XR: Richten Sie Ihre Entwicklungsumgebung ein und beginnen Sie mit der Entwicklung.
- Android XR-Entwicklerdokumentation: Umfassende Leitfäden für alle Android XR-Funktionen
-
ProduktneuigkeitenWir freuen uns, Ihnen mitteilen zu können, dass die Unreal Engine und Godot jetzt offiziell für Android XR unterstützt werden. Außerdem führen wir neue Tools ein, mit denen Sie Ihre Produktivität steigern und neue XR-Funktionen nutzen können: den Android XR Engine Hub und das Android XR Interaction Framework.
Luke Hopkins, Ryan Bartley • Lesezeit: 4 Minuten -
ProduktneuigkeitenHeute haben wir euch gezeigt, wie wir unsere Vision „Mehr als nur ein Store“ weiterentwickeln. Vom Tab „Mein Play“, der mittlerweile die persönliche Anlaufstelle für über 250 Millionen monatlich aktive Nutzer ist, bis hin zu unserer einheitlichen Gaming-Plattform, die über 700 Millionen Spielerprofile verbindet – Google Play ist immer da, wo die Nutzer sind.
Paul Feng • Lesezeit: 3 Minuten -
ProduktneuigkeitenAls Android-Entwickler haben Sie viele Möglichkeiten, wenn es um die Agenten, LLMs, Tools und Befehlszeilen (CLI) geht, die Sie für die App-Entwicklung verwenden. Unser Ziel ist es, Sie bei der Entwicklung ansprechender, hochwertiger Android-Apps zu unterstützen, unabhängig davon, wie Sie diese entwickeln.
Simona Milanovic • Lesezeit: 4 Minuten
Lassen Sie sich Woche für Woche die neuesten Informationen zur Android-Entwicklung zusenden.