Verkligt virtuellt viktigt

Ett område där Asynchronous Compute redan från start har varit viktig och kommer att fortsätta att vara det är virtuell verklighet. Låg latens och hög bilduppdatering är av största vikt inom VR. Det uppstår latens redan vid överföringen av bilder mellan grafikkort och VR-headsetets bildpaneler. Detta i kombination med att VR ställer betydligt högre krav på datorns prestanda gör att alla reduceringar av latens blir avgörande för helhetsupplevelsen.

AMD introducerade utvecklargränssnittet Liquid VR under våren 2015 med syftet att ge utvecklare bättre verktyg för att använda tekniker som Asynchronous Compute för att minska latensen, och Nvidia erbjuder en liknande plattform med Nvidia VR Works. Även om Liquid VR och VR Works erbjuder olika funktioner och använder olika namn på gemensamma sådana är den fundamentala principen för hur VR renderas densamma.

Förvrängningar och multi-GPU

En av funktionerna i både AMD:s och Nvidias plattformar som har varit till fördel för VR är något som kallas Asynchronous Reprojection, även kallat Asynchronous Timewarp. Enkelt förklarat är detta en teknik som minskar den latens som kan uppstå när systemet inte hinner rendera om bilderna snabbt nog för att hinna med användarens huvudrörelser. Med Asynchronous Reprojection kan en renderad bild modifieras baserat på användarens senaste huvudposition.

htc_vive.mp4_snapshot_26.35_[2016.04.05_12.29.44].jpg

Användarens potentiellt snabba huvudrörelser gör att renderingen av ögonens två bilder kan behöva modifieras snabbt.

async_shaders_vr.jpg

Asynchronous Compute-stödet i GCN-arkitekturen gjorde att AMD kunde vara tidigt ute med Liquid VR.

Eftersom användarens synfält (eng. viewport) kan ändras snabbt måste grafikkretsen kunna kompensera för detta. Här gör Asynchronous Compute det möjligt att rendera dessa modifierade bilder asynkront vid sidan av den vanliga serien bildrutor. Detta kan också kallas asynkront kontextbyte, då den förvrängda bilden måste ges prioritet över det pågående arbetet, och det med så lågt latens-påslag som möjligt. Enligt Robert Hallock har detta varit en användbar funktion som varit möjligt att införa tack vare Asynchronous Compute-stöd i hårdvaran.

Arbetet med Liquid VR och Mantle gav oss lägre latens tack vare asynchronous compute, men det gav oss också möjligheten att införa tekniker som asynchronous timewarp där bilden kan förvrängas för att kompensera för förlorade bildrutor. Asynchronous compute handlar om mer än att bara förbättra prestanda sett till bilduppdatering.

En funktion i både Liquid VR och VR Works som drar nytta av både Asynchronous Compute och nyheterna i DirectX 12 och Vulkan är att använda sammankopplade grafikkort där varje tilldelas varsitt "öga". Utvecklargränssnittet och dess drivrutiner ser då till att ett grafikkort tilldelas en bild medan det andra tilldelas nästa.

amd_liquidvr_amgpu.jpg
nvidia_vrworks_vrsli.jpg

Genom att använda denna teknik kan systemet snabbt anpassa renderingen av bilder efter användarens huvudrörelser utan att behöva rendera förvrängningar mellan bilderna som behövs när Asynchronous Reprojection används på ett grafikkort. Lösningen AMD använder kallas Affinity Multi-GPU, samma tekniska lösning som är en del av DirectX 12, medan Nvidia använder den egna lösningen VR SLI. Båda teknikerna jobbar dock enligt samma grundläggande princip.

Fokuserad upplösning

Rok Erjavec instämmer med att denna teknik tillsammans med flera andra har spelat stor roll i det tidiga arbetet med VR.

Att jobba med asynchronous reprojection har verkligen belyst de prestandamässiga fördelarna med asynchronous compute. Det gör det bland annat möjligt att effektivt hålla flera scener (eng. viewports) aktiva samtidigt och välja mellan dessa under körning, något som avlastar processorn en hel del. En ännu större förbättring för VR är något som kallas multi-resolution shading. Dessvärre är det en teknik som har olika lösningar från olika hårdvaruleverantörer, vilket tvingar utvecklare att antingen utveckla flera lösningar eller satsa på en plattform.

Multi-Resolution Shading är en teknik Nvidia introducerade som en del av VR Works. Tekniken blev tillgänglig i och med introduktionen av grafikarkitekturen Maxwell och används för att förbättra prestanda vid rendering av VR-innehåll. Det fungerar på så sätt att de delar av bilden som visas ute i bildpanelernas utkanter renderas i en lägre upplösning än deras centrum. Då det är innehållet i utkanterna som drabbas av förvrängning (eng. distortion) har detta inte en stor påverkan på upplevelsen, samtidigt som det förbättrar prestanda där det är relevant.