Werbung
Die Darstellung von 3D-Inhalten in Virtual-Reality-Headsets stellt einige Herausforderungen an die Hardware. 1.280 x 1.440 Pixel pro Auge bei einer Bildwiederholungsrate von 90 Hz beschreiben diese aber nur sehr oberflächlich. Die Ausgabe eines Frames alle 11,1 ms ist selbst für moderne GPUs eine nicht immer ganz so leichte Aufgabe, vor allem weil zahlreiche API-Level überwunden werden müssen.
VALVE hielt in Form von Alex Vlachos auf der Game Developer Conference 2016 einen Vortrag dazu. In diesem ging er noch einmal genauer auf bereits gemachten Fortschritte und Technologien ein, stellte aber auch einige neue Ansätze vor. Begonnen hat er seinen Vortrag aber mit dem, was eigentlich auf der Hand liegt. So besteht ein fertiger Frame in einem VR-Headset nicht aus einem gefüllten Bild bei 2.560 x 1.440 Pixel, sondern durch die Optik und Art und Weise wie unser Auge Informationen aufnimmt, werden zwei ineinander verlaufende und verzerrte kreisrunde Bilder erstellt. Die Bereiche außerhalb dieser beiden Kreise müssen nicht gerendert werden, was schon einmal einige Ressourcen freimacht.
Auch wenn die VR-APIs wie LiquidVR von AMD und GameWorks VR von NVIDIA grundsätzlich den Einsatz von zwei oder mehr GPUs ermöglichen, dies aktuell aber noch nicht in den Spielen umgesetzt wird, so dürfte ein großer Anteil der für VR eingesetzten Systeme nur auf eine GPU setzen. Laut VALVE ist dies auch mehr als ausreichend. Selbst bei einem sequentiellen Rendering von zwei Bildern für jedes Auge kann über verschiedene Techniken eine Einsparung an Leistung erfolgen. So werden beispielsweise die Shadowmaps für beide Berechnungen verwendet und müssen nicht zweimal erstellt werden.
Vortrag von VALVE auf der GDC 2016
An Multi-GPU-Systeme werden hingegen besonderes Anforderungen erstellt, die mit LiquidVR und GameWorks VR zwar bereits adressiert werden, aber noch nicht vollständig umgesetzt werden können. So werden teilweise Informationen zwischen den GPUs ausgetauscht, damit diese nicht doppelt berechnet und angelegt werden müssen. Dem Austausch an Daten sind aber Grenzen gesetzt, zudem erzeugen Multi-GPU-Systeme durch den Datenaustausch und Abgleich auch einen gewissen Overhead, der bei Single-GPU-Systemen nicht vorhanden ist.
Anders als beim Alternate Frame Rendering lassen sich so aktuell keine Leistungssteigerungen von über 50 Prozent erreichen. VALVE spricht von einem Leistungsplus im Bereich von 30 bis 35 Prozent. Natürlich aber sorgen Multi-GPU-Systeme mit beispielsweise zwei GPUs dafür, dass die Mindestvoraussetzungen von 11,1 ms bzw. 90 Hz eingehalten werden können.
Vortrag von VALVE auf der GDC 2016
Ein zusätzliches Leistungsplus versprechen natürlich Systeme mit vier GPUs. Hier allerdings wird der Verwaltungsaufwand auf Ebene der APIs und beteiligten Schnittstellen immer größer und der Vorteil durch die theoretisch höhere Rohleistung schmilzt immer weiter zusammen. Besonders im Fokus steht dabei die Übertragung der Render Targets über die GPUs hinweg und hier gibt es theoretisch verschiedene Ansätze, wie dieser erfolgen kann.
Um die höhere Rechenleistung der GPUs in einem Multi-GPU-System sinnvoll nutzen zu können, wäre eine Erhöhung der Auflösung denkbar. Ohnehin rendert VALVE die Demo Aperture Robot Repair bereits in 1.512 x 1.680 Pixel pro Auge und wendet auch ein 4x MSAA darauf an. Ausgegeben wird das Bild dann in 1.080 x 1.200 Bildpunkten auf der HTC Vive. Mit zwei oder vier GPUs wäre es möglich, in 2.116 x 2.352 bei 8x MSAA zu rendern und man verbliebe noch immer innerhalb der Vorgabe von 11,1 ms pro Frame.
Um weitere Ressourcen einzusparen, setzte VALVE auch eine Technik ein, die sich Over Rendering nennt. Dabei werden die Bereiche hin zum Zentrum der Darstellung immer genauer berechnet, während im Außenbereich ein weniger starkes Downsampling eingesetzt wird. VALVE definiert dazu bestimmte Bereiche der Darstellung, denen unterschiedliche Detailsstufen zugewiesen werden können.
Bei NVIDIA hat man eine eben solche Technik bereits entwickelt und nennt diese Multi Resolution Shading. NVIDIA macht sich dabei einige Umstände zu nutzen, die durch VALVE bereits beschrieben wurden: Damit der Nutzer einer VR-Brille überhaupt in der Lage ist auf einer Brille und den darin verbauten Displays etwas zu sehen, wird eine Optik verwendet, die das Bild entsprechend dem Betrachtungsabstand und gewünschtem Blickwinkel anpasst. Die Ausgabe auf dem Display erfolgt daher in einer Fisheye-ähnlichen Verzerrung und zudem wird das Bild an den Rändern noch gestaucht, damit nach der Optik ein für den Nutzer normales und unverzerrtes Bild entsteht. Da GPUs und die Rendering-Prozesse aber nicht darauf ausgelegt sind, ein solches Bild auszugeben, gehen die Hersteller hin und rendern das Bild auf gewöhnliche Art und Weise, um es in einem Post Processing entsprechend anzupassen. Diese nachträgliche Bearbeitung kostet zum einen Leistung, viel entscheidender aber ist, dass eine weitere Verzögerung bis zur Ausgabe des Bildes entsteht und gerade diese ist für ein möglichst optimales VR-Erlebnis störend.
NVIDIA GameWorks VR mit Multi Resolution Shading
NVIDIA wendet nun einen Trick an, um die nicht oder nur eingeschränkt sichtbaren Bereiche anders zu behandeln. Dazu wird das Bild in neun Bereiche aufgeteilt. Diese sogenannten Viewports orientieren sich in etwa an den sonst im Post Processing bearbeiteten Abschnitten. So wird der mit Abstand größte Viewport in der Mitte fast vollständig so belassen, wie er ursprünglich auch behandelt wurde. Die Seitenbereiche und vor allem die vier Ecken aber werden mit einer Art Komprimierung belegt und in ihrer Auflösung entsprechend dem gewünschten Endergebnis angepasst.
Alle neun Viewports werden gleichzeitig durch die GPU berechnet – allerdings getrennt voneinander. Die Ausgabe erfolgt schlussendlich in einer bereits fertig angepassten Form. Ein Post Processing ist damit nicht mehr notwendig. Durch die Aussparung von nicht sichtbaren Bereichen sowie der Anpassung der Auflösung der Ränder und einer zusätzlichen Komprimierung kommt NVIDIA auf eine erhöhte Pixel-Shader-Performance um den Faktor 1,3 bis 2. Die Verarbeitung unterschiedlicher Viewports in einem Rendering-Prozess ist laut NVIDIA nur auf GPUs mit "Maxwell"-Architektur möglich.
Vortrag von VALVE auf der GDC 2016
Laut VALVE ist durch ein Multi Resolution Shading oder Fixed Foveated Rendering ein Leistungsplus von 5 bis 10 Prozent zu erreichen, ohne dass der Betrachter einen Unterschied in der Bildqualität erkennen kann.
Dennoch kann es dazu kommen, dass eine Grafikkarten die Vorgabe von 90 Bildern pro Sekunde nicht einhalten kann und dann stellt sich die Frage, wie damit umgegangen wird, ohne dass das Spielerlebnis zu sehr leidet. VALVE wählt einen Ansatz, der ebenfalls schon von NVIDIA beschrieben wurde. Bei den Asynchronous Time Warp wird kein neuer Frame berechnet, sondern der vorherige Frame wird verwendet und mit den Daten zur Änderungen der Blickrichtung kombiniert. Das Positional Reprojecting ist derzeit aber nur eine Notlösung, da die Methodik zur Wiederverwendung und Vorhersage des nächsten Frames bzw. der gewählten Blickrichtung aktuell noch nicht ausgereift ist.
Vortrag von VALVE auf der GDC 2016
im letzten Teil seines Vortrages geht Alex Vlachos auch noch einmal auf die Hardwarevoraussetzungen ein. So sind 11,1 ms zwar die theoretische Vorgabe, um immer auf der sicheren Seiten zu sein sollten Entwickler aber mit 10 ms bzw. 100 fps planen. Allerdings will VALVE durch die erwähnten Techniken auch die Mindestvoraussetzungen für VR-Titel reduziert haben und so laufe Aperture Robot Repair auch auf einer GeForce GTX 680, dann aber mit reduzierter Auflösung. Für die beste Darstellung sei einer GeForce GTX 980 Ti notwendig und so sei die Spanne selbst bei solchen Titeln bereits recht groß.
Schlussendlich wird man noch abwarten müssen, wie sich das Zusammenspiel von GPU und VR-Headset sowie den dazugehörigen Systemanforderungen darstellen wird. Entwickler sollten aber sehr vorsichtig mit den zur Verfügung stehenden Ressourcen umgehen.