
VR-renderöinnin suorituskyky
Viritys ja optimoinnit
Johdanto
Optimaalisen VR-kokemuksen saavuttaminen resurssirajoitetuilla laitteistoilla on avain sujuvaan ja mukavaan käyttökokemukseen. Jos sisällön renderöinnin kehysnopeus putoaa tai epävakaa laitteen virkistystaajuuden alapuolelle, se johtaa ruutujen tärinään ja änkytykseen, matkapahoinvointiin jne. lopulta vaikuttaa kielteisesti käyttökokemukseen. Siksi sisällön suorituskyvyn optimointi on erittäin tärkeää nautinnollisen kokemuksen takaamiseksi.
Ennen suorituskyvyn virityksen aloittamista on tärkeää ymmärtää, missä suorituskyvyn pullonkaulat ovat tehottoman virityksen välttämiseksi. Tämä asiakirja on suunniteltu auttamaan kehittäjiä tunnistamaan suorituskyvyn pullonkauloja ja tarjoamaan ratkaisuja renderöinnin suorituskykyongelmien ratkaisemiseen.
Asiakirja on järjestetty seuraaviin osiin:
- Luku 2: Tunnista pullonkaula – Tämä osio auttaa kehittäjiä tunnistamaan pullonkaulat.
- Luku 3 ja 4: VIVE Wave- ja VIVE OpenXR -asetukset – Näissä osissa kuvataan tiettyjä asetuksia, jotka voivat vaikuttaa VIVE Wave- ja OpenXR-sovellusten suorittimen/grafiikkasuorittimen suorituskykyyn. Kehittäjät voivat kokeilla näiden ominaisuuksien käyttöönottoa tai poistamista käytöstä havaittujen suorituskyvyn pullonkaulojen perusteella selvittääkseen, onko parannuksia tehty.
- Luku 5: Yleinen optimointi – Tässä osiossa on joitain yleisiä optimointikäytäntöjä ja kokemuksia.
Tunnista pullonkaula
Kun HMD liikkuu, jos VR/MR-sovelluksessa on kehysvärinää tai musta reuna jne., se johtuu yleensä huonosta renderöintisuorituskyvystä. Tavallisesti renderöinnin suorituskykyongelmat voidaan luokitella kahteen tyyppiin: CPU-sidottu tai GPU-sidottu. Ymmärrä, minkä tyyppiset sidontatyypit sovelluksellesi ovat erittäin tärkeitä alussa, jotta vältytään tehottomalta tunnistukselta.
Tässä luvussa tarjoamme yksinkertaisia ohjeita, joiden avulla voit nopeasti tunnistaa, missä suorituskykyongelmat ovat.
2.1 Tarkista sisällön renderöinnin FPS
Ensin aloitamme tarkistamalla sisällön FPS, joka on kehysten määrä, jonka sisältö renderöi sekunnissa. Se tulee säilyttää näytön kuvanopeudella ja pitää vakaana. Muuten se voi aiheuttaa kehysvärinää.
Jos sovelluksesi SDK käyttää VIVE WAVE SDK 6.0.0:aa tai uudempaa, voit tarkistaa FPS:n käyttämällä seuraavaa adb-komentoa. DK 6.0.0
$adb Logcat -s VRMetric
Näet seuraavat lokitiedot.
VRMetric:FPS=89.8/89.8,CPU-27/1,GPU=72/3,GpuBd=0,LrCnt=1,2Stag=1,Pstat=2,AQ=1,FOVED=0/0, FSE=1,TWS-2,PT=0(0), RndrBK=0,GLTA=2D,EB=1720×1720
"FPS=89.8/89.8" Ensimmäinen numero edustaa sisällön FPS, kun taas toinen numero edustaa näytön kehysnopeutta.
Jos Wave SDK -versiosi on vanhempi kuin 6.0.0, on suositeltavaa päivittää uusimpaan versioon renderöinnin tehokkuuden ja muiden optimoinnin parantamiseksi.
Jos sovelluksesi SDK on rakennettu VIVE OpenXR:llä. Voit tarkistaa FPS:n käyttämällä seuraavaa adb-komentoa.
$adb Logcat -s RENDER_ATW
Näet seuraavat lokitiedot
RENDER_ATW: [FPS] uusi pintakuvio: 90.00
RENDER_ATW: [FPS] R läsnä:90.00 ohitus: 0 317, -0.0155 0.805527, 0.006788)
RENDER_ATW: [FPS] L läsnä:90.00 ohitus:0 (0.592301, -0.015502, 0.805539, 0.006773)
"Uutta pintakuviota" seuraava numero edustaa tällä hetkellä sisällön FPS:ää. "R läsnä" ja "L läsnä" seuraavat numerot edustavat näytön kehysnopeutta.
Joskus sisällön FPS:ssä ja näytön kuvanopeudessa voi olla pieni ero.
esimampYllä olevassa tapauksessa 89.8 FPS voidaan katsoa 90 FPS:ksi.
Jos sovelluksen sisällön FPS on jatkuvasti alhaisempi kuin näytön kehysnopeus tai pysyy epävakaana, se tarkoittaa renderöinnin suorituskykyongelmaa. Siksi seuraava askel on tunnistaa, tuleeko pullonkaula prosessorista vai grafiikkasuorittimesta.
2.2 Tarkista CPU:n ja GPU:n käyttö
Jos sovelluksesi SDK käyttää VIVE WAVE SDK 6.0.0:aa tai uudempaa, voit tarkistaa FPS:n käyttämällä seuraavaa adb-komentoa.
$adb logcat -s VRMetric
Näet seuraavat lokitiedot.
VRMetric:FPS=89.8/89.8,CPU=27/1,GPU=72/3,GpuBd=0,LrCnt=1,2Stag=1,Pstat=2,AQ=1,FOVED=0 /0, FSE=1,TWS=2,PT=0(0),RndrBK=0,GLTA=2D,EB=1720×1720
Kuten yllä olevasta lokituloksesta näet, suorittimen käyttö on 27 % ja grafiikkasuorittimen käyttö 72 %. Jos Wave SDK -versiosi on alle 6.0.0, on suositeltavaa päivittää uusimpaan versioon renderöinnin tehokkuuden ja muiden optimoinnin parantamiseksi.
VIVE OpenXR -sovelluksessa voit tarkistaa suorittimen ja grafiikkasuorittimen käytön seuraavalla komennolla.
# linuxissa/ubuntussa
$ adb logcat | grep CPU_USAGE
# powershellillä
$ adb logcat | Select-String - Pattern CPU_USAGE
Näet seuraavan lokin
Suorittimen keskim. Prosessori
Jos huomaat, että FPS ei pysty ylläpitämään näytön kuvanopeutta ja GPU:n käyttö on myös erittäin korkea, tyypillisesti yli 85 %, voit yrittää säätää silmäpuskurin resoluutiota (osio 3.1.2, osa 4.1.2) nähdäksesi, parantaako se FPS:ää. Jos tämä säätö johtaa parempaan
suorituskykyä, voimme päätellä, että ongelma on GPU-sidottu, ja keskittää optimointityömme sen mukaisesti.
Toisaalta, jos Eyebuffer Resolutionin säätäminen ei johda havaittavaan suorituskyvyn parantumiseen, pullonkaula on todennäköisesti CPU-sidottu, ja meidän tulisi keskittyä suorittimen suorituskyvyn optimointiin.
On myös mahdollista, että sovellus on sekä CPU- että GPU-sidottu samanaikaisesti. Tällaisissa tapauksissa optimointitoimia tulee soveltaa sekä suorittimeen että grafiikkasuorittimeen tasapainoisen suorituskyvyn parantamiseksi.
2.3 GPU-sidottu
Kun VR-sovellus on GPU-sidottu, se tarkoittaa, että GPU on ensisijainen pullonkaula, eikä se pysty pysymään sovelluksen renderöintivaatimuksissa. Voit lieventää grafiikkasuorittimeen liittyviä ongelmia harkitsemalla seuraavia suosituksia:
Käytä ensin profilointityökaluja, kuten RenderDoc tai Game Engine profiler (Unity Profiler, Unreal Insights) analysoidaksesi, missä GPU viettää suurimman osan ajastaan. Tunnista kalleimmat toiminnot ja keskity niiden optimointiin.
Native Developerissa voit käyttää RenderDocia tunnistamaan, mikä piirtokutsu aiheuttaa liiallista GPU-kuormitusta.
Unity Developerin osalta voit seurata Unitya tätä asiakirjaa tai analysoida renderöintisuorituskykyongelman RenderDocilla ja seurata Unityn grafiikan optimointidokumentaatiota saadaksesi ohjeita sovelluksesi optimointiin.
Unreal Developerille voit käyttää GPU-visualisoijaa tai RenderDocia analysoidaksesi renderöintisuorituskykyongelmaa ja seuraamalla Unreal Performance Guidelines -ohjeita sovelluksesi optimoinnissa.
Toiseksi, voit myös yrittää säätää tiettyjä Wave-ominaisuuksia tai asetuksia vähentääksesi GPU-kuormitusta.
- Aseta näytön virkistystaajuus hitaammaksi (osio 3.1.1, osa 4.1.1)
- Säädä silmäpuskurin resoluutiota (osio 3.1.2, osa 4.1.2), 14.1.1)
- Yritä ottaa Foveation käyttöön (osio 3.1.4, osa 4.1.4).
Jos sovelluksesi on myös MR-sovellus, voit säätää myös Passthrough-asetuksia.
- Säädä läpimenokuvan laatua pienemmäksi. (osio 3.2.1)
- Säädä läpimenokehystä hitaammin. (kohta 3.2.2).
Lisätietoja muista GPU-suorituskyvyn asetuksista on luvussa 2.6.
2.4 CPU-sidottu
Kun VR-sovellus on CPU-sidottu, se tarkoittaa, että prosessori on ensisijainen pullonkaula, harkitse seuraavia suosituksia:
Käytä ensin profilointityökaluja, kuten Systrace tai Game Engine profiler (Unity Profiler, Unreal Insights) analysoidaksesi ja tunnistaaksesi, mitkä koodisi osat kuluttavat eniten suoritinresursseja. Keskity näiden alueiden optimointiin ja muokkaa laskennallisesti intensiivisiä algoritmeja prosessorin kuormituksen vähentämiseksi.
- Native Developerille voit käyttää Systracea profiler projektisi.
- Unity Developerille voit käyttää CPU Usage Protafiler-moduuli löytääksesi prosessorin suorituskykyongelman.
- Unreal Developerille voit käyttää Unreal's Insightsia prosessorin suorituskykyongelmien selvittämiseen.
Toiseksi, voit myös yrittää säätää tiettyjä Wave-ominaisuuksia tai asetuksia vähentääksesi GPU-kuormitusta.
- Aseta näytön virkistystaajuus hitaammaksi (osio 3.1.1, osa 4.1.1)
- Käytä useitaView Renderöinti (osio 3.1.4, osio 4.1.4)
Jos sovelluksesi on myös MR-sovellus, voit säätää myös Passthrough-asetuksia.
- Säädä Passthrough Framerate hitaammin (osio 3.2.2).
Lisää muita prosessorin suorituskykyä koskevia asetuksia löydät luvusta 2.6.
2.5 Yhteenveto
Lopuksi olemme järjestäneet yllä olevan suorituskyvyn tarkistuksen työnkulun kuvaan 2-5-1. Aloita tarkistamalla sisällön FPS. Jos se on pienempi kuin näytön kehysnopeus tai pysyy epävakaana, analysoi GPU/CPU-käyttö määrittääksesi, onko se GPU-sidottu vai CPU-sidottu. Käytä lopuksi ammattilaistafiler tunnistaa mahdolliset suorituskykyongelmat tai säätää Waven ominaisuuksia tai asetuksia suorittimen suorituskyvyn optimoimiseksi.

