
Izvedba VR renderiranja
Podešavanje i optimizacije
Uvod
Postizanje optimalnog VR iskustva na hardveru s ograničenim resursima ključno je za pružanje glatkog i ugodnog korisničkog iskustva. Ako brzina osvježavanja sadržaja padne ili je nestabilna ispod brzine osvježavanja uređaja, to će dovesti do podrhtavanja i zastajkivanja slike, mučnine kretanja itd., što će na kraju negativno utjecati na korisničko iskustvo. Stoga je optimizacija performansi sadržaja vrlo važna za osiguranje ugodnog iskustva.
Prije početka podešavanja performansi, važno je razumjeti gdje su uska grla performansi kako bi se izbjeglo neučinkovito podešavanje. Ovaj dokument je osmišljen kako bi pomogao programerima da identificiraju uska grla performansi i ponude rješenja za rješavanje problema s performansama renderiranja.
Dokument je organiziran u sljedeće odjeljke:
- Poglavlje 2: Identificiranje uskih grla – Ovaj odjeljak pomaže programerima u identificiranju uskih grla.
- Poglavlje 3 i 4: Postavke VIVE Wave i VIVE OpenXR – Ovi odjeljci opisuju specifične postavke koje mogu utjecati na performanse CPU-a/GPU-a za VIVE Wave i OpenXR aplikacije. Razvojni programeri mogu eksperimentirati s omogućavanjem ili onemogućavanjem ovih značajki na temelju uskih grla u performansama kako bi utvrdili postoji li neko poboljšanje.
- Poglavlje 5: Uobičajena optimizacija – Ovaj odjeljak dijeli neke uobičajene prakse i iskustva optimizacije.
Prepoznajte usko grlo
Kada se HMD kreće, ako VR/MR aplikacija ima podrhtavanje okvira ili crne rubove itd., to je obično uzrokovano problemom s lošim performansama renderiranja. Problemi s performansama renderiranja obično se mogu kategorizirati u 2 vrste: vezani za CPU ili vezani za GPU. Razumijevanje koje vrste vezanih vezanih vezanih za vašu aplikaciju vrlo je važno na početku kako biste izbjegli neučinkovito podešavanje.
U ovom poglavlju nudimo jednostavne korake koji vam omogućuju brzo prepoznavanje problema s performansama.
2.1 Provjerite FPS pri renderiranju sadržaja
Prvo, počinjemo provjerom FPS-a sadržaja, odnosno broja sličica koje sadržaj može prikazati u sekundi. Treba ga održavati na razini brzine sličica zaslona i stabilnim. U suprotnom može uzrokovati podrhtavanje sličica.
Ako vaš SDK aplikacije koristi VIVE WAVE SDK 6.0.0 ili noviji, možete koristiti sljedeću adb naredbu za provjeru FPS-a. DK 6.0.0
$adb Logcat -s VRMetric
Vidjet ćete sljedeće podatke zapisnika.
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“ Prvi broj predstavlja FPS sadržaja, dok drugi broj predstavlja brzinu kadrova na zaslonu.
Ako je verzija vašeg Wave SDK-a starija od 6.0.0, preporučuje se nadogradnja na najnoviju verziju kako biste poboljšali performanse renderiranja i ostale optimizacije.
Ako je SDK vaše aplikacije izgrađen s VIVE OpenXR-om, možete koristiti sljedeću adb naredbu za provjeru FPS-a.
$adb Logcat -s RENDER_ATW
Vidjet ćete sljedeće podatke zapisnika
RENDER_ATW: [FPS] nova tekstura: 90.00
RENDER_ATW: [FPS] R prisutan: 90.00 preskoči: 0 317, -0.0155 0.805527, 0.006788)
RENDER_ATW: [FPS] L prisutan:90.00 preskok:0 (0.592301, -0.015502, 0.805539, 0.006773)
Broj koji slijedi iza "nove teksture" predstavlja trenutni FPS sadržaja. Broj koji slijedi iza "prisutno R" i "prisutno L" predstavlja brzinu kadrova u sekundi.
Ponekad se FPS sadržaja i broj sličica u sekundi zaslona mogu malo razlikovati.
Na primjeramptj. u gornjem slučaju, 89.8 FPS može se smatrati kao 90 FPS.
Ako je FPS sadržaja aplikacije stalno niži od broja sličica u sekundi na zaslonu ili ostaje nestabilan, to ukazuje na problem s performansama renderiranja. Stoga je sljedeći korak utvrditi dolazi li usko grlo iz CPU-a ili GPU-a.
2.2 Provjerite korištenje CPU-a i GPU-a
Ako vaš SDK aplikacije koristi VIVE WAVE SDK 6.0.0 ili noviji, možete koristiti sljedeću adb naredbu za provjeru FPS-a.
$adb logcat -s VRMetric
Vidjet ćete sljedeće podatke zapisnika.
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
Kao što možete vidjeti u gornjem rezultatu zapisnika, iskorištenost CPU-a je 27%, a iskorištenost GPU-a je 72%. Ako je vaša verzija Wave SDK-a starija od 6.0.0, preporučuje se nadogradnja na najnoviju verziju kako bi se poboljšale performanse renderiranja i ostale optimizacije.
Za aplikaciju VIVE OpenXR možete koristiti sljedeću naredbu za provjeru korištenja CPU-a i GPU-a.
# na linuxu/ubuntuu
$ adb logcat | grep CPU_USAGE
# na PowerShellu
$ adb logcat | Select-String -Pattern CPU_USAGE
Vidjet ćete sljedeći zapisnik
Prosj. CPU CPU0 CPU1 CPU2 CPU3 CPU4 CPU5 CPU6 CPU7 GPU CPU_USAGE [OPTEREĆENJE] 25.67% 32.22% 25.29% 30.77% 29.35% 21.35% 22.09% 18.39% 24.14% 73%
Ako primijetite da FPS ne može održati broj sličica u sekundi na zaslonu, a iskorištenost GPU-a je također vrlo visoka, obično prelazi 85%, možete pokušati prilagoditi Eyebuffer Resolution (odjeljak 3.1.2, odjeljak 4.1.2) kako biste vidjeli hoće li to poboljšati FPS. Ako ova prilagodba dovede do boljeg
performansi, možemo zaključiti da je problem vezan uz GPU i u skladu s tim usmjeriti naše optimizacijske napore.
S druge strane, ako podešavanje Eyebuffer Resolution ne rezultira primjetnim poboljšanjem performansi, usko grlo je vjerojatno vezano uz CPU i trebali bismo se usredotočiti na optimizaciju performansi CPU-a.
Također je moguće da je aplikacija istovremeno vezana i za CPU i za GPU. U takvim slučajevima, optimizacijske napore treba primijeniti i na CPU i na GPU kako bi se postigla uravnotežena poboljšanja performansi.
2.3 Vezano za GPU
Kada je VR aplikacija vezana za GPU, to znači da je GPU primarno usko grlo i ne može pratiti zahtjeve aplikacije za renderiranje. Kako biste ublažili probleme vezane za GPU, razmotrite sljedeće preporuke:
Prvo, koristite alate za profiliranje poput RenderDoc-a ili Game Engine Pro-afiler (Unity Profiler, Unreal Insights) za analizu gdje GPU provodi najviše vremena. Identificirajte najskuplje operacije i usredotočite se na njihovu optimizaciju.
Za Native Developere, možete koristiti RenderDoc za prepoznavanje koji poziv crtanja uzrokuje prekomjerno opterećenje GPU-a.
Za Unity Developere, možete slijediti ovaj Unity dokument ili koristiti RenderDoc za analizu problema s performansama renderiranja i slijediti Unity dokumentaciju o optimizaciji grafike za smjernice za optimizaciju vaše aplikacije.
Za Unreal Developer, možete koristiti GPU Visualizer ili RenderDoc za analizu problema s performansama renderiranja i slijediti Unreal Performance Guidelines za smjernice za optimizaciju vaše aplikacije.
Drugo, možete pokušati prilagoditi određene značajke ili postavke Wavea kako biste smanjili opterećenje GPU-a.
- Postavite sporiju brzinu osvježavanja zaslona (odjeljak 3.1.1, odjeljak 4.1.1)
- Prilagodite rezoluciju međuspremnika oka (odjeljak 3.1.2, odjeljak 4.1.2), 14.1.1)
- Pokušajte omogućiti Foveation (odjeljak 3.1.4, odjeljak 4.1.4).
Ako je vaša aplikacija ujedno i MR aplikacija, možete prilagoditi i postavke Propusnosti.
- Smanjite kvalitetu prolazne slike (odjeljak 3.2.1).
- Usporite brzinu prijenosa sličica u sekundi (odjeljak 3.2.2).
Za više postavki o performansama GPU-a, možete pogledati Poglavlje 2.6.
2.4 Ograničeno na CPU
Kada je VR aplikacija ograničena na CPU, to znači da je CPU primarno usko grlo, razmotrite sljedeće preporuke:
Prvo, koristite alate za profiliranje poput Systrace ili Game Engine Profiler (Unity Profiler, Unreal Insights) za analizu i identifikaciju dijelova vašeg koda koji troše najviše CPU resursa. Usredotočite se na optimizaciju tih područja i refaktorirajte računalno intenzivne algoritme kako biste smanjili opterećenje CPU-a.
- Za izvorne razvojne programere, možete koristiti Systrace za profesionalnufiler vaš projekt.
- Za Unity Developere možete koristiti CPU Usage Profiler modul za pronalaženje problema s performansama CPU-a.
- Za Unreal Developere, možete koristiti Unreal's Insights za pronalaženje problema s performansama CPU-a.
Drugo, možete pokušati prilagoditi određene značajke ili postavke Wavea kako biste smanjili opterećenje GPU-a.
- Postavite sporiju brzinu osvježavanja zaslona (odjeljak 3.1.1, odjeljak 4.1.1)
- Koristite višestrukoView Renderiranje (odjeljak 3.1.4, odjeljak 4.1.4)
Ako je vaša aplikacija ujedno i MR aplikacija, možete prilagoditi i postavke Propusnosti.
- Podesite Passthrough Framerate na sporije (odjeljak 3.2.2).
Za više postavki o performansama CPU-a, možete pogledati Poglavlje 2.6.
2.5 Sažetak
Konačno, organizirali smo gore navedeni tijek rada za provjeru performansi na slici 2-5-1. Započnite provjerom FPS-a sadržaja. Ako je niži od brzine sličica u sekundi na zaslonu ili ostane nestabilan, analizirajte korištenje GPU-a/CPU-a kako biste utvrdili je li vezano uz GPU ili CPU. Na kraju, upotrijebite profesionalni...filer za identifikaciju potencijalnih problema s performansama ili prilagodbu značajki ili postavki Wavea radi optimizacije performansi CPU-a.

