VIVE logotipZmogljivost upodabljanja VR
Uravnavanje in optimizacije

Uvod

Doseganje optimalne VR izkušnje na strojni opremi z omejenimi viri je ključno za zagotavljanje gladke in udobne uporabniške izkušnje. Če hitrost sličic upodabljanja vsebine pade ali je nestabilna pod hitrostjo osveževanja naprave, bo to povzročilo tresenje sličic in zatikanja, slabost zaradi gibanja itd. nazadnje negativno vpliva na uporabniško izkušnjo. Zato je optimizacija delovanja vsebin zelo pomembna za zagotavljanje prijetne izkušnje.
Pred začetkom prilagajanja zmogljivosti je pomembno razumeti, kje so ozka grla, da se izognete neučinkovitemu prilagajanju. Ta dokument je zasnovan tako, da razvijalcem pomaga prepoznati ozka grla pri delovanju in ponuja rešitve za reševanje težav z zmogljivostjo upodabljanja.
Dokument je organiziran v naslednje razdelke:

  • 2. poglavje: Identificirajte ozka grla – Ta razdelek pomaga razvijalcem pri ugotavljanju, kje so ozka grla.
  • Poglavje 3 in 4: Nastavitve VIVE Wave in VIVE OpenXR – Ti razdelki opisujejo posebne nastavitve, ki lahko vplivajo na zmogljivost CPE/GPU za aplikacije VIVE Wave in OpenXR. Razvijalci lahko eksperimentirajo z omogočanjem ali onemogočanjem teh funkcij glede na ozka grla pri delovanju, da ugotovijo, ali je prišlo do izboljšav.
  • Poglavje 5: Skupna optimizacija – v tem razdelku je nekaj skupnih praks in izkušenj z optimizacijo.

Prepoznajte ozko grlo

Ko se HMD premika, če ima aplikacija VR/MR trepetanje okvirja ali črne robove itd., je to običajno posledica slabe težave pri upodabljanju. Običajno lahko težave z zmogljivostjo upodabljanja razvrstimo v dve vrsti: vezane na CPE ali GPU. Razumejte, katere vrste vezave za vašo aplikacijo so zelo pomembne na začetku, da se izognete neučinkovitemu nastavljanju.
V tem poglavju nudimo preproste korake, ki vam omogočajo, da hitro ugotovite, kje so težave z zmogljivostjo.

2.1 Preverite FPS upodabljanja vsebine
Najprej začnemo s preverjanjem FPS vsebine, ki je število sličic, ki jih vsebina prikaže na sekundo. Vzdrževati ga je treba na hitrosti sličic zaslona in ohranjati stabilno. V nasprotnem primeru lahko povzroči tresenje okvirja.
Če vaša aplikacija SDK uporablja VIVE WAVE SDK 6.0.0 ali novejšo različico, lahko uporabite naslednji ukaz adb za preverjanje FPS. DK 6.0.0
$adb Logcat -s VRMetric
Videli boste naslednje podatke dnevnika.
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” Prva številka predstavlja FPS vsebine, medtem ko druga številka predstavlja hitrost prikaza.
Če je vaša različica Wave SDK starejša od 6.0.0, je priporočljivo, da nadgradite na najnovejšo različico, da izboljšate zmogljivost upodabljanja in druge optimizacije.
Če je SDK vaše aplikacije zgrajen z VIVE OpenXR. Za preverjanje FPS lahko uporabite naslednji ukaz adb.
$adb Logcat -s RENDER_ATW
Videli boste naslednje podatke dnevnika
RENDER_ATW: [FPS] nova tekstura: 90.00
RENDER_ATW: [FPS] R prisoten:90.00 preskok:0 317, -0.0155 0.805527, 0.006788)
RENDER_ATW: [FPS] L prisoten:90.00 preskok:0 (0.592301, -0.015502, 0.805539, 0.006773)