2.6 Pikaopas, mitkä asetukset voivat parantaa CPU/GPU-latausta
Luettele SDK:n asetukset, jotka liittyvät CPU/GPU-lataukseen, kuten alla. Voit tarkistaa asianmukaiset optimointiasetukset sovelluksen pullonkaulan perusteella.
Liittyy prosessoriin:
- VIVE Wave SDK -asetus
o VR-sisältö
▪ 3.1.1 Näytön virkistystaajuus
▪ 3.1.4 Multi-View Renderöinti
▪ 3.1.6 Mukautuva laatu
▪ 3.1.7 Adaptive Motion Compositor
o MR-sisältö
▪ 3.2.2 Säädä läpivientikehystaajuutta - VIVE OpenXR SDK -asetus
o VR-sisältö
▪ 4.1.1 Näytön virkistystaajuus
▪ 4.1.4 Multi-View Renderöinti - Yhteinen optimointi
o 5.5 CPU Spike
Liittyy GPU:hun:
- VIVE Wave SDK -asetus
o VR-sisältö
▪ 3.1.1 Näytön virkistystaajuus
▪ 3.1.2 Eyebuffer Resolution
▪ 3.1.3 Multi-View Renderöinti
▪ 3.1.4 Foveaatio
▪ 3.1.5 FSE (Frame Sharpness Enhancement)
▪ 3.1.6 Mukautuva laatu
▪ 3.1.7 Adaptive Motion Compositor
▪ 3.1.8 Render Mask [Not Support Unreal]
o MR-sisältö
▪ 3.2.1 Säädä läpimenolaatua
▪ 3.2.2 Säädä läpivientikehystaajuutta - VIVE OpenXR SDK -asetus
o VR-sisältö
▪ 4.1.1 Näytön virkistystaajuus
▪ 4.1.2 Eyebuffer Resolution
▪ 4.1.3 Multi-View Renderöinti
▪ 4.1.4 Foveation [Not Support Unreal]
▪ 4.1.5 Render Mask [Not Support Unreal] - Yhteinen optimointi
o 5.1 Kytke High Performance Mode pois päältä
o 5.2 Multisampmolva
o 5.3 GMEM Load/Store
o 5.4 Koostumuskerros (Monikerros)
VIVE Wave -asetus
VIVE Wave on avoin alusta ja työkalusarja, jonka avulla voit helposti kehittää VR-sisältöä ja tarjoaa tehokkaan laiteoptimoinnin ulkopuolisille kumppaneille. VIVE Wave tukee Unity- ja Unreal-pelimoottoreita.
Optimoimme ja ratkaisemme jatkuvasti erilaisia virheitä, joten suosittelemme pitämään SDK:n ajan tasalla.
Tällä hetkellä VIVE Wave tukee vain OpenGL ES:ää. Tässä luetellaan ominaisuudet, jotka on järjestetty GPU:n suorituskyvyn vaikutuksen mukaan. Jaamme tämän kahteen osaan: VR-sisältöön ja MR-sisältöön.
3.1 VR-sisältö
3.1.1 Näytön virkistystaajuus
Higher refresh rates offer smoother visuals, but come at the cost of increased system load. Conversely, lower refresh rates reduce system load, but result in less smooth visuals. If App has CPU/GPU bound issue, you can try decreasing the display refresh rate to alleviate the issue.
- Natiivikehittäjä, katso WVR_SetFrameRate.
- Katso Unity-kehittäjä tästä oppaasta.
- Katso Unreal-kehittäjä tästä oppaasta.
3.1.2 Silmäpuskurin resoluutio
Eyebuffer-resoluutio on tekstuurin koko, jonka hahmonnettava sisältösovellus, renderöivä pintakuvio lähetetään ajon aikana lähetysprosessia varten ja esitetään HMD-näytöllä.
Suurempi silmäpuskurin koko voi johtaa selkeämpiin ja yksityiskohtaisempiin visuaalisiin kuviin, mutta se myös kuormittaa merkittävästi GPU:ta. Siksi on tärkeää löytää oikea tasapaino visuaalisen laadun ja suorituskyvyn välillä.
If App has GPU bound issue, you can try decreasing the eyebuffer size by multiply a scale factor. Howerver, we recommend not reducing the scale factor below 0.7, as this may result in unacceptable visual quality.
- Natiivikehittäjä, katso WVR_ObtainTextureQueue. Kun säädät kokoa, sinun tulee kertoa leveys ja korkeus suhteella.
- Katso Unity-kehittäjä WaveXRSettingsistä.
Vaihtoehtoisesti voit tehdä muutoksia koodilla kuten belwoe.
XRSettings.eyeTextureResolutionScale = ResolutionScaleValue; // C# - Katso Unreal-kehittäjä kohdasta SetPixelDensity.
3.1.3 Multi-View Renderöinti
Perinteisessä renderöinnissä piirrämme vasemman ja oikean silmän erikseen, mikä vaatii kaksi piirtokutsua samalle kohtaukselle. moni-View Renderöinti ratkaisee tämän ongelman suorittamalla vain yhden piirtokutsun.
This feature reduces CPU load by decreasing the number of draw calls. The GPU also has some benefits, vertex shader’s workload is also reduced as it doesn’t need to run an additional shader for the other eye, but the fragment shader’s workload remains unchanged since it still needs to evaluate each pixel for both eyes. We recommand enabling this feature.
- Natiivikehittäjille voit katsoa wvr_native_hellovr sample.
- Katso Unity-kehittäjälle Render-tila, yksi kierros on useitaview ominaisuus.
- Katso Unreal-kehittäjä tästä oppaasta.
3.1.4 Foveaatio
Foveated renderöinti on ensisijaisesti suunniteltu vähentämään grafiikkasuorittimen kuormitusta. Se vähentää kehyksen yksityiskohtia näytön reunassa ja säilyttää korkean resoluution yksityiskohdat kentän keskellä view. Jos sovelluksessa on GPU-sidottu ongelma, voit yrittää ottaa käyttöön Foveation-renderöinnin.