2.6 Kratki pregled Koje postavke mogu poboljšati učitavanje CPU-a/GPU-a
Navedite postavke SDK-a koje se odnose na opterećenje CPU-a/GPU-a kao što je prikazano u nastavku. Možete provjeriti relevantne postavke optimizacije na temelju uskog grla aplikacije.
Vezano za CPU:
- Postavka VIVE Wave SDK-a
VR sadržaj
▪ 3.1.1 Brzina osvježavanja zaslona
▪ 3.1.4 VišestrukoView Renderiranje
▪ 3.1.6 Adaptivna kvaliteta
▪ 3.1.7 Adaptivni kompozitor gibanja
o MR sadržaju
▪ 3.2.2 Podešavanje brzine sličica u sekundi prolaza - Postavka VIVE OpenXR SDK-a
VR sadržaj
▪ 4.1.1 Brzina osvježavanja zaslona
▪ 4.1.4 VišestrukoView Renderiranje - Uobičajena optimizacija
o 5.5 CPU Spike
Vezano za GPU:
- Postavka VIVE Wave SDK-a
VR sadržaj
▪ 3.1.1 Brzina osvježavanja zaslona
▪ 3.1.2 Rezolucija očnog međuspremnika
▪ 3.1.3 VišestrukoView Renderiranje
▪ 3.1.4 Foveacija
▪ 3.1.5 Poboljšanje oštrine kadra (FSE)
▪ 3.1.6 Adaptivna kvaliteta
▪ 3.1.7 Adaptivni kompozitor gibanja
▪ 3.1.8 Render Mask [Not Support Unreal]
o MR sadržaju
▪ 3.2.1 Podešavanje kvalitete prolaza
▪ 3.2.2 Podešavanje brzine sličica u sekundi prolaza - Postavka VIVE OpenXR SDK-a
VR sadržaj
▪ 4.1.1 Brzina osvježavanja zaslona
▪ 4.1.2 Rezolucija očnog međuspremnika
▪ 4.1.3 VišestrukoView Renderiranje
▪ 4.1.4 Foveation [Not Support Unreal]
▪ 4.1.5 Render Mask [Not Support Unreal] - Uobičajena optimizacija
o 5.1 Isključite način rada visokih performansi
o 5.2 Višestrukiampvrijesak
o 5.3 Učitavanje/pohranjivanje GMEM-a
o 5.4 Sloj kompozicije (više slojeva)
Postavka VIVE Wavea
VIVE Wave je otvorena platforma i skup alata koji vam omogućuje jednostavan razvoj VR sadržaja i pruža visokoučinkovitu optimizaciju uređaja za partnere trećih strana. VIVE Wave podržava Unity i Unreal game engine.
Kontinuirano optimiziramo i ispravljamo razne greške, stoga preporučujemo ažuriranje SDK-a.
Trenutno, VIVE Wave podržava samo OpenGL ES. Ovdje su navedene značajke poredane prema utjecaju na performanse GPU-a. Podijelit ćemo ih u dva dijela: VR sadržaj i MR sadržaj.
3.1 VR sadržaj
3.1.1 Brzina osvježavanja zaslona
Veće brzine osvježavanja nude glatkiju sliku, ali dolaze po cijenu povećanog opterećenja sustava. Suprotno tome, niže brzine osvježavanja smanjuju opterećenje sustava, ali rezultiraju manje glatkom slikom. Ako aplikacija ima problem s ograničenjem CPU-a/GPU-a, možete pokušati smanjitiasinsmanjite brzinu osvježavanja zaslona kako biste ublažili problem.
- Za izvorne razvojne programere, pogledajte WVR_SetFrameRate.
- Za Unity developere, pogledajte ovaj vodič.
- Za Unreal developere, pogledajte ovaj vodič.
3.1.2 Rezolucija očnog međuspremnika
Rezolucija očnog međuspremnika je veličina teksture koju aplikacija treba prikazati. Prikazana tekstura bit će poslana u okruženje za izvođenje radi objavljivanja i prikazivanja na HMD zaslonu.
Iako veća veličina međuspremnika oka može rezultirati jasnijim i detaljnijim vizualnim prikazima, ona također značajno opterećuje GPU. Stoga je pronalaženje prave ravnoteže između vizualne kvalitete i performansi ključno.
Ako aplikacija ima problema s vezanjem na GPU, možete pokušati decreasinPomnožite veličinu očnog međuspremnika s faktorom skaliranja. Međutim, preporučujemo da ne smanjujete faktor skaliranja ispod 0.7, jer to može rezultirati neprihvatljivom vizualnom kvalitetom.
- Za izvorne razvojne programere, pogledajte WVR_ObtainTextureQueue. Prilikom podešavanja veličine, trebali biste pomnožiti širinu i visinu s omjerom.
- Za Unity developere, pogledajte WaveXRSettings.
Alternativno, promjene možete napraviti putem koda kao što je prikazano ispod.
XRSettings.eyeTextureResolutionScale = ResolutionScaleValue; // C# - Za Unreal developere, pogledajte SetPixelDensity.
3.1.3 VišestrukiView Renderiranje
U tradicionalnom renderiranju crtamo lijevo i desno oko odvojeno, što zahtijeva dva poziva crtanja za istu scenu.View Renderiranje rješava ovaj problem izvršavanjem samo jednog poziva za crtanje.
Ova značajka smanjuje opterećenje CPU-a zaasing broj poziva za crtanje. GPU također ima neke prednosti, opterećenje vertex shadera je također smanjeno jer ne treba pokretati dodatni shader za drugo oko, ali opterećenje fragment shadera ostaje nepromijenjeno jer i dalje treba procijeniti svaki piksel za oba oka. Preporučujemo omogućavanje ove značajke.
- Za native developere, možete se pozvati na wvr_native_hellovrample.
- Za Unity developere, pogledajte Render Mode, jedan prolaz je višestrukiview značajka.
- Za Unreal developere, pogledajte ovaj vodič.
3.1.4 Foveacija
Foveated renderiranje prvenstveno je dizajnirano za smanjenje opterećenja GPU-a. Smanjuje detalje kadra na periferiji zaslona i održava detalje visoke rezolucije u središtu polja. viewAko aplikacija ima problema s vezanjem uz GPU, možete pokušati omogućiti Foveation renderiranje.

