Inzicht in prestaties voor mixed reality
Dit artikel is een inleiding tot het begrijpen van de betekenis van prestaties voor uw Mixed Reality-app. Gebruikerservaring kan aanzienlijk worden verminderd als uw toepassing niet wordt uitgevoerd met een optimale framesnelheid. Hologrammen wordt instabiel weergegeven en het bijhouden van hoofden van de omgeving is onnauwkeurig, wat leidt tot een slechte ervaring voor de gebruiker. Prestaties moeten worden beschouwd als een eersteklas functie voor mixed reality-ontwikkeling en niet als een poolse taak.
De performante frameratewaarden voor elk doelplatform worden hieronder vermeld.
Platform | Doelframesnelheid |
---|---|
HoloLens | 60 FPS |
Windows Mixed Reality Ultra pc's | 90 FPS |
Windows Mixed Reality pc's | 60 FPS |
In het onderstaande framework worden aanbevolen procedures beschreven voor het bereiken van doelframesnelheden. Voor tips over het meten en verbeteren van framerate in de Unity-omgeving raden we u aan de prestatieaanbevelingen voor Unity-artikel te lezen
Inzicht in prestatieknelpunten
Als uw app een underperforming framerate heeft, moet u eerst analyseren en begrijpen waar uw toepassing rekenintensief is. Er zijn twee primaire processors die verantwoordelijk zijn voor het werk om uw scène weer te geven: de CPU en de GPU, die elk verschillende aspecten van uw Mixed Reality-app verwerken. De drie belangrijkste plaatsen waar knelpunten kunnen optreden, zijn:
- App Thread - CPU - verantwoordelijk voor uw app-logica, waaronder verwerking van invoer, animaties, fysica en andere app-logica.
- Thread renderen - CPU naar GPU - Verantwoordelijk voor het verzenden van uw tekenoproepen naar de GPU. Wanneer uw app een object zoals een kubus of model wil weergeven, verzendt deze thread een aanvraag naar de GPU om de bewerkingen uit te voeren.
- GPU : de grafische pijplijn van uw toepassing wordt meestal verwerkt om 3D-gegevens (modellen, patronen, enzovoort) te transformeren in pixels. Uiteindelijk wordt er een 2D-installatiekopieën geproduceerd die naar het scherm van uw apparaat moeten worden verzonden.
Over het algemeen zijn HoloLens toepassingen GPU-gebonden, maar niet altijd. Gebruik de onderstaande hulpprogramma's en technieken om te begrijpen waar uw specifieke app knelpunten bevat.
Uw toepassing analyseren
Er zijn veel hulpprogramma's waarmee u inzicht kunt krijgen in het prestatieprofiel en mogelijke knelpunten in uw mixed reality-toepassing.
Hieronder vindt u enkele veelgebruikte hulpprogramma's waarmee u uitgebreide profileringsgegevens voor uw toepassing kunt verzamelen:
- Intel Graphics Performance Analyzers
- foutopsporingsprogramma's voor afbeeldingen Visual Studio
- Unity Profiler
- Unity Frame Debugger
- Onreal Insights
- PIX
- GPU-profilering in Unreal
Profileer in elke omgeving
Een manier om te bepalen of uw app GPU of CPU-afhankelijk is, is door de resolutie van de uitvoer van het renderdoel te verlagen. Door het aantal pixels dat u wilt berekenen te verminderen, vermindert u de GPU-belasting. Het apparaat wordt weergegeven op een kleiner patroon en vervolgens up-sample om uw uiteindelijke afbeelding weer te geven.
Na het verlagen van de renderingresolutie, als:
- Toepassingsframerate neemt toe, dan bent u waarschijnlijk GPU gebonden
- Toepassingsframerate ongewijzigd, dan bent u waarschijnlijk CPU-gebonden
Notitie
Unity biedt de mogelijkheid om de doelresolutie van uw toepassing tijdens runtime te wijzigen via de eigenschap XRSettings.renderViewportScale . De uiteindelijke afbeelding die op het apparaat wordt weergegeven, heeft een vaste resolutie. Het platform zal de uitvoer van de lagere resolutie samplen om een afbeelding met een hogere resolutie te bouwen voor rendering op beeldschermen.
UnityEngine.XR.XRSettings.renderScale = 0.7f;
Uw toepassing verbeteren
Aanbevelingen voor CPU-prestaties
Over het algemeen werken de meeste werkzaamheden in een mixed reality-toepassing op de CPU om de 'simulatie' van de scène uit te voeren en uw toepassingslogica te verwerken. De volgende gebieden zijn gericht op optimalisatie:
- Animaties
- Natuurkunde
- Geheugentoewijzingen
- Complexe algoritmen (inverse kinematica, path-finding)
Aanbevelingen voor GPU-prestaties
Inzicht in bandbreedte versus doorvoersnelheid
Bij het weergeven van een frame op de GPU is een toepassing afhankelijk van de geheugenbandbreedte of vulsnelheid.
- Geheugenbandbreedte is de snelheid van lees- en schrijfbewerkingen die de GPU kan uitvoeren vanuit het geheugen
- Om bandbreedtebeperkingen te identificeren, vermindert u de structuurkwaliteit en controleert u of de framerate is verbeterd.
- Als u beperkingen voor de doorvoersnelheid wilt identificeren, verlaagt u de weergaveresolutie en controleert u of de framesnelheid verbetert.
Notitie
Als u met Unity werkt, bekijkt u onze aanbevelingen voor gpu-prestaties van Unity. - Gebruik in Unity de eigenschap XRSettings.renderViewportScale
Geheugenbandbreedte omvat over het algemeen optimalisaties voor een van beide:
- Lagere patroonresoluties
- Minder patronen gebruiken (normalen, specular, enzovoort)
Opvulsnelheid is gericht op het verminderen van het aantal bewerkingen dat moet worden berekend voor een uiteindelijke gerenderde pixel, waaronder:
- Aantal objecten dat moet worden weergegeven/verwerkt
- Aantal bewerkingen per shader
- Aantal GPU-fasen tot eindresultaat (geometrie-shaders, naverwerkingseffecten, enzovoort)
- Aantal pixels dat moet worden weergegeven (weergaveresolutie)
Aantal veelhoeken verminderen
Hogere veelhoekaantallen resulteren in meer bewerkingen voor de GPU, waardoor het aantal veelhoeken in uw scène de rendertijd vermindert. Er zijn andere factoren die arcering van de geometrie duur maken, maar het aantal veelhoeken is de eenvoudigste meetwaarde om te bepalen hoeveel werk het kost om een scène weer te geven.
Overtekening beperken
Hoge overtekening treedt op wanneer meerdere objecten worden weergegeven, maar niet op het scherm worden weergegeven omdat ze zijn verborgen door een occluding-object. Imagine kijken naar een muur met objecten erachter. Alle geometrie wordt verwerkt voor rendering, maar alleen de ondoorzichtige wand moet worden gerenderd, wat leidt tot onnodige bewerkingen.
Shaders
Shaders zijn kleine programma's die worden uitgevoerd op de GPU en twee belangrijke stappen uitvoeren in rendering:
- Bepalen welke hoekpunten moeten worden getekend en waar ze zich in de schermruimte bevinden (de hoekpunt-shader)
- De hoekpunt-shader wordt per hoekpunt uitgevoerd voor elk mesh.
- De kleur van elke pixel bepalen (de Pixel-shader)
- De Pixel-shader wordt per pixel uitgevoerd en weergegeven door de geometrie naar het doelweergavepatroon.
Arceringen voeren doorgaans veel transformaties en belichtingsberekeningen uit. Hoewel complexe verlichtingsmodellen, schaduwen en andere bewerkingen fantastische resultaten kunnen genereren, hebben ze ook een prijs. Het verminderen van het aantal bewerkingen dat in shaders wordt berekend, kan het werk dat nodig is voor de GPU per frame aanzienlijk verminderen.
Aanbevelingen voor shader-codering
- Bilineaire filters gebruiken, indien mogelijk
- Expressies opnieuw rangschikken om MAD-intrinsiek te gebruiken om een vermenigvuldiging en een invoegtoepassing tegelijkertijd uit te voeren
- Bereken zoveel mogelijk op de CPU en geef als constanten door aan het materiaal
- De voorkeur geven aan het verplaatsen van bewerkingen van de pixel-shader naar de hoekpunt-shader
- Over het algemeen is het aantal hoekpunten veel kleiner dan het aantal pixels (720p is 921.600 pixels, 1080p 2.073.600 pixels, enzovoort)
GPU-fasen verwijderen
Naverwerkingseffecten kunnen duur zijn en de vulsnelheid van uw toepassing verhogen, inclusief antialiassentechnieken zoals MSAA. Op HoloLens raden we u aan deze technieken en extra arceringsfasen zoals geometrie, romp en rekenschaduwen te vermijden.
Aanbevelingen voor geheugen
Overmatige geheugentoewijzing en deallocatiebewerkingen kunnen leiden tot inconsistente prestaties, bevroren frames en ander schadelijk gedrag. Het is vooral belangrijk om geheugenoverwegingen te begrijpen bij het ontwikkelen in Unity, omdat geheugenbeheer wordt beheerd door de garbagecollector.
Objectpooling
Objectpooling is een populaire techniek om de kosten van continue toewijzingen en toewijzingen van objecten te verminderen. Dit wordt gedaan door een grote groep identieke objecten toe te wijzen en inactieve, beschikbare exemplaren uit deze pool te hergebruiken in plaats van voortdurend objecten in de loop van de tijd te verwijderen. Objectgroepen zijn ideaal voor hergebruikbare onderdelen die een variabele levensduur hebben tijdens een app.
Zie ook
- Prestatieaan aanbevelingen voor Unity
- Aanbevolen instellingen voor Unity
- Prestatieaan aanbevelingen voor Unreal
- Materiële aanbevelingen in Unreal
- 3D-modellen optimaliseren
- Aanbevolen procedures voor het converteren en optimaliseren van realtime 3D-modellen
- Prestatierichtlijnen voor kunstenaars en ontwerpers voor Unreal
- Aanbevolen procedures voor VR voor Unreal