Foveaatiota käytettäessä on huomioitava jotain:
➢ Käyttäjät eivät yleensä huomaa vähentynyttä yksityiskohtaa reuna-alueilla käytettäessä oletusfoveation-tilaa. Mutta jos foveation perifeerinen laatu on asetettu liian alhaiseksi, se voi tulla käyttäjälle havaittavaksi.
➢ Foveaation vaikutukset voivat olla havaittavissa tietyillä tekstuurimateriaaleilla, jotka voivat kiinnittää käyttäjän huomion. Kehittäjien tulee olla tietoisia tästä ja arvioida se sen mukaisesti.
➢ Foveated renderöintiominaisuuden käyttöön ottaminen aiheuttaa kiinteät GPU-suorituskykykustannukset, jotka voivat vaihdella 1–6 % silmäpuskurin koosta riippuen. Kun näkymässä käytetään yksinkertaista varjostajaa, resurssien säästämisestä saatava suorituskyvyn hyöty voi olla pienempi kuin GPU:n kiinteät suorituskykykustannukset, mikä johtaa suorituskyvyn laskuun.
- Aloituskehittäjille on lisätietoja tästä oppaasta.
- Katso Unity-kehittäjä tästä oppaasta. Kun otat käyttöön jälkikäsittelyn tai HDR:n, foveaatiota ei voida hyödyntää täysin. Koska Unity renderöi objektit omaan luomaansa renderöintikuviointiin, eikä ajonaikaisesti luotuun nykyisen renderöintikuviointiin, joka tukee foveaatiota.
- Katso Unreal-kehittäjä tästä oppaasta. Erityisesti foveaatiota ei voida hyödyntää täysimääräisesti Multi-View Renderöinti, koska Unreal ei voi hahmontaa objekteja suoraan ajonaikaisesti luotuun renderöintikuviointiin, joka tukee foveaatiota.
3.1.5 Kehyksen terävyyden parannus (FSE)
FSE tarjoaa terävöitettävän renderöintituloksen ottamalla käyttöön terävöityssuodattimen, se voi tehdä sisällöstä selkeämpää ja olla varsin hyödyllinen tekstin selkeyden parantamisessa kohtauksessa. Jos sovelluksella on GPU-sidottu ongelma, voit harkita FSE:n poistamista käytöstä, jos se ei ole välttämätöntä.

- Aloituskehittäjille on lisätietoja tästä oppaasta.
- Katso Unity-kehittäjä tästä oppaasta.
- Katso Unreal-kehittäjä tästä oppaasta.
3.1.6 Mukautuva laatu
Akun säästämiseksi ja laitteen renderöintisuorituskyvyn ylläpitämiseksi tämä ominaisuus säätää automaattisesti CPU/GPU-kellon suorituskykytasoja niiden käytön perusteella. Lisäksi voidaan toteuttaa muita strategioita suorituskyvyn parantamiseksi, kuten automaattisesti ottaa Foveation käyttöön/pois käytöstä tai sisältö voi säätää itseään, jos se vastaanottaa suuren/matalan kuormituksen tapahtumia.
- Aloituskehittäjille on lisätietoja tästä oppaasta.
- Katso Unity-kehittäjä tästä oppaasta. Unity-laajennuksessamme silmäpuskurin kokoa voidaan säätää automaattisesti nykyisen suorituskyvyn perusteella; Tekstin koko suodattaa pois liian pienet skaalausarvot Tarkkuus-luettelosta. Suosittelemme tekstiä, jonka koko on vähintään 20 dmm.
- Katso Unreal-kehittäjä tästä oppaasta.
3.1.7 Adaptive Motion Compositor
Tämä ominaisuus on kokeellinen ominaisuus, joka sisältää UMC:n ja PMC:n. UMC vähentää kuvataajuutta puoleen ja ekstrapoloi uuden kuvan reaaliajassa visuaalisen tasaisuuden säilyttämiseksi. Sen mukana tulee kuitenkin jonkin verran latenssia, artefakteja ja GPU-latausta.
PMC käyttää ensisijaisesti Depth Bufferia, jotta ATW voi ottaa huomioon HMD-käännöksen, laajennettaessa 6-dof-kompensaatioon. Tämä ominaisuus voi vähentää käännösviivettä 1–2 kehyksellä, mutta lisätä grafiikkasuorittimen kuormitusta.
- Aloituskehittäjille on lisätietoja tästä oppaasta.
- Katso Unity-kehittäjä tästä oppaasta.
- Katso Unreal-kehittäjä tästä oppaasta.
3.1.8 Renderöintimaski [Ei tueta epärealistista]
Reunojen pikselit muuttuvat lähes näkymättömiksi vääristymisen jälkeen, renderöintimaski muuttaa näiden näkymättömien pikselien syvyyspuskuriarvoja. Jos otat syvyystestauksen käyttöön, varhaisen z:n vuoksi näitä näkymättömiä pikseleitä ei hahmonneta, mikä vähentää grafiikkasuorittimen kuormitusta. Tämä ominaisuus on hyödyllinen, jos näillä näkymättömillä alueilla on raskaasti kuormittavia renderöintiobjekteja; muuten, jos näillä alueilla ei ole renderöintiobjekteja, suosittelemme sen poistamista käytöstä, koska se kuluttaa vähän GPU:ta.
- Aloituskehittäjille on lisätietoja tästä oppaasta. Sinun tulee sitoa syvyyspuskuri ennen RenderMaskin kutsua; muuten se on tehoton.
- Katso Unity-kehittäjä tästä oppaasta.
- Unreal-kehittäjä ei tällä hetkellä tue Render Mask -ominaisuutta.
3.2 MR-sisältö
3.2.1 Säädä läpimenolaatua
Läpivientikuvan laadussa on 3 tasoa:
➢ WVR_PassthroughImageQuality_DefaultMode – sopii MR-sisällölle ilman erityistä kysyntää.
➢ WVR_PassthroughImageQuality_PerformanceMode – sopii MR-sisällölle, joka tarvitsee enemmän GPU-resursseja virtuaalisen kohtauksen hahmontamiseen.
➢ WVR_PassthroughImageQuality_QualityMode – sopii MR-sisällölle, jonka avulla käyttäjät näkevät ympäröivän ympäristön selkeästi, mutta sisällön virtuaalisessa kohtauksessa on oltava hienosäädettävä suorituskykyä varten.
Voit vähentää GPU:n käyttöä säätämällä Passthrough-laadun PerformanceMode-tilaan.
- Katso tästä oppaasta Native-, Uunity- tai Unreal-kehittäjä.
3.2.2 Säädä läpivientikehystaajuutta
Kuten näytön virkistystaajuus, korkeampi läpimenokuvataajuus tarjoaa tasaisemman visuaalisen kuvan, mutta sen kustannuksella on lisääntynyt järjestelmän kuormitus. Sitä vastoin pienemmät virkistystaajuudet vähentävät järjestelmän kuormitusta, mutta heikentävät visuaalista sisältöä. Läpivientikehystaajuudella on kaksi tilaa: tehostettu ja normaali.
- Alkuperäinen kehittäjä voi säätää läpimenon laatua käyttämällä WVR_SetPassthroughImageRate.
- Unity-kehittäjä voi muuttaa koodilla, esimampasetukset ovat seuraavat // C#
Interop.WVR_SetPassthroughImageQuality(WVR_PassthroughImageQuality.PerformanceMode); - Unreal-kehittäjälle asetusmenetelmä katso suunnitelmasolmu kuvasta 3-2-2.

VIVE OpenXR -asetus
OpenXR on Khronos Groupin kehittämä avoin standardi, joka tarjoaa yhteisen API-sarjan XR-sovellusten kehittämiseen, jotka toimivat useissa VR-laitteissa. VIVE Focus 3 ja VIVE XR Elite tukevat myös OpenXR:ää, VIVE OpenXR SDK tarjoaa kattavan tuen HTC VR -laitteille, jolloin kehittäjät voivat rakentaa Allin-Onea ja sisältöä Unity- ja Unreal-moottorilla HTC VR -laitteille. Optimoimme ja ratkaisemme jatkuvasti erilaisia vikoja, joten on suositeltavaa, että kehittäjät päivittävät laitteensa FOTA-version pitääkseen sen ajan tasalla. Tällä hetkellä VIVE OpenXR SDK tukee OpenGL ES:ää ja Vulkania.
4.1 VR-sisältö
4.1.1 Näytön virkistystaajuus
Käsite tässä on samanlainen kuin 3.1.1 Näytön virkistystaajuus.
- Natiivikehittäjä, katso XrEventDataDisplayRefreshRateChangedFB.
- Katso Unity-kehittäjä tästä oppaasta.
- Katso Unreal-kehittäjä tästä oppaasta.
4.1.2 Silmäpuskurin resoluutio
Käsite tässä on samanlainen kuin 3.1.2 Eyebuffer Resolution. Suosittelemme, että skaalauskerrointa ei lasketa alle 0.7:n, koska tämä voi johtaa kelpaamattomaan visuaaliseen laatuun.
- Lisätietoja alkuperäisistä kehittäjistä on kohdassa xrCreateSwapchain. Kun säädät kokoa, sinun tulee kertoa leveys ja korkeus suhteella. ,
- Katso Unity-kehittäjä seuraavasta esimample // C#
XRSettings.eyeTextureResolutionScale = 0.7f; //suositus 1.0f~0.7f - Katso epärealistiset asetukset tästä oppaasta.
4.1.3 Multi-View Renderöinti
Konsepti tässä on samanlainen kuin 3.1.3 Multi-View Renderöinti. Tämä ominaisuus vähentää prosessorin kuormitusta, GPU:lla on myös joitain etuja. Suosittelemme tämän ominaisuuden ottamista käyttöön.
- Native-kehittäjälle KhronosGroup tarjoaa OpenXR Multi-View example, katso tämä opas.
- Katso Unity-kehittäjälle Render-tila, yksi kierros on useitaview ominaisuus.
- Katso tästä oppaasta Unreal-kehittäjä, kuten VIVE Wave -asetuksissa.
4.1.4 Foveation [ei tue Unrealia]
Käsite tässä on samanlainen kuin 3.1.4 Foveation. Foveoitu renderöinti on ensisijaisesti suunniteltu vähentämään grafiikkasuorittimen kuormitusta, mutta sen salliminen aiheuttaa kiinteät GPU:n suorituskykykustannukset ja jos foveaatio on asetettu liian alhaiseksi ja käytetään tiettyjä materiaaleja tai tekstuureja, siitä voi tulla erittäin
käyttäjälle havaittavissa. Siksi on suositeltavaa ottaa ominaisuus käyttöön tai poistaa se käytöstä erityisvaatimustesi ja suorituskykynäkökohtiesi perusteella. Tällä hetkellä Foveated-toimintoa tuetaan vain VIVE OpenXR SDK:n OpenGL ES:ssä.
- Natiivikehittäjälle tämä ominaisuus on saatavilla, mutta tällä hetkellä ei esimamples tarjotaan.
- Katso Unity-kehittäjä tästä oppaasta.
- Unreal-kehittäjä ei tue tätä ominaisuutta tällä hetkellä.
4.1.5 Renderöintimaski [Ei tueta epärealistista]
Käsite tässä on samanlainen kuin 3.1.8 Render Mask.
- Natiivikehittäjä käyttää XrVisibilityMaskKHR:ää saadaksesi Meshin. Ennen kuin renderöit kohtauksen, käytä tätä Meshiä syvyyspuskurin arvojen täyttämiseen ennen näkymän renderöimistä.
- Unity-kehittäjälle Render Mask -ominaisuus on oletusarvoisesti käytössä OpenGL ES:ssä, ja se voidaan poistaa käytöstä seuraavalla koodilla; Vulkan ei tällä hetkellä tue tätä ominaisuutta. //C# UnityEngine.XR.XRSettings.occlusionMaskScale = 0.0f;
- Unreal-kehittäjä ei tällä hetkellä tue Render Mask -ominaisuutta.
4.2 MR-sisältö
OpenXR ei tällä hetkellä tue läpimenolaadun ja kehystaajuuden asetusta. Jatkamme Passthrough-ominaisuuden optimointia ja korjaamista, joten suosittelemme, että kehittäjät päivittävät laitteen FOTA-version pitääkseen sen ajan tasalla.
Yhteinen optimointi
5.1 Kytke High Performance Mode pois päältä
"High performance mode" -tilan poistaminen käytöstä voi pienentää laitteen näytön kokoa ja vähentää siten GPU:n käyttöä. Haittapuolena on näytön resoluution heikkeneminen. Voit tasapainottaa laadun ja suorituskyvyn päättääksesi, otatko sen käyttöön.
VIVE Focus 3:n asetuspaikka on esitetty kuvassa 5-1-1:

VIVE XR Eliten asetuspaikka on esitetty kuvassa 5-1-2:

5.2 Multiaampling Anti-Aliasing
Multitampling is an anti-aliasing technique used to smooth out jagged edges, usually is accelerated through hardware, which incurs GPU performance cost. We recommend not setting MSAA higher than 2x because more hight value will consume more gpu usage.
- Alkuperäiselle kehittäjälle MSAA OpenGL ES exsample voi viitata tähän; MSAA Vulkan exampler voi viitata tähän.
Adreno GPU tarjoaa laajennuksen, joka optimoi MSAA:n. - Katso Unity-kehittäjä tästä kiltasta.
- For Unreal developer, refer to this guild. Unreal also has provide post processing anti-aliasing, refer to this guild.
5.3 GMEM Lataa/Säilytä
Adreno GPU -arkkitehtuurissa on ominaisuus, jossa renderöintikohteen sitomisen yhteydessä, jos renderöintikohde ei tyhjene tai mitätöi, aina renderöinnin yhteydessä renderöintikohteen arvot ladataan grafiikkamuistiin, jota kutsutaan GMEM Loadiksi. Jos aiempia arvoja ei tarvita, tyhjennä tai mitätöi Render Target ennen renderöintiä, voit välttää tämän tilanteen parantaaksesi GPU:n suorituskykyä.
Voit välttää GMEM-latauksen seuraavilla tavoilla. OpenGL ES:ssä FBO:n sitomisen jälkeen voit kutsua glClear- ja glClearDepth-komentoja väri-, syvyys- ja kaavainpuskurin tyhjentämiseksi tai kutsua glInvalidateFramebuffer-komentoa mitätöidäksesi määritetyn renderöintikohteen. Vulkanissa lisäohjeita ei tarvita; Voit määrittää nimenomaisesti, tyhjennetäänkö liite ennen käyttöä VkAttachmentDescription.loadOpissa.
Vastaavasti ruuturenderöinnin tuloksen tallentamista takaisin päämuistiin grafiikkamuistista kutsutaan GMEM Storeksi; tämä operaatio on myös kallis GPU:lle. Tämän välttämiseksi suosittelemme vain vaadittujen renderöintikohteiden sitomista tarpeettomien Store-toimintojen estämiseksi.
5.4 Koostumuskerros (Monikerros)
Monikerroksisella näytöllä näytettävillä tekstuureilla on parempi visuaalinen laatu. Tämä ominaisuus kuitenkin lisää merkittävästi GPU:n suorituskykyä kerrosten lukumäärän ja pintakuvioiden koon myötä. Suosittelemme, ettei yli kolme kerrosta.
- Alkuperäiselle kehittäjälle
o VIVE Wave SDK käyttää WVR_SubmitFrameLayersia tietojen välittämiseen jokaiselle tasolle.
o VIVE OpenXR SDK sijoittaa kerrostiedot XrFrameEndInfoon ja lähettää sen xrEndFramen kautta. - Unityn kehittäjälle
o VIVE Wave SDK -asetukset, katso tämä opas,
o VIVE OpenXR -asetukset, katso tämä opas. - Unreal-kehittäjälle
o VIVE Wave SDK -asetukset, katso tämä opas.
o VIVE OpenXR -asetukset, katso tämä opas.
5.5 CPU Spike
Kun suorittimen kuormitus on raskaampaa, jotkin taustaprosessoivat säikeitä, joilla on korkea prioriteetti, se saattaa keskeyttää alkuperäisen suorituksen. Emme voi taata, että sisältösovellusta ei keskeytä muu viestiketju.
If such issues arise, you can try increasing the thread priority to see if it resolves the problem. But if you change the thread configuration to optimize for devices, you need to check if this has any negative impact.
- Katso Unity Developerin osalta Android-säikeen määritysominaisuus. Jos käytät VIVE Wave SDK:ta, meillä on WaveXRSettingsissä ominaisuus, jonka avulla voit säätää prioriteettia, kuten kuvassa 5-5-2. Pienempi arvo edustaa korkeampaa prioriteettia.

- Epätodellinen ei tapaa muuttaa pelisäiettä, renderöintisäiettä ja RHI-säikeen prioriteettia ulkoisten asetusten kautta, ellet muuta moottorin koodia.
Copyright © 2024 HTC Corporation. Kaikki oikeudet pidätetään
Asiakirjat / Resurssit
![]() | VR-renderöinnin suorituskyky |
Viitteet
- Käyttöopasmanual.tools