Prilikom korištenja foveacije potrebno je obratiti pozornost na sljedeće:
➢ Korisnici obično ne primjećuju smanjene detalje u perifernim područjima primjenom zadanog načina foveacije. Ali ako je periferna kvaliteta foveacije postavljena prenisko, to bi moglo postati uočljivo za korisnika.
➢ Učinci foveacije mogu biti uočljiviji kod određenih materijala tekstura, što bi moglo privući pažnju korisnika. Programeri bi trebali biti svjesni toga i procijeniti to u skladu s tim.
➢ Omogućavanje funkcije foveated renderiranja uzrokuje fiksni trošak performansi GPU-a, koji može varirati između 1% i 6% ovisno o veličini međuspremnika oka. Prilikom korištenja jednostavnog shadera u sceni, dobitak performansi od uštede resursa može biti manji od fiksnog troška performansi GPU-a, što rezultira padom performansi.
- Za izvorne razvojne programere, pogledajte ovaj vodič.
- Za Unity developere, pogledajte ovaj vodič. Važno je napomenuti da kada omogućite naknadnu obradu ili HDR, foveacija se ne može u potpunosti iskoristiti. Jer će Unity renderirati objekte na vlastitu generiranu teksturu renderiranja, a ne na teksturu renderiranja generiranu tijekom izvođenja koja podržava foveaciju.
- Za Unreal developere, pogledajte ovaj vodič. Posebno je važno napomenuti da se foveacija ne može u potpunosti iskoristiti na Multi-View Renderiranje, jer Unreal ne može izravno renderirati objekte na teksturu renderiranja generiranu tijekom izvođenja koja podržava foveaciju.
3.1.5 Poboljšanje oštrine kadra (FSE)
FSE pruža izoštravanje rezultata renderiranja uvođenjem filtera za izoštravanje, što može učiniti sadržaj jasnijim i biti vrlo korisno za poboljšanje jasnoće teksta u sceni. Ako aplikacija ima problema s vezanjem uz GPU, možete razmisliti o onemogućavanju FSE-a ako to nije neophodno.

- Za izvorne razvojne programere, pogledajte ovaj vodič.
- Za Unity developere, pogledajte ovaj vodič.
- Za Unreal developere, pogledajte ovaj vodič.
3.1.6 Adaptivna kvaliteta
Kako bi se uštedjela baterija i održale performanse renderiranja uređaja, ova značajka automatski prilagođava razine performansi takta CPU/GPU-a na temelju njihove upotrebe. Osim toga, mogu se implementirati i druge strategije za poboljšanje performansi, kao što je automatsko omogućavanje/onemogućavanje Foveation-a ili prilagođavanje sadržaja ako prima događaje visokog/niskog opterećenja.
- Za izvorne razvojne programere, pogledajte ovaj vodič.
- Za Unity developere, pogledajte ovaj vodič. U našem Unity dodatku, veličina međuspremnika oka može se automatski prilagoditi na temelju trenutnih performansi; Veličina teksta će filtrirati vrijednosti skale koje su premale u popisu Rezolucija. Preporučujemo tekst veličine najmanje 20 dmm ili veće.
- Za Unreal developere, pogledajte ovaj vodič.
3.1.7 Adaptivni kompozitor gibanja
Ova je značajka eksperimentalna i uključuje UMC i PMC. UMC će smanjiti broj sličica u sekundi za pola i ekstrapolirati novi kadar u stvarnom vremenu kako bi se održala vizualna glatkoća. Međutim, dolazi s određenom latencijom, artefaktima i opterećenjem GPU-a.
PMC prvenstveno koristi Depth Buffer kako bi ATW mogao uzeti u obzir HMD translaciju, proširenu na kompenzaciju od 6 stupnjeva slobode. Ova značajka može smanjiti latenciju translacije za 1~2 okvira, ali povećati opterećenje GPU-a.
- Za izvorne razvojne programere, pogledajte ovaj vodič.
- Za Unity developere, pogledajte ovaj vodič.
- Za Unreal developere, pogledajte ovaj vodič.
3.1.8 Maska za renderiranje [Ne podržava Unreal]
Pikseli na rubovima postaju gotovo nevidljivi nakon izobličenja, maska za renderiranje mijenja vrijednosti međuspremnika dubine tih nevidljivih piksela. Ako omogućite testiranje dubine, zbog early-z, ovi nevidljivi pikseli neće se renderirati, čime se smanjuje opterećenje GPU-a. Ova je značajka korisna ako u tim nevidljivim područjima postoje objekti za renderiranje s velikim opterećenjem; u suprotnom, ako u tim područjima nema objekata za renderiranje, preporučuje se da je onemogućite jer će potrošiti malu količinu energije GPU-a.
- Za izvorne razvojne programere, pogledajte ovaj vodič. Morate povezati međuspremnik dubine prije poziva RenderMask; inače će biti neučinkovito.
- Za Unity developere, pogledajte ovaj vodič.
- Za Unreal developere, trenutno ne podržava značajku Render Mask.
3.2 Sadržaj MR-a
3.2.1 Podešavanje kvalitete prolaza
Postoje 3 razine za kvalitetu prolazne slike:
➢ WVR_PassthroughImageQuality_DefaultMode – pogodno za MR sadržaj bez specifičnog zahtjeva.
➢ WVR_PasthroughImageQuality_PerformanceMode – pogodno za MR sadržaj kojem je potrebno više GPU resursa za renderiranje virtualne scene.
➢ WVR_PassthroughImageQuality_QualityMode – pogodno za MR sadržaj koji korisnicima omogućuje jasan pregled okolnog okruženja, ali virtualna scena sadržaja mora imati preciznije podešavanje za performanse.
Kvalitetu prolaza možete prilagoditi na PerformanceMode kako biste smanjili korištenje GPU-a.
- Za Native, Uunity ili Unreal developere, pogledajte ovaj vodič.
3.2.2 Podešavanje brzine sličica u sekundi prolaza
Poput brzine osvježavanja zaslona, veća brzina prijenosa sličica u sekundi nudi glatkiju sliku, ali dolazi po cijenu povećanog opterećenja sustava. Suprotno tome, niže brzine osvježavanja smanjuju opterećenje sustava, ali rezultiraju manje glatkom slikom. Postoje dva načina rada brzine prijenosa sličica u sekundi: Boost i Normal.
- Za izvorne programere, kvaliteta prolaza može se prilagoditi pomoću WVR_SetPassthroughImageRate.
- Za Unity developera, može se promijeniti putem koda, npr.amppostavke su sljedeće // C#
Interop.WVR_SetPassthroughImageQuality(WVR_PassthroughImageQuality.PerformanceMode); - Za Unreal developera, metoda postavljanja vidi čvor nacrta na slici 3-2-2.

Postavka VIVE OpenXR-a
OpenXR je otvoreni standard koji pruža zajednički skup API-ja za razvoj XR aplikacija koje rade na širokom rasponu VR uređaja, a razvila ga je Khronos Grupa. VIVE Focus 3 i VIVE XR Elite također podržavaju OpenXR, a VIVE OpenXR SDK pruža sveobuhvatnu podršku za HTC VR uređaje, omogućujući programerima izradu All-in-One sustava i sadržaja s Unityjem i Unreal engineom na HTC VR uređajima. Kontinuirano optimiziramo i rješavamo razne greške, stoga se programerima preporučuje da ažuriraju FOTA verziju svojih uređaja kako bi bila ažurna. Trenutno, VIVE OpenXR SDK podržava OpenGL ES i Vulkan.
4.1 VR sadržaj
4.1.1 Brzina osvježavanja zaslona
Koncept je ovdje sličan onome u odjeljku 3.1.1 Brzina osvježavanja zaslona.
- Za izvorne razvojne programere, pogledajte XrEventDataDisplayRefreshRateChangedFB.
- Za Unity developere, pogledajte ovaj vodič.
- Za Unreal developere, pogledajte ovaj vodič.
4.1.2 Rezolucija očnog međuspremnika
Koncept je ovdje sličan onome u odjeljku 3.1.2 Rezolucija očnog međuspremnika. Preporučujemo da se faktor skaliranja ne smanjuje ispod 0.7, jer to može rezultirati neprihvatljivom vizualnom kvalitetom.
- Za izvorne programere, pogledajte xrCreateSwapchain. Prilikom podešavanja veličine, trebali biste pomnožiti širinu i visinu s omjerom.
- Za Unity developere, pogledajte sljedeći primjerample // C#
XRSettings.eyeTextureResolutionScale = 0.7f; //preporučeno 1.0f~0.7f - Za Unreal postavke, pogledajte ovaj vodič.
4.1.3 VišestrukiView Renderiranje
Koncept ovdje je sličan onome u 3.1.3 VišestrukoView Renderiranje. Ova značajka smanjuje opterećenje CPU-a, a GPU također ima neke prednosti. Preporučujemo omogućavanje ove značajke.
- Za izvorne developere, KhronosGroup pruža OpenXR Multi-View example, pogledajte ovaj vodič.
- Za Unity developere, pogledajte Render Mode, jedan prolaz je višestrukiview značajka.
- Za postavke u Unreal Developeru, kao i za VIVE Wave, pogledajte ovaj vodič.
4.1.4 Foveation [Ne podržava Unreal]
Koncept ovdje je sličan onome u verziji 3.1.4 Foveacija. Foveirano renderiranje prvenstveno je osmišljeno za smanjenje opterećenja GPU-a, ali njegovo omogućavanje uzrokovat će fiksni trošak performansi GPU-a, a ako je foveacija postavljena prenisko i koriste se određeni materijali ili teksture, može postati vrlo...
uočljivo korisniku. Stoga je preporučljivo omogućiti ili onemogućiti značajku na temelju vaših specifičnih zahtjeva i razmatranja performansi. Trenutno je funkcionalnost Foveated podržana samo u OpenGL ES na VIVE OpenXR SDK-u.
- Za izvorne razvojne programere ova je značajka dostupna, ali trenutno nemaamples su dostupni.
- Za Unity developere, pogledajte ovaj vodič.
- Za Unreal developere, trenutno ne podržava ovu značajku.
4.1.5 Maska za renderiranje [Ne podržava Unreal]
Koncept ovdje je sličan onome u verziji 3.1.8 Render Mask.
- Za native developere, koristite XrVisibilityMaskKHR za dobivanje mreže. Prije renderiranja scene, koristite ovu mrežu za popunjavanje vrijednosti međuspremnika dubine prije renderiranja scene.
- Za Unity developere, značajka Render Mask je prema zadanim postavkama omogućena za OpenGL ES i može se onemogućiti sljedećim kodom; Vulkan trenutno ne podržava ovu značajku. //C# UnityEngine.XR.XRSettings.occlusionMaskScale = 0.0f;
- Za Unreal developere, trenutno ne podržava značajku Render Mask.
4.2 Sadržaj MR-a
OpenXR trenutno ne podržava postavljanje kvalitete prijenosa i broja sličica u sekundi. Nastavit ćemo optimizirati i popravljati značajku prijenosa, stoga preporučujemo da programeri ažuriraju verziju FOTA-e uređaja kako bi bila ažurna.
Uobičajena optimizacija
5.1 Isključite način rada visokih performansi
Isključivanje "Načina visokih performansi" može smanjiti veličinu zaslona uređaja, čime se smanjuje korištenje GPU-a. Nedostatak je smanjenje razlučivosti zaslona. Možete uravnotežiti kvalitetu i performanse kako biste odlučili hoćete li ga omogućiti.
Mjesto postavljanja za VIVE Focus 3 prikazano je na slici 5-1-1:

Mjesto postavljanja za VIVE XR Elite prikazano je na slici 5-1-2:

5.2 MultisampLing Anti-Aliasing
MultisampLing je anti-aliasing tehnika koja se koristi za zaglađivanje nazubljenih rubova obično se ubrzava hardverom, što uzrokuje troškove performansi GPU-a. Preporučujemo da ne postavljate MSAA više od 2x jer će veća vrijednost hight trošiti više GPU-a.
- Za izvorne programere, MSAA OpenGL ES exsample se može odnositi na ovo; MSAA Vulkan exampler se može na ovo pozvati.
Adreno GPU pruža proširenje koje optimizira MSAA. - Za Unity developere, pogledajte ovaj ceh.
- Za Unreal developere, pogledajte ovaj ceh. Unreal također nudi anti-ali naknadnu obradu.asing, pogledajte ovaj ceh.
5.3 Učitavanje/pohranjivanje GMEM-a
U Adreno GPU arhitekturi postoji značajka gdje se, prilikom povezivanja Render Targeta, ako se Render Target ne obriše ili ne poništi, svaki put kada se izvrši renderiranje, vrijednosti u Render Targetu učitavaju u grafičku memoriju, što se naziva GMEM Load. Ako prethodne vrijednosti nisu potrebne, brisanje ili poništavanje Render Targeta prije renderiranja može izbjeći ovu situaciju i poboljšati performanse GPU-a.
Učitavanje GMEM-a možete izbjeći pomoću sljedećih metoda. U OpenGL ES-u, nakon povezivanja FBO-a, možete pozvati glClear i glClearDepth za brisanje međuspremnika Color, Depth i Stencil ili pozvati glInvalidateFramebuffer za poništavanje navedenog Render Targeta. U Vulkanu dodatne upute nisu potrebne; možete izričito postaviti hoće li se privitak izbrisati prije upotrebe u VkAttachmentDescription.loadOp.
Slično tome, pohranjivanje rezultata Tile Rendera natrag u glavnu memoriju iz grafičke memorije naziva se GMEM Store; ova operacija je također skupa za GPU. Kako biste to izbjegli, preporučujemo povezivanje samo potrebnih Render Targeta kako biste spriječili nepotrebne operacije Storea.
5.4 Sloj kompozicije (više slojeva)
Teksture prikazane pomoću višeslojnog načina rada imaju bolju vizualnu kvalitetu. Međutim, ova značajka značajno povećava performanse grafičke kartice s brojem slojeva i veličinom tekstura. Preporučujemo da ne koristite više od tri sloja.
- Za izvornog programera,
VIVE Wave SDK koristi WVR_SubmitFrameLayers za prosljeđivanje podataka za svaki sloj.
VIVE OpenXR SDK smješta podatke slojeva u XrFrameEndInfo i šalje ih putem xrEndFramea. - Za Unity programera,
o postavkama VIVE Wave SDK-a, pogledajte ovaj vodič,
o postavkama VIVE OpenXR-a, pogledajte ovaj vodič. - Za Unreal developera,
o postavkama VIVE Wave SDK-a, pogledajte ovaj vodič.
o postavkama VIVE OpenXR-a, pogledajte ovaj vodič.
5.5 skok CPU-a
Kada je opterećenje CPU-a veće, neke niti u pozadini obrađuju podatke s visokim prioritetom, što može prekinuti izvorno izvršavanje. Ne možemo jamčiti da aplikacija sadržaja neće biti prekinuta drugim nitima.
Ako se pojave takvi problemi, možete pokušati povećatiasinPromijenite prioritet niti kako biste vidjeli rješava li to problem. Ali ako promijenite konfiguraciju niti radi optimizacije za uređaje, morate provjeriti ima li to ikakav negativan utjecaj.
- Za Unity Developere, pogledajte značajku konfiguracije Android niti. Ako koristite VIVE Wave SDK, imamo značajku u WaveXRSettings koja vam omogućuje podešavanje prioriteta, kao što je prikazano na slici 5-5-2. Manja vrijednost predstavlja veći prioritet.

- Ne postoji način za promjenu niti igre, niti za renderiranje i prioriteta niti RHI putem vanjskih postavki, osim ako se ne izmijeni kod engine-a.
Autorska prava © 2024 HTC Corporation. Sva prava pridržana.
Dokumenti / Resursi
![]() | Izvedba VR renderiranja |
Reference
- dev.epicgames.com/community/learning/courses/eER/unreal-engine-technical-guide-to-linear-content-creation-production/k8pB/unreal-engine-performance-profiling-and-debugging?locale=dev.epicgames.com
- Anti Aliasing and Upscaling in Unreal Engine | Unreal Engine 5.5 Documentation | Epic Developer Communitydev.epicgames.com
- dev.epicgames.com/documentation/en-us/unreal-engine/API/Runtime/HeadMountedDisplay/IHeadMountedDisplay/SetPixelDensity?application_version=4.27dev.epicgames.com
- Smjernice za performanse mobilnih uređaja u Unreal Engineu | Dokumentacija za Unreal Engine 5.5 | Zajednica programera Epicadev.epicgames.com
- dev.epicgames.com/documentation/en-us/unreal-engine/unreal-insights-in-unreal-enginedev.epicgames.com
- Qualcomm dokumentacijadeveloper.qualcomm.com
- developer.vive.com/resources/openxr/openxr-mobile/tutorials/unity/composition-layer/developer.vive.com
- developer.vive.com/resources/openxr/unity/tutorials/using-foveation-in-your-app/developer.vive.com
- developer.vive.com/resources/openxr/unity/tutorials/using-foveation-in-your-app/#GoldenSampledeveloper.vive.com
- developer.vive.com/resources/openxr/unity/tutorials/using-refreshrate-in-your-app/#GoldenSampledeveloper.vive.com
- korisnički priručnikmanual.tools