Številka, ki sledi "novi teksturi", predstavlja trenutni FPS vsebine. Številka, ki sledi »R prisoten« in »L prisoten«, predstavlja hitrost sličic na zaslonu.
Včasih se lahko FPS vsebine in hitrost sličic zaslona rahlo razlikujeta.
Na primerample, v zgornjem primeru se lahko 89.8 FPS obravnava kot 90 FPS.
Če je FPS vsebine aplikacije dosledno nižji od hitrosti sličic na zaslonu ali ostane nestabilen, to kaže na težavo z zmogljivostjo upodabljanja. Zato je naslednji korak ugotoviti, ali ozko grlo prihaja iz CPE ali GPE.
2.2 Preverite uporabo CPE in GPE
Če vaša aplikacija SDK uporablja VIVE WAVE SDK 6.0.0 ali novejšo različico, lahko uporabite naslednji ukaz adb za preverjanje FPS.
$adb logcat -s VRMetric
Videli boste naslednje podatke dnevnika.
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
Kot lahko vidite v zgornjem rezultatu dnevnika, je uporaba CPE-ja 27 % in uporaba GPE-ja 72 %. Če je vaša različica Wave SDK nižja od 6.0.0, je priporočljivo, da nadgradite na najnovejšo različico, da izboljšate zmogljivost upodabljanja in druge optimizacije.
Za aplikacijo VIVE OpenXR lahko uporabite naslednji ukaz za preverjanje porabe procesorja in grafičnega procesorja.
# na linux/ubuntu
$ adb logcat | grep CPU_USAGE
# na powershell
$ adb logcat | Select-String - Pattern CPU_USAGE
Videli boste naslednji dnevnik
CPU Avg. CPU0 CPU1 CPU2 CPU3 CPU4 CPU5 CPU6 CPU7 GPU CPU_USAGE [LOAD] 25.67 % 32.22 % 25.29 % 30.77 % 29.35 % 21.35 % 22.09 % 18.39 % 24.14 % 73 %
Če opazite, da FPS ne more vzdrževati hitrosti sličic na zaslonu in je tudi poraba GPE zelo visoka, običajno presega 85 %, lahko poskusite prilagoditi ločljivost Eyebuffer Resolution (razdelek 3.1.2, razdelek 4.1.2), da vidite, ali izboljša FPS. Če ta prilagoditev privede do boljšega
učinkovitosti, lahko sklepamo, da je težava povezana z grafično procesorsko enoto, in ustrezno usmerimo naša prizadevanja za optimizacijo.
Po drugi strani pa, če prilagajanje ločljivosti Eyebuffer Resolution ne povzroči opaznega izboljšanja zmogljivosti, je ozko grlo verjetno vezano na CPE, zato se moramo osredotočiti na optimizacijo zmogljivosti CPE.
Možno je tudi, da je aplikacija hkrati vezana na CPE in GPE. V takšnih primerih je treba prizadevanja za optimizacijo uporabiti tako za CPE kot GPE, da dosežete uravnotežene izboljšave zmogljivosti.
2.3 Vezano na GPU
Ko je aplikacija VR vezana na GPE, to pomeni, da je GPE primarno ozko grlo in ne more slediti zahtevam upodabljanja aplikacije. Če želite ublažiti težave, povezane z GPE, upoštevajte naslednja priporočila:
Najprej uporabite orodja za profiliranje, kot sta RenderDoc ali Game Engine profiler (Unity Profiler, Unreal Insights), da analizirate, kje GPE preživi večino svojega časa. Prepoznajte najdražje operacije in se osredotočite na njihovo optimizacijo.
Za Native Developer lahko uporabite RenderDoc, da ugotovite, kateri klic risanja povzroča prekomerno obremenitev GPE.
Za razvijalce Unity lahko sledite temu dokumentu Unity ali uporabite RenderDoc za analizo težave z zmogljivostjo upodabljanja in sledite dokumentaciji za optimizacijo grafike Unity za navodila za optimizacijo vaše aplikacije.
Za Unreal Developer lahko uporabite GPU Visualizer ali RenderDoc za analizo težave z zmogljivostjo upodabljanja in sledite smernicam Unreal Performance Guidelines za navodila za optimizacijo vaše aplikacije.
Drugič, lahko tudi poskusite prilagoditi določene funkcije ali nastavitve Wave, da zmanjšate obremenitev GPE.

  1. Nastavite počasnejšo hitrost osveževanja zaslona (razdelek 3.1.1, razdelek 4.1.1)
  2.  Prilagodite ločljivost Eyebuffer (razdelek 3.1.2, razdelek 4.1.2), 14.1.1)
  3.  Poskusite omogočiti Foveation (razdelek 3.1.4, razdelek 4.1.4).

Če je vaša aplikacija tudi aplikacija MR, lahko prilagodite tudi nastavitve Passthrough.

  1. Nižjo prilagodite Passthrough Image Quality. (oddelek 3.2.1)
  2. Počasneje prilagodite prehodno hitrost sličic. (oddelek 3.2.2).

Za več drugih nastavitev o zmogljivosti GPU si lahko ogledate poglavje 2.6.

2.4 Vezano na procesor
Ko je aplikacija VR vezana na CPE, to pomeni, da je CPE primarno ozko grlo, upoštevajte naslednja priporočila:
Najprej uporabite orodja za profiliranje, kot sta Systrace ali Game Engine profiler (Unity Profiler, Unreal Insights), da analizirate in ugotovite, kateri deli vaše kode porabijo največ virov CPU. Osredotočite se na optimizacijo teh področij in refaktorirajte računsko intenzivne algoritme, da zmanjšate obremenitev procesorja.

  • Za Native Developer lahko uporabite Systrace to profiler vaš projekt.
  • Za Unity Developer lahko uporabite CPU Usage Profiler modul za iskanje težave z zmogljivostjo procesorja.
  • Za Unreal Developer lahko uporabite Unreal's Insights, da poiščete težavo z zmogljivostjo procesorja.

Drugič, lahko tudi poskusite prilagoditi določene funkcije ali nastavitve Wave, da zmanjšate obremenitev GPE.

  1. Nastavite počasnejšo hitrost osveževanja zaslona (razdelek 3.1.1, razdelek 4.1.1)
  2.  Uporabi večView Upodabljanje (razdelek 3.1.4, razdelek 4.1.4)

Če je vaša aplikacija tudi aplikacija MR, lahko prilagodite tudi nastavitve Passthrough.

  1. Počasneje prilagodite prehodno hitrost sličic (razdelek 3.2.2).

Za več drugih nastavitev o zmogljivosti procesorja si lahko ogledate poglavje 2.6.

2.5 Povzetek
Končno smo zgornji tok dela za preverjanje zmogljivosti organizirali v sliko 2-5-1. Začnite s preverjanjem FPS vsebine. Če je nižja od hitrosti sličic na zaslonu ali ostane nestabilna, analizirajte uporabo GPE/CPE, da ugotovite, ali je vezana na GPE ali CPE. Nazadnje uporabite profesionalcafiler za odkrivanje morebitnih težav z zmogljivostjo ali prilagoditev funkcij ali nastavitev Wave za optimizacijo zmogljivosti procesorja.

Zmogljivost upodabljanja VIVE VR – slika 1

2.6 Hitra referenca, katere nastavitve lahko izboljšajo nalaganje CPE/GPE

Spodaj navedite nastavitve SDK-ja, ki se nanašajo na nalaganje CPE/GPE. Na podlagi ozkega grla aplikacije lahko preverite ustrezne nastavitve optimizacije.

Povezano s procesorjem:

  • Nastavitev VIVE Wave SDK
    o VR vsebina
    ▪ 3.1.1 Hitrost osveževanja zaslona
    ▪ 3.1.4 Multi-View Upodabljanje
    ▪ 3.1.6 Prilagodljiva kakovost
    ▪ 3.1.7 Adaptive Motion Compositor
    o MR Vsebina
    ▪ 3.2.2 Prilagodi prehodno hitrost sličic
  • Nastavitev VIVE OpenXR SDK
    o VR vsebina
    ▪ 4.1.1 Hitrost osveževanja zaslona
    ▪ 4.1.4 Multi-View Upodabljanje
  • Skupna optimizacija
    o 5.5 CPU Spike

Povezano z GPU:

  • Nastavitev VIVE Wave SDK
    o VR vsebina
    ▪ 3.1.1 Hitrost osveževanja zaslona
    ▪ 3.1.2 Eyebuffer Resolution
    ▪ 3.1.3 Multi-View Upodabljanje
    ▪ 3.1.4 Foveacija
    ▪ 3.1.5 Izboljšanje ostrine okvirja (FSE)
    ▪ 3.1.6 Prilagodljiva kakovost
    ▪ 3.1.7 Adaptive Motion Compositor
    ▪ 3.1.8 Render Mask [Not Support Unreal] o Vsebina MR
    ▪ 3.2.1 Prilagodite kakovost prehoda
    ▪ 3.2.2 Prilagodi prehodno hitrost sličic
  • Nastavitev VIVE OpenXR SDK
    o VR vsebina
    ▪ 4.1.1 Hitrost osveževanja zaslona
    ▪ 4.1.2 Eyebuffer Resolution
    ▪ 4.1.3 Multi-View Upodabljanje
    ▪ 4.1.4 Foveation [Ni podprto za Unreal] ▪ 4.1.5 Render Mask [Ni podprto za Unreal]
  • Skupna optimizacija
    o 5.1 Izklopite način visoke zmogljivosti
    o 5.2 Multisampling
    o 5.3 Nalaganje/shranjevanje GMEM
    o 5.4 Plast sestave (večplastna)

Nastavitev valovanja VIVE

VIVE Wave je odprta platforma in nabor orodij, ki vam omogoča enostavno razvijanje vsebine VR in zagotavlja visoko zmogljivo optimizacijo naprav za partnerje tretjih oseb. VIVE Wave podpira igralne motorje Unity in Unreal.
Nenehno optimiziramo in odpravljamo različne napake, zato priporočamo, da SDK posodabljate.
Trenutno VIVE Wave podpira samo OpenGL ES. Tukaj so navedene funkcije, razvrščene po vplivu na zmogljivost GPE. To bomo razdelili na dva dela: vsebino VR in vsebino MR.
3.1 Vsebina VR
3.1.1 Hitrost osveževanja zaslona

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.

  • Za domače razvijalce glejte WVR_SetFrameRate.
  • Za razvijalce Unity glejte ta vodnik.
  • Za razvijalce Unreal glejte ta vodnik.

3.1.2 Ločljivost očesnega odbojnika
Ločljivost Eyebuffer je velikost teksture, pri kateri bo aplikacija vsebine, ki bo upodobljena, upodobljena tekstura poslana v izvajalno okolje za izvedbo postopka objave in predstavljena na zaslonu HMD.
Medtem ko lahko večja velikost očesnega medpomnilnika povzroči jasnejše in podrobnejše vizualne podobe, pa tudi znatno obremeni GPE. Zato je nujno najti pravo ravnovesje med vizualno kakovostjo in zmogljivostjo.
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.

  • Za domačega razvijalca glejte WVR_ObtainTextureQueue. Ko prilagajate velikost, morate širino in višino pomnožiti z razmerjem.
  • Za razvijalce Unity glejte WaveXRSettings.
    Lahko pa naredite spremembe s kodo kot belwoe.
    XRSettings.eyeTextureResolutionScale = ResolutionScaleValue; // C#
  • Za razvijalce Unreal glejte SetPixelDensity.

3.1.3 Multi-View Upodabljanje
Pri tradicionalnem upodabljanju narišemo levo in desno oko ločeno, kar zahteva dva klica risanja za isti prizor. večView Upodabljanje odpravi to težavo tako, da izvede samo en klic risanja.
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.

  • Za domačega razvijalca se lahko obrnete na wvr_native_hellovr sample.
  • Za razvijalce Unity glejte način upodabljanja, en prehod je večview funkcija.
  • Za razvijalce Unreal glejte ta vodnik.

3.1.4 Foveacija
Foveated upodabljanje je namenjeno predvsem zmanjšanju obremenitve GPE. Zmanjša podrobnosti okvirja na obrobju zaslona in ohranja podrobnosti visoke ločljivosti v središču polja. view. Če ima aplikacija težavo z GPE, lahko poskusite omogočiti upodabljanje Foveation.

Zmogljivost upodabljanja VIVE VR – slika 2

Pri uporabi foveacije morate biti pozorni na nekaj:

➢ Uporabniki običajno ne opazijo zmanjšanih podrobnosti v obrobnih regijah, ki uporabljajo privzeti način foveacije. Toda če je periferna kakovost foveacije nastavljena prenizko, lahko postane opazna za uporabnika.
➢ Učinki foveacije so lahko bolj opazni pri določenih materialih tekstur, ki bi lahko pritegnile pozornost uporabnika. Razvijalci bi se morali tega zavedati in to ustrezno ovrednotiti.
➢ Omogočanje funkcije foveated upodabljanja povzroči fiksne stroške zmogljivosti GPE, ki se lahko razlikujejo med 1 % in 6 %, odvisno od velikosti očesnega medpomnilnika. Pri uporabi preprostega senčila v prizorišču je lahko povečanje zmogljivosti zaradi varčevanja z viri nižje od fiksnih stroškov zmogljivosti GPU, kar povzroči padec zmogljivosti.

  • Za domače razvijalce glejte ta vodnik.
  • Za razvijalce Unity glejte ta vodnik. Ko omogočite naknadno obdelavo ali HDR, foveacije ni mogoče v celoti izkoristiti. Ker bo Unity upodobil objekte na lastno ustvarjeno teksturo upodabljanja, namesto teksture upodabljanja, ustvarjene med izvajanjem, ki podpira foveacijo.
  • Za razvijalce Unreal glejte ta vodnik. Predvsem foveacije ni mogoče v celoti izkoristiti na Multi-View Upodabljanje, ker Unreal ne more neposredno upodabljati predmetov na teksturo upodabljanja, ustvarjeno med izvajanjem, ki podpira foveacijo.

3.1.5 Izboljšanje ostrine okvirja (FSE)
FSE zagotavlja izostren rezultat upodabljanja z uvedbo filtra za izostritev, lahko naredi vsebino jasnejšo in je zelo koristen za izboljšanje jasnosti besedila v prizoru. Če ima aplikacija težavo z GPE, lahko onemogočite FSE, če to ni nujno.

Zmogljivost upodabljanja VIVE VR – slika 3

  • Za domače razvijalce glejte ta vodnik.
  • Za razvijalce Unity glejte ta vodnik.
  • Za razvijalce Unreal glejte ta vodnik.

3.1.6 Prilagodljiva kakovost
Za varčevanje z baterijo in ohranjanje zmogljivosti upodabljanja naprave ta funkcija samodejno prilagodi ravni zmogljivosti CPE/GPE ure glede na njihovo uporabo. Poleg tega je mogoče izvesti druge strategije za izboljšanje zmogljivosti, kot je samodejno omogočanje/onemogočanje Foveation ali vsebina, ki se lahko prilagodi, če prejme dogodke visoke/nizke obremenitve.

  • Za domače razvijalce glejte ta vodnik.
  • Za razvijalce Unity glejte ta vodnik. V našem vtičniku Unity se lahko velikost očesnega medpomnilnika samodejno prilagodi glede na trenutno zmogljivost; Velikost besedila bo filtrirala vrednosti lestvice, ki so premajhne na seznamu Ločljivost. Priporočamo velikost besedila vsaj 20 dmm ali več.
  • Za razvijalce Unreal glejte ta vodnik.

3.1.7 Adaptive Motion Compositor
Ta funkcija je eksperimentalna funkcija, ki vključuje UMC in PMC. UMC bo zmanjšal hitrost sličic za polovico in ekstrapoliral nov okvir v realnem času, da bo ohranil vizualno gladkost. Vendar prihaja z nekaj zakasnitvami, artefakti in nalaganjem GPE.
PMC uporablja predvsem medpomnilnik globine, da omogoči ATW, da upošteva prevod HMD, razširi se na kompenzacijo 6 DOF. Ta funkcija lahko zmanjša zakasnitev prevoda za 1–2 sličici, vendar poveča obremenitev GPE.

  • Za domače razvijalce glejte ta vodnik.
  • Za razvijalce Unity glejte ta vodnik.
  • Za razvijalce Unreal glejte ta vodnik.

3.1.8 Maska upodabljanja [ni podprto za Unreal]
Piksli na robovih po popačenju postanejo skoraj nevidni, maska ​​za upodabljanje spremeni vrednosti medpomnilnika globine teh nevidnih pikslov. Če omogočite globinsko testiranje, te nevidne slikovne pike zaradi zgodnjega z ne bodo upodobljene, s čimer se zmanjša obremenitev GPE. Ta funkcija je uporabna, če so na teh nevidnih območjih zelo obremenjeni upodabljajoči objekti; v nasprotnem primeru, če na teh območjih ni objektov za upodabljanje, je priporočljivo, da ga onemogočite, ker bo porabil malo GPE.

  • Za domače razvijalce glejte ta vodnik. Pred klicem RenderMask morate povezati globinski medpomnilnik; sicer bo neučinkovito.
  • Za razvijalce Unity glejte ta vodnik.
  • Za razvijalce Unreal trenutno ne podpira funkcije Render Mask.

3.2 Vsebina MR
3.2.1 Prilagodite kakovost prehoda
Obstajajo 3 stopnje kakovosti prehodne slike:
➢ WVR_PassthroughImageQuality_DefaultMode – primeren za vsebino MR brez posebnih zahtev.
➢ WVR_PassthroughImageQuality_PerformanceMode – primeren za vsebino MR, ki potrebuje več sredstev GPE za upodabljanje virtualne scene.
➢ WVR_PassthroughImageQuality_QualityMode – primeren za vsebino MR, ki uporabnikom omogoča jasen pogled na okoliško okolje, vendar mora biti virtualni prizor vsebine bolj natančno nastavljen za delovanje.
Kakovost prehoda lahko prilagodite na PerformanceMode, da zmanjšate porabo GPE.

  • Za razvijalce Native, Uunity ali Unreal glejte ta vodnik.

3.2.2 Prilagodite prehodno hitrost sličic
Podobno kot stopnja osveževanja zaslona tudi višja hitrost prehoda ponuja bolj gladko sliko, vendar na račun večje obremenitve sistema. Nasprotno pa nižje stopnje osveževanja zmanjšajo obremenitev sistema, vendar povzročijo manj gladko sliko. Obstajata 2 načina prehodne hitrosti sličic: Boost in Normal.

  • Za domače razvijalce lahko prilagodite kakovost prehoda z uporabo WVR_SetPassthroughImageRate.
  • Za razvijalce Unity se lahko spremeni prek kode, nprampnastavitve datoteke so naslednje // C#
    Interop.WVR_SetPassthroughImageQuality(WVR_PassthroughImageQuality.PerformanceMode);
  • Za razvijalce Unreal, način nastavitve si oglejte vozlišče načrta na sliki 3-2-2.

Zmogljivost upodabljanja VIVE VR – slika 4

Nastavitev VIVE OpenXR

OpenXR je odprt standard, ki zagotavlja skupen nabor API-jev za razvoj aplikacij XR, ki delujejo v širokem naboru naprav VR, ki jih je razvila skupina Khronos. VIVE Focus 3 in VIVE XR Elite podpirata tudi OpenXR, VIVE OpenXR SDK zagotavlja celovito podporo za naprave HTC VR, kar omogoča razvijalcem, da zgradijo Allin-One in vsebine z Unity in Unreal engine na napravah HTC VR. Nenehno optimiziramo in odpravljamo različne napake, zato je priporočljivo, da razvijalci posodobijo različico FOTA svojih naprav, da bodo posodobljene. Trenutno VIVE OpenXR SDK podpira OpenGL ES in Vulkan.

4.1 Vsebina VR
4.1.1 Hitrost osveževanja zaslona
Koncept tukaj je podoben 3.1.1 Hitrost osveževanja zaslona.

  • Za domačega razvijalca glejte XrEventDataDisplayRefreshRateChangedFB.
  • Za razvijalce Unity glejte ta vodnik.
  • Za razvijalce Unreal glejte ta vodnik.

4.1.2 Ločljivost očesnega odbojnika
Koncept je podoben konceptu 3.1.2 Eyebuffer Resolution. priporočamo, da faktorja lestvice ne zmanjšate pod 0.7, saj lahko to povzroči nesprejemljivo vizualno kakovost.

  • Za domačega razvijalca glejte xrCreateSwapchain. Ko prilagajate velikost, morate širino in višino pomnožiti z razmerjem. ,
  • Za razvijalce Unity glejte naslednji primerample // C#
    XRSettings.eyeTextureResolutionScale = 0.7f; //priporočeno 1.0f~0.7f
  • Za nastavitve Unreal glejte ta priročnik.

4.1.3 Multi-View Upodabljanje
Koncept tukaj je podoben konceptu 3.1.3 Multi-View Upodabljanje. Ta funkcija zmanjša obremenitev CPE, GPU ima tudi nekaj prednosti. Priporočamo, da omogočite to funkcijo.

  • Za domače razvijalce KhronosGroup zagotavlja OpenXR Multi-View example, glejte ta vodnik.
  • Za razvijalce Unity glejte način upodabljanja, en prehod je večview funkcija.
  • Za razvijalce Unreal, tako kot pri nastavitvah VIVE Wave, glejte ta priročnik.

4.1.4 Foveacija [ni podprto za Unreal]
Koncept tukaj je podoben konceptu 3.1.4 Foveation. Foveated upodabljanje je v prvi vrsti namenjeno zmanjšanju obremenitve GPE, vendar bo njegovo omogočanje povzročilo fiksne stroške zmogljivosti GPE in če je foveacija nastavljena prenizko in so uporabljeni določeni materiali ali teksture, lahko postane zelo
opazen za uporabnika. Zato je priporočljivo omogočiti ali onemogočiti funkcijo na podlagi vaših posebnih zahtev in premislekov o zmogljivosti Trenutno je funkcija Foveated podprta samo v OpenGL ES na VIVE OpenXR SDK.

  • Za domače razvijalce je ta funkcija na voljo, vendar trenutno ni examples so na voljo.
  • Za razvijalce Unity glejte ta vodnik.
  • Za razvijalce Unreal trenutno ne podpira te funkcije.

4.1.5 Maska upodabljanja [ni podprto za Unreal]
Koncept tukaj je podoben 3.1.8 Render Mask.

  • Za domače razvijalce uporabite XrVisibilityMaskKHR, da dobite mrežo. Pred upodabljanjem scene uporabite to mrežo za zapolnitev vrednosti medpomnilnika globine pred upodabljanjem scene.
  • Za razvijalce Unity je funkcija Render Mask privzeto omogočena za OpenGL ES in jo je mogoče onemogočiti z naslednjo kodo; Vulkan trenutno ne podpira te funkcije. //C# UnityEngine.XR.XRSettings.occlusionMaskScale = 0.0f;
  • Za razvijalce Unreal trenutno ne podpira funkcije Render Mask.

4.2 Vsebina MR
OpenXR trenutno ne podpira nastavitve Passthrough Quality in Frame Rate. Še naprej bomo optimizirali in popravljali funkcijo Passthrough, zato priporočamo, da razvijalci posodobijo različico FOTA naprave, da bo posodobljena.

Skupna optimizacija

5.1 Izklopite način visoke zmogljivosti
Če izklopite »Način visoke zmogljivosti«, lahko zmanjšate velikost zaslona naprave in s tem zmanjšate porabo GPE. Pomanjkljivost je zmanjšanje ločljivosti zaslona. Lahko uravnotežite kakovost in zmogljivost, da se odločite, ali ga želite omogočiti.
Lokacija nastavitve za VIVE Focus 3 je prikazana na sliki 5-1-1:

Zmogljivost upodabljanja VIVE VR – slika 5

Lokacija nastavitve za VIVE XR Elite je prikazana na sliki 5-1-2:

Zmogljivost upodabljanja VIVE VR – slika 6

5.2 Multisampling Anti-Aliasing
Multisampling 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.

  • Za domače razvijalce, MSAA OpenGL ES exsample se lahko sklicuje na to; MSAA Vulkan exampler se lahko sklicuje na to.
    GPU Adreno ponuja razširitev, ki optimizira MSAA.
  • Za razvijalce Unity se obrnite na ta ceh.
  • For Unreal developer, refer to this guild. Unreal also has provide post processing anti-aliasing, refer to this guild.

5.3 Nalaganje/shranjevanje GMEM
V arhitekturi Adreno GPU obstaja funkcija, pri kateri se pri vezavi cilja upodabljanja, če se cilj upodabljanja ne počisti ali razveljavi, vsakič, ko pride do upodabljanja, se vrednosti v cilju upodabljanja naložijo v grafični pomnilnik, kar se imenuje nalaganje GMEM. Če prejšnje vrednosti niso potrebne, počistite ali razveljavite Render Target pred upodabljanjem, se lahko izognete tej situaciji in izboljšate zmogljivost GPE.
Obremenitvi GMEM se lahko izognete z naslednjimi metodami. V OpenGL ES lahko po vezavi FBO pokličete glClear in glClearDepth, da počistite vmesni pomnilnik Color, Depth in Stencil, ali pokličete glInvalidateFramebuffer, da razveljavite podani cilj upodabljanja. V Vulkanu dodatna navodila niso potrebna; v VkAttachmentDescription.loadOp lahko izrecno nastavite, ali želite počistiti prilogo pred uporabo.
Podobno se shranjevanje rezultata Tile Renderja nazaj v glavni pomnilnik iz grafičnega pomnilnika imenuje GMEM Store; ta operacija je draga tudi za GPE. Da bi se temu izognili, priporočamo, da vežete samo zahtevane cilje upodabljanja, da preprečite nepotrebne operacije trgovine.

5.4 Plast sestave (večplastna)
Teksture, prikazane z večplastnostjo, imajo boljšo vizualno kakovost. Vendar pa ta funkcija znatno poveča zmogljivost GPU s številom plasti in velikostjo tekstur. Priporočamo, da ne nanesete več kot tri plasti.

  • Za domačega razvijalca,
    o VIVE Wave SDK uporablja WVR_SubmitFrameLayers za posredovanje podatkov za vsako plast.
    o VIVE OpenXR SDK postavi podatke o slojih v XrFrameEndInfo in jih predloži prek xrEndFrame.
  • Za razvijalca Unity,
    o nastavitve VIVE Wave SDK, glejte ta priročnik,
    o nastavitve VIVE OpenXR, glejte ta priročnik.
  • Za razvijalca Unreal,
    o VIVE Wave SDK nastavitve, glejte ta priročnik.
    o nastavitve VIVE OpenXR, glejte ta priročnik.

5.5 CPU skok
Ko je obremenitev CPE večja, imajo nekatere niti procesov v ozadju visoko prioriteto, lahko prekine izvorno izvajanje. Ne moremo zagotoviti, da aplikacije vsebine ne bo prekinila druga nit.
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.

  • Za razvijalce Unity glejte funkcijo konfiguracije niti Android. Če uporabljate VIVE Wave SDK, imamo v WaveXRSettings funkcijo, ki vam omogoča prilagajanje prioritete, kot je prikazano na sliki 5-5-2. Manjša vrednost predstavlja višjo prednost.

Zmogljivost upodabljanja VIVE VR – slika 7

  • Neresnično ni metode za spreminjanje niti igre, niti upodabljanja in prioritete niti RHI prek zunanjih nastavitev, razen če spremenite kodo motorja.

Avtorske pravice © 2024 HTC Corporation. Vse pravice pridržaneVIVE logotip

Dokumenti / Viri

Zmogljivost upodabljanja VIVE VR [pdf] Uporabniški priročnik
Zmogljivost upodabljanja VR, zmogljivost upodabljanja, zmogljivost

Reference

Pustite komentar

Vaš elektronski naslov ne bo objavljen. Obvezna polja so označena *