Im Gegensatz zu normalen Desktopanwendungen ist die Bildwiederholungsrate bei Virtual – und Augmented Reality Anwendungen kritisch. Je geringer die Bildwiederholungsrate ist, desto stärker hängt das virtuelle Bild der Realität nach. Dieser Effekt führt zur sogenannten Simulator Sickness. Um virtuelle Anwendungen nicht nur für kurze Tests, sondern auch über längere Zeitspannen verwenden zu können, ist eine konstant hohe Bildwiederholungsrate von hoher Wichtigkeit. Hoch detaillierte Modelle und komplexe Shader, wie sie heutzutage Standardmäßig eingesetzt werden, stehen dabei im genauen Widerspruch zur vergleichsweise leistungsschwachen Hardware in der HoloLens. In diesem Blogpost wird gezeigt, wie viel grafische Rechenleistung in der Augmented Reality Brille steckt. Die Ergebnisse sollen eine Orientierung für die Konzeption von Anwendungen für die HoloLens bieten.
Zur Evaluierung der Grafikleistung der HoloLens werden verschiedene Einsatzszenarien mit jeweils unterschiedlicher Komplexität betrachtet. Ziel ist es dabei herauszufinden bis zu welcher Komplexität die Bildwiederholungsrate von 60Hz nicht unterschritten wird. Natürlich geben diese simplen Tests keine genaue Auskunft über die Grafikleistung. Es genügt aber um ein Gefühl für die Möglichkeiten der HoloLens Hardware zu bekommen.
In HoloLens Anwendungen treten immer wieder ähnliche Einsatzszenarien auf. Um ein realistischeres Ergebnis zu erhalten werden verschiedene dieser Einsatzszenarien getestet. Die getesteten Einsatzszenarien sind:
- Reine Visualisierung: Dieses Szenario deckt Anwendungen ab, welche keine Interaktion zulassen und nur über die Fähigkeit zum Betrachten eines virtuellen Objekts verfügen.
- Klassisches (AR/VR-) Einsatzszenario: Dieses Szenario ist die Grundlage für einen Großteil der HoloLens Anwendungen. Neben dem Betrachten von Hologrammen sind Interaktionen über Handgesten und Spracherkennung möglich. Zusätzlich wird ein interaktiver Zeiger angezeigt.
- Verdeckung durch reale Objekte. Dieses Szenario verfügt über alle Eigenschaften des vorherigen Szenarios, es werden aber zusätzlich die von der HoloLens generierten Dreiecksmesh Spatial Mapping Informationen eingelesen und zur Verdeckung von eigenen Objekten verwendet. Es wird so ermöglicht, dass virtuelle Objekte, die sich hinter einem realen Objekt befinden, ausgeblendet werden.
- Anzeigen von Spatial Mapping (Dreiecksnetz). In diesem Szenario werden die Spatial Mapping Informationen der HoloLens mit Hilfe eines Drahtgitters visualisiert, sodass die Platzierung von virtuellen Objekten im Raum für den Benutzer erleichtert wird.
Jedes dieser Szenarien wurde mit verschiedenen Dreiecksanzahlen und Shadern getestet. Die Benchmark-Anwendung besteht aus einer sich bewegenden Punktlichtquelle und texturierten Kugeln (siehe Screenshot). Die Kugeln werden zufällig im Sichtfeld der Hololens verteilt, sodass immer alle Kugeln zu sehen sind. Zu Beginn eines Tests werden die für die Dreiecksanzahl benötigten Kugeln initialisiert. Nach einer kurzen Verzögerung zur Stabilisierung der Anwendung wird für sechzig Sekunden die Bildwiederholungsrate gemessen. Nach Abschluss des Tests wird die durchschnittliche Bildwiederholungsrate ausgegeben.
Ergebnisse der Messungen
Das Display der HoloLens arbeitet mit 60Hz. Da die Anwendung auf die vertikale Synchronisation des Displays wartet, kann die Frequenz von 60Hz nicht überschritten werden. Außerdem ist zu beobachten, dass die Frequenz sich in den meisten Fällen auf 60Hz, 30Hz oder 20Hz festsetzt. Dies ist dadurch zu erklären, dass ein Berechnungszyklus immer ähnlich lange dauert und deshalb entweder jeden, jeden zweiten oder jeder dritten Zyklus des Displays der Bildspeicher aktualisiert wird. Zwischen diesen Werten existieren instabile Zwischenwerte. Bei einer Bildwiederholungsrate von beispielsweise 45Hz benötigt der Render-Zyklus in 50% der Fälle kurzer als einen Displayzyklus und in 50% der Fälle länger. Die Gefahr besteht darin, dass eine geringe Erhöhung der Komplexität dazu führt, dass der Render-Zyklus immer länger als einen Display-Zyklus benötigt und die Bildwiederholungsrate sehr schnell auf 30Hz abfällt.
Zum Vergleich der einzelnen Shader eignet sich das erste Szenario am besten, da es unabhängig von Umgebungen und sonstigen Einflüssen ist. Mit dem HoloToolkit werden mehrere angepasste Shader mitgeliefert, so auch der Standard Fast Shader. Dieser ist eine auf HoloLens angepasst Variante des Unity Standard Shaders. In den Ergebnissen zeigt sich aber, dass dieser Shader nicht signifikant schneller ist.
Im Vergleich zu diesen beiden hochqualitativen Shadern bringt der Einsatz eines einfachen Vertex Lit Shaders einen enormen Geschwindigkeitsvorteil. Der damit verbundene Qualitätsverlust ist vor allem bei großen Dreiecken sichtbar.
Der Einsatz eines Unlit Shaders kann die Geschwindigkeit weiter steigern. Die Beleuchtung spielt allerdings bei der Erfassung eines Modells oder einer kompletten Szene eine besondere Rolle. Durch das Verzichten auf Beleuchtung können Strukturen und relative Positionen der Modelle trotz 3D Sicht der Brille nicht verlässlich erkannt werden. Aus diesem Grund sollte der Unlit Shader nur mit Vorsicht eingesetzt werden.
Die Anzahl der maximal darstellbaren Dreiecke reicht von circa 60000 für den Standard Shader bis zu circa 100000 für den Unlit Shader. Die geringe Anzahl bedeutet nicht das nur so viele Dreiecke in der Szene sein dürfen, sondern das nicht mehr Dreiecke auf einmal im Sichtfeld angezeigt werden können. Durch verschiedene Verfahren wie zum Beispiel LOD kann die Komplexität einer Szene verringert und so beherrschbar für die HoloLens werden.
Durch Betrachtung der verschiedenen Szenarios ist zu sehen, dass neben dem Rendering auch die Gesten und Spracherkennung sowie der interaktive Zeiger nicht außer Acht gelassen werden können. Selbst im klassischen Einsatzszenario muss die Komplexität der Szene reduziert werden.
Ein besonderes Augenmerk muss dabei auf das Einlesen und Anzeigen des generierten Dreiecksnetzes der Umgebung gelegt werden. Durch die Unvorhersehbarkeit der Größe und Komplexität des Raumes kann der Einfluss auf die Performance stark variieren. Selbst in einem durchschnittlichen Büro ist die HoloLens oft nur durch das Anzeigen des Dreiecksnetzes schon ausgelastet, sodass nur wenige weitere Objekte gerendert werden können.
Fazit
Um die Bildwiederholungsrate auf konstanten 60Hz zu halten, muss bei jedem Objekt versucht werden auf komplexe Geometrie zu verzichten und wenn möglich Vertex Shader oder sogar Unlit Shader zu verwenden. Die Diagramme in diesem Kapitel können als Richtwert beim Design einer Anwendung dienen. Die grafische Komplexität und die damit verbundene Bildwiederholungsrate sollten im kompletten Entwicklungsprozess dauerhaft überwacht werden um nicht am Ende eine unbefriedigende Anwendungserfahrung zu erhalten.