sigla VIVEPerformanță de redare VR
Tuning și optimizări

Introducere

Obținerea unei experiențe VR optime pe hardware cu resurse limitate este cheia pentru a oferi o experiență de utilizator fluidă și confortabilă. Dacă frecvența cadrelor de redare a conținutului scade sau este instabilă sub rata de reîmprospătare a dispozitivului, va duce la tremurături și blocaje ale cadrelor, rău de mișcare etc. în cele din urmă influențează negativ experiența utilizatorului. Prin urmare, optimizarea performanței conținutului este foarte importantă pentru a asigura o experiență plăcută.
Înainte de a începe reglarea performanței, este important să înțelegeți unde sunt blocajele de performanță pentru a evita reglarea ineficientă. Acest document este conceput pentru a ajuta dezvoltatorii să identifice blocajele de performanță și să ofere soluții pentru a rezolva problemele de performanță de redare.
Documentul este organizat în următoarele secțiuni:

  • Capitolul 2: Identificați blocajele – Această secțiune ajută dezvoltatorii să identifice unde sunt blocajele.
  • Capitolul 3 și 4: Setări VIVE Wave și VIVE OpenXR – Aceste secțiuni prezintă setări specifice care pot afecta performanța CPU/GPU pentru aplicațiile VIVE Wave și OpenXR. Dezvoltatorii pot experimenta cu activarea sau dezactivarea acestor funcții pe baza blocajelor de performanță întâlnite pentru a determina dacă există vreo îmbunătățire.
  • Capitolul 5: Optimizare comună – Această secțiune împărtășește câteva practici și experiențe comune de optimizare.

Identificați gâtul de sticlă

Atunci când HMD se mișcă, dacă aplicația VR/MR are fluctuații ale cadrelor sau margine neagră etc., aceasta este cauzată de obicei de o problemă de performanță proastă a randării. De obicei, problemele de randare de performanță pot fi clasificate în două tipuri: legate de CPU sau legate de GPU. Înțelegeți ce tipuri de legături pentru aplicația dvs. este foarte important la început pentru a evita reglarea ineficientă.
În acest capitol, vă oferim pași simpli care vă permit să identificați rapid unde sunt problemele de performanță.

2.1 Verificați redarea conținutului FPS
În primul rând, începem prin a verifica conținutul FPS, adică numărul de cadre pe care le redă conținutul pe secundă. Ar trebui să fie menținut la rata de cadre a afișajului și menținut stabil. În caz contrar, s-ar putea să provoace fluctuații ale cadrelor.
Dacă SDK-ul aplicației dvs. utilizează VIVE WAVE SDK 6.0.0 sau o versiune ulterioară, puteți utiliza următoarea comandă adb pentru a verifica FPS-ul. DK 6.0.0
$adb Logcat -s VRMetric
Veți vedea următoarele date de jurnal.
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” Primul număr reprezintă FPS-ul de conținut, în timp ce al doilea număr reprezintă rata de cadre de afișare.
Dacă versiunea dvs. SDK Wave este sub 6.0.0, se recomandă să faceți upgrade la cea mai recentă versiune pentru a îmbunătăți performanța de redare și alte optimizari.
Dacă SDK-ul aplicației dvs. este construit cu VIVE OpenXR. Puteți utiliza următoarea comandă adb pentru a verifica FPS-ul.
$adb Logcat -s RENDER_ATW
Veți vedea următoarele date de jurnal
RENDER_ATW: [FPS] textură nouă: 90.00
RENDER_ATW: [FPS] R prezent:90.00 skip:0 317, -0.0155 0.805527, 0.006788)
RENDER_ATW: [FPS] L prezent:90.00 skip:0 (0.592301, -0.015502, 0.805539, 0.006773)

Numărul care urmează „nouă textură” reprezintă FPS-ul de conținut în prezent. Numărul care urmează după „R prezent” și „L prezent” reprezintă rata de cadre de afișare.
Uneori, FPS-ul de conținut și rata de cadre de afișare pot avea o ușoară discrepanță.
De exampdeci, în cazul de mai sus, 89.8 FPS pot fi considerați ca 90 FPS.
Dacă conținutul FPS al aplicației este în mod constant mai mic decât rata de cadre de afișare sau rămâne instabil, aceasta indică o problemă de performanță de redare. Prin urmare, următorul pas este să identificăm dacă blocajul provine de la CPU sau de la GPU.
2.2 Verificați utilizarea CPU și GPU
Dacă SDK-ul aplicației dvs. utilizează VIVE WAVE SDK 6.0.0 sau o versiune ulterioară, puteți utiliza următoarea comandă adb pentru a verifica FPS-ul.
$adb logcat -s VRMetric
Veți vedea următoarele date de jurnal.
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
După cum puteți vedea în rezultatul jurnalului de mai sus, utilizarea procesorului este de 27% și utilizarea GPU-ului este de 72% Dacă versiunea SDK-ului Wave este sub 6.0.0, se recomandă să faceți upgrade la cea mai recentă versiune pentru a îmbunătăți performanța de redare și optimizarea altora.
Pentru aplicația VIVE OpenXR, puteți utiliza următoarea comandă pentru a verifica utilizarea procesorului și a GPU-ului.
# pe linux/ubuntu
$ adb logcat | grep CPU_USAGE
# pe powershell
$ adb logcat | Select-String -Pattern CPU_USAGE
Veți vedea următorul jurnal
CPU medie 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 %
Dacă observați că FPS-ul nu poate menține rata de cadre de afișare și că utilizarea GPU-ului este, de asemenea, foarte mare, depășește de obicei 85%, puteți încerca să ajustați Rezoluția Eyebuffer (secțiunea 3.1.2, secțiunea 4.1.2) pentru a vedea dacă îmbunătățește FPS-ul. Dacă această ajustare duce la mai bine
performanță, putem concluziona că problema este legată de GPU și ne concentrăm eforturile de optimizare în consecință.
Pe de altă parte, dacă ajustarea rezoluției Eyebuffer nu are ca rezultat o îmbunătățire vizibilă a performanței, blocajul este probabil legat de CPU și ar trebui să ne concentrăm pe optimizarea performanței procesorului.
De asemenea, este posibil ca aplicația să fie legată de CPU și de GPU simultan. În astfel de cazuri, eforturile de optimizare ar trebui aplicate atât pentru procesor, cât și pentru GPU pentru a obține îmbunătățiri echilibrate ale performanței.
2.3 legat de GPU
Când o aplicație VR este legată de GPU, înseamnă că GPU-ul este principalul blocaj și nu poate ține pasul cu cerințele de randare ale aplicației. Pentru a atenua problemele legate de GPU, luați în considerare următoarele recomandări:
În primul rând, utilizați instrumente de profilare precum RenderDoc sau Game Engine profiler (Unity Profiler, Unreal Insights) pentru a analiza unde își petrece GPU-ul cea mai mare parte a timpului. Identificați cele mai costisitoare operațiuni și concentrați-vă pe optimizarea lor.
Pentru Native Developer, puteți utiliza RenderDoc pentru a identifica ce apel de extragere cauzează încărcare excesivă a GPU-ului.
Pentru Unity Developer, puteți să urmați Unity acest document sau să utilizați RenderDoc pentru a analiza problema de performanță a randării și să urmați documentația de optimizare a graficii Unity pentru îndrumare pentru optimizarea aplicației.
Pentru Unreal Developer, puteți utiliza GPU Visualizer sau utilizați RenderDoc pentru a analiza problema de performanță a randării și urmați Ghidurile Unreal Performance pentru îndrumare pentru a vă optimiza aplicația.
În al doilea rând, puteți încerca, de asemenea, să ajustați anumite funcții sau setări Wave pentru a reduce încărcarea GPU-ului.

  1. Setați rata de reîmprospătare a afișajului mai lent (secțiunea 3.1.1, secțiunea 4.1.1)
  2.  Ajustați rezoluția tamponului ocular (secțiunea 3.1.2, secțiunea 4.1.2), 14.1.1)
  3.  Încercați să activați Foveation (secțiunea 3.1.4, secțiunea 4.1.4).

Dacă aplicația dvs. este, de asemenea, o aplicație MR, puteți ajusta și setările Passthrough.

  1. Ajustați calitatea imaginii de trecere mai jos. (secțiunea 3.2.1)
  2. Ajustați mai lent rata de cadre de trecere. (secțiunea 3.2.2).

Pentru mai multe alte setări despre performanța GPU-ului, puteți consulta capitolul 2.6.

2.4 Legat de CPU
Când o aplicație VR este legată de CPU, înseamnă că procesorul este principalul blocaj, luați în considerare următoarele recomandări:
În primul rând, utilizați instrumente de profilare precum Systrace sau Game Engine profiler (Unity Profiler, Unreal Insights) pentru a analiza și a identifica care părți ale codului dvs. consumă cele mai multe resurse CPU. Concentrați-vă pe optimizarea acestor zone și refactorizați algoritmi intensivi din punct de vedere computațional pentru a reduce sarcina CPU.

  • Pentru Native Developer, puteți folosi Systrace pentru profiler proiectul tau.
  • Pentru Unity Developer, puteți utiliza CPU Usage Profiler pentru a găsi problema de performanță a procesorului.
  • Pentru Unreal Developer, puteți utiliza Unreal's Insights pentru a găsi problema de performanță a procesorului.

În al doilea rând, puteți încerca, de asemenea, să ajustați anumite funcții sau setări Wave pentru a reduce încărcarea GPU-ului.

  1. Setați rata de reîmprospătare a afișajului mai lent (secțiunea 3.1.1, secțiunea 4.1.1)
  2.  Utilizați Multi-View Redare (secțiunea 3.1.4, secțiunea 4.1.4)

Dacă aplicația dvs. este, de asemenea, o aplicație MR, puteți ajusta și setările Passthrough.

  1. Ajustați mai lent rata de cadru de trecere (secțiunea 3.2.2).

Pentru mai multe alte setări despre performanța CPU, puteți consulta Capitolul 2.6.

2.5 Rezumat
În cele din urmă, am organizat fluxul de lucru de verificare a performanței de mai sus în Figura 2-5-1. Începeți prin a verifica FPS-ul conținutului. Dacă este mai mică decât rata de cadre de afișare sau rămâne instabilă, atunci analizați utilizarea GPU/CPU pentru a determina dacă este legată de GPU sau de CPU. În cele din urmă, folosește un profesionistfiler pentru a identifica potențiale probleme de performanță sau pentru a ajusta funcțiile sau setările Wave pentru a optimiza performanța procesorului.

Performanță de redare VIVE VR - Fig 1

2.6 Referință rapidă Ce setări pot îmbunătăți încărcarea CPU/GPU

Listați setările SDK-ului legate de încărcarea CPU/GPU, după cum urmează. Vă puteți baza pe blocajul aplicației pentru a verifica setările relevante de optimizare.

Legat de CPU:

  • Setarea VIVE Wave SDK
    o Conținut VR
    ▪ 3.1.1 Rata de reîmprospătare a afișajului
    ▪ 3.1.4 Multi-View Redare
    ▪ 3.1.6 Calitatea adaptivă
    ▪ 3.1.7 Compozitor Adaptive Motion
    o Conținut MR
    ▪ 3.2.2 Ajustarea ratei de cadre de trecere
  • Setarea VIVE OpenXR SDK
    o Conținut VR
    ▪ 4.1.1 Rata de reîmprospătare a afișajului
    ▪ 4.1.4 Multi-View Redare
  • Optimizare comună
    o 5.5 CPU Spike

Legat de GPU:

  • Setarea VIVE Wave SDK
    o Conținut VR
    ▪ 3.1.1 Rata de reîmprospătare a afișajului
    ▪ 3.1.2 Rezoluţia tamponului ocular
    ▪ 3.1.3 Multi-View Redare
    ▪ 3.1.4 Foveatie
    ▪ 3.1.5 Îmbunătățirea clarității cadrului (FSE)
    ▪ 3.1.6 Calitatea adaptivă
    ▪ 3.1.7 Compozitor Adaptive Motion
    ▪ 3.1.8 Masca de randare [Nu acceptă ireal] o Conținut MR
    ▪ 3.2.1 Ajustarea calităţii de trecere
    ▪ 3.2.2 Ajustarea ratei de cadre de trecere
  • Setarea VIVE OpenXR SDK
    o Conținut VR
    ▪ 4.1.1 Rata de reîmprospătare a afișajului
    ▪ 4.1.2 Rezoluţia tamponului ocular
    ▪ 4.1.3 Multi-View Redare
    ▪ 4.1.4 Foveation [Nu acceptă ireal] ▪ 4.1.5 Masca de redare [Nu acceptă ireal]
  • Optimizare comună
    o 5.1 Dezactivați modul de înaltă performanță
    o 5.2 Multisampling
    o 5.3 GMEM Load/Store
    o 5.4 Strat de compoziție (Multi Layer)

Setarea VIVE Wave

VIVE Wave este o platformă deschisă și un set de instrumente care vă permite să dezvoltați cu ușurință conținut VR și oferă optimizarea dispozitivelor de înaltă performanță pentru partenerii terți. VIVE Wave acceptă motoarele de joc Unity și Unreal.
Optimizăm și rezolvăm în mod continuu diverse erori, așa că recomandăm păstrarea SDK-ului la zi.
În prezent, VIVE Wave acceptă doar OpenGL ES. Aici sunt enumerate caracteristicile ordonate în funcție de influența asupra performanței GPU-ului. Vom împărți acest lucru în două părți: conținut VR și conținut MR.
3.1 Conținut VR
3.1.1 Rata de reîmprospătare a afișajului

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.

  • Pentru dezvoltatorii nativi, consultați WVR_SetFrameRate.
  • Pentru dezvoltatorul Unity, consultați acest ghid.
  • Pentru dezvoltatorul Unreal, consultați acest ghid.

3.1.2 Rezoluția tamponului ocular
Rezoluția Eyebuffer este dimensiunea texturii la care conținutul aplicației care urmează să fie randat, textura redată va fi trimisă timpului de execuție pentru a face procesul de postare și va fi prezentă pe afișajul HMD.
În timp ce o dimensiune mai mare a memoriei tampon pentru ochi poate duce la imagini mai clare și mai detaliate, dar impune și o sarcină semnificativă asupra GPU-ului. Prin urmare, găsirea echilibrului potrivit între calitatea vizuală și performanță este esențială.
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.

  • Pentru dezvoltatorii nativi, consultați WVR_ObtainTextureQueue. Când ajustați dimensiunea, ar trebui să înmulțiți lățimea și înălțimea cu un raport.
  • Pentru dezvoltatorul Unity, consultați WaveXRSettings.
    Alternativ, puteți face modificări prin cod ca belwoe.
    XRSettings.eyeTextureResolutionScale = ResolutionScaleValue; // C#
  • Pentru dezvoltatorul Unreal, consultați SetPixelDensity.

3.1.3 Multi-View Redare
În redarea tradițională, desenăm separat ochii stângi și drepti, ceea ce necesită două apeluri de desen pentru aceeași scenă. Multi-View Redarea abordează această problemă prin efectuarea unui singur apel de tragere.
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.

  • Pentru dezvoltatorii nativi, vă puteți referi la wvr_native_hellovr sample.
  • Pentru dezvoltatorul Unity, consultați Modul de randare, o singură trecere este multi-view caracteristică.
  • Pentru dezvoltatorul Unreal, consultați acest ghid.

3.1.4 Foveatie
Redarea foveated este concepută în primul rând pentru a reduce încărcarea GPU-ului. Reduce detaliile cadrului în periferia afișajului și menține detaliile de înaltă rezoluție în centrul câmpului de view. Dacă aplicația are o problemă legată de GPU, puteți încerca să activați redarea Foveation.

Performanță de redare VIVE VR - Fig 2

Trebuie să observați ceva în timpul utilizării foveației:

➢ De obicei, utilizatorii nu observă detaliile reduse în regiunile periferice care aplică modul de foveation implicit. Dar dacă calitatea periferică a foveației este setată prea scăzută, aceasta ar putea deveni vizibilă pentru utilizator.
➢ Efectele foveației pot fi mai vizibile la anumite materiale de texturi, care ar putea atrage atenția utilizatorului. Dezvoltatorii ar trebui să fie conștienți de acest lucru și să îl evalueze în consecință.
➢ Activarea funcției de randare foveated implică un cost fix de performanță a GPU-ului, care poate varia între 1% și 6%, în funcție de dimensiunea buffer-ului pentru ochi. Când utilizați un shader simplu în scenă, câștigul de performanță din economisirea resurselor poate fi mai mic decât costul fix de performanță a GPU-ului, ceea ce duce la o scădere a performanței.

  • Pentru dezvoltatorii nativi, consultați acest ghid.
  • Pentru dezvoltatorul Unity, consultați acest ghid. În special, atunci când activați post-procesarea sau HDR, foveation nu poate fi utilizat pe deplin. Deoarece Unity va reda obiectele pe propria textură de randare generată, mai degrabă decât textura de randare a prezentului generat în timpul de execuție care acceptă foveation.
  • Pentru dezvoltatorul Unreal, consultați acest ghid. În special, foveația nu poate fi utilizată pe deplin pe Multi-View Redare, deoarece Unreal nu poate reda direct obiectele pe textura de randare generată de runtime care acceptă foveation.

3.1.5 Îmbunătățirea clarității cadrului (FSE)
FSE oferă un rezultat de randare clar prin introducerea filtrului de claritate, poate face conținutul mai clar și poate fi destul de util pentru îmbunătățirea clarității textului în scenă. Dacă aplicația are o problemă legată de GPU, puteți lua în considerare dezactivarea FSE dacă nu este esențială.

Performanță de redare VIVE VR - Fig 3

  • Pentru dezvoltatorii nativi, consultați acest ghid.
  • Pentru dezvoltatorul Unity, consultați acest ghid.
  • Pentru dezvoltatorul Unreal, consultați acest ghid.

3.1.6 Calitate adaptivă
Pentru a economisi bateria și a menține performanța de redare a dispozitivului, această funcție ajustează automat nivelurile de performanță ale ceasului CPU/GPU în funcție de utilizarea acestora. În plus, pot fi implementate și alte strategii pentru a îmbunătăți performanța, cum ar fi activarea/dezactivarea automată a Foveation sau conținutul se poate ajusta singur dacă primește evenimente cu sarcină mare/scăzută.

  • Pentru dezvoltatorii nativi, consultați acest ghid.
  • Pentru dezvoltatorul Unity, consultați acest ghid. În pluginul nostru Unity, dimensiunea bufferului pentru ochi poate fi ajustată automat în funcție de performanța curentă; Dimensiunea textului va filtra valorile de scară care sunt prea mici în lista Rezoluție. Vă recomandăm text cu dimensiunea de cel puțin 20 dmm sau mai mare.
  • Pentru dezvoltatorul Unreal, consultați acest ghid.

3.1.7 Compozitor Adaptive Motion
Această caracteristică este o caracteristică experimentală care include UMC și PMC. UMC va reduce rata de cadre la jumătate și va extrapola un nou cadru în timp real pentru a menține netezimea vizuală. Cu toate acestea, vine cu o latență, artefacte și încărcare GPU.
PMC utilizează în primul rând Depth Buffer pentru a permite ATW să țină cont de traducerea HMD, extinzându-se la o compensare de 6 dof. Această caracteristică poate reduce latența de traducere cu 1 ~ 2 cadre, dar poate crește încărcarea GPU-ului.

  • Pentru dezvoltatorii nativi, consultați acest ghid.
  • Pentru dezvoltatorul Unity, consultați acest ghid.
  • Pentru dezvoltatorul Unreal, consultați acest ghid.

3.1.8 Render Mask [Nu acceptă ireal]
Pixelii de la margini devin aproape invizibili după distorsiuni, masca de randare modifică valorile tamponului de adâncime ale acestor pixeli invizibili. Dacă activați testarea de adâncime, din cauza z-ului timpuriu, acești pixeli invizibili nu vor fi randați, reducând astfel încărcarea GPU-ului. Această caracteristică este utilă dacă există obiecte de randare cu încărcare grea în aceste zone invizibile; în caz contrar, dacă nu există obiecte de randare în aceste zone, se recomandă dezactivarea acestuia deoarece va consuma o utilizare mică a GPU-ului.

  • Pentru dezvoltatorii nativi, consultați acest ghid. Trebuie să legați tamponul de adâncime înainte de a apela RenderMask; altfel, va fi ineficient.
  • Pentru dezvoltatorul Unity, consultați acest ghid.
  • Pentru dezvoltatorul Unreal, momentan nu acceptă caracteristica Render Mask.

3.2 Conținutul MR
3.2.1 Ajustați calitatea trecerii
Există 3 niveluri pentru calitatea imaginii de trecere:
➢ WVR_PassthroughImageQuality_DefaultMode – potrivit pentru conținutul MR fără cerere specifică.
➢ WVR_PassthroughImageQuality_PerformanceMode – potrivit pentru conținutul MR care necesită mai multe resurse GPU pentru redarea scenei virtuale.
➢ WVR_PassthroughImageQuality_QualityMode – potrivit pentru conținutul MR care permite utilizatorilor să vadă mediul înconjurător în mod clar, dar scena virtuală a conținutului trebuie să aibă un reglaj mai fin pentru performanță.
Puteți ajusta calitatea Passthrough la PerformanceMode pentru a reduce utilizarea GPU-ului.

  • Pentru dezvoltatorii Native, Uunity sau Unreal, consultați acest ghid.

3.2.2 Ajustați rata de cadru de trecere
La fel ca rata de reîmprospătare a afișajului, rata de cadre mai mare de trecere oferă imagini mai fluide, dar vin cu prețul încărcării crescute a sistemului. În schimb, ratele de reîmprospătare mai mici reduc încărcarea sistemului, dar au ca rezultat imagini mai puțin fluide. Există 2 moduri de framerate de trecere: Boost și Normal.

  • Pentru dezvoltatorii nativi, pot ajusta calitatea de trecere folosind WVR_SetPassthroughImageRate.
  • Pentru dezvoltatorul Unity, se poate schimba prin cod, de exampsetările fișierului sunt după cum urmează // C#
    Interop.WVR_SetPassthroughImageQuality(WVR_PassthroughImageQuality.PerformanceMode);
  • Pentru dezvoltatorul Unreal, metoda de setare, vezi nodul planului din Figura 3-2-2.

Performanță de redare VIVE VR - Fig 4

Setarea VIVE OpenXR

OpenXR este un standard deschis care oferă un set comun de API-uri pentru dezvoltarea aplicațiilor XR care rulează pe o gamă largă de dispozitive VR, dezvoltate de Khronos Group. VIVE Focus 3 și VIVE XR Elite acceptă, de asemenea, OpenXR, VIVE OpenXR SDK oferă suport complet pentru dispozitivele HTC VR, permițând dezvoltatorilor să creeze Allin-One și conținut cu motorul Unity și Unreal pe dispozitivele HTC VR. Optimizăm și rezolvăm în mod continuu diverse erori, așa că este recomandat ca dezvoltatorii să actualizeze versiunea FOTA a dispozitivului pentru a-l menține la zi. În prezent, VIVE OpenXR SDK acceptă OpenGL ES și Vulkan.

4.1 Conținut VR
4.1.1 Rata de reîmprospătare a afișajului
Conceptul de aici este similar cu 3.1.1 Rata de reîmprospătare a afișajului.

  • Pentru dezvoltatorii nativi, consultați XrEventDataDisplayRefreshRateChangedFB.
  • Pentru dezvoltatorul Unity, consultați acest ghid.
  • Pentru dezvoltatorul Unreal, consultați acest ghid.

4.1.2 Rezoluția tamponului ocular
Conceptul de aici este similar cu 3.1.2 Eyebuffer Resolution. vă recomandăm să nu reduceți factorul de scară sub 0.7, deoarece acest lucru poate duce la o calitate vizuală inacceptabilă.

  • Pentru dezvoltatorii nativi, consultați xrCreateSwapchain. Când ajustați dimensiunea, ar trebui să înmulțiți lățimea și înălțimea cu un raport. ,
  • Pentru dezvoltatorul Unity, consultați următorul exempluample // C#
    XRSettings.eyeTextureResolutionScale = 0.7f; //recomandat 1.0f~0.7f
  • Pentru setările Unreal, consultați acest ghid.

4.1.3 Multi-View Redare
Conceptul de aici este similar cu 3.1.3 Multi-View Redare. Această caracteristică reduce sarcina procesorului, GPU-ul are și unele beneficii. Vă recomandăm să activați această funcție.

  • Pentru dezvoltatorii nativi, KhronosGroup oferă un OpenXR Multi-View example, consultați acest ghid.
  • Pentru dezvoltatorul Unity, consultați Modul de randare, o singură trecere este multi-view caracteristică.
  • Pentru dezvoltatorii Unreal, ca și în cazul setărilor VIVE Wave, consultați acest ghid.

4.1.4 Foveation [Nu acceptă ireal]
Conceptul de aici este similar cu 3.1.4 Foveation. Redarea foveated este concepută în primul rând pentru a reduce încărcarea GPU-ului, dar activarea acesteia va implica un cost fix de performanță a GPU-ului și, dacă foveația este setată prea scăzută și sunt utilizate anumite materiale sau texturi, poate deveni foarte
vizibil pentru utilizator. Prin urmare, este recomandabil să activați sau să dezactivați funcția pe baza cerințelor dvs. specifice și a considerentelor de performanță. În prezent, funcționalitatea Foveated este acceptată numai în OpenGL ES pe VIVE OpenXR SDK.

  • Pentru dezvoltatorii nativi, această caracteristică este disponibilă, dar în prezent, nu există example sunt furnizate.
  • Pentru dezvoltatorul Unity, consultați acest ghid.
  • Pentru dezvoltatorul Unreal, nu acceptă această caracteristică momentan.

4.1.5 Render Mask [Nu acceptă ireal]
Conceptul de aici este similar cu 3.1.8 Render Mask.

  • Pentru dezvoltatorii nativi, utilizați XrVisibilityMaskKHR pentru a obține Mesh-ul. Înainte de a randa scena, utilizați acest Mesh pentru a popula valorile tampon de adâncime înainte de a randa scena.
  • Pentru dezvoltatorul Unity, caracteristica Render Mask este activată în mod implicit pentru OpenGL ES și poate fi dezactivată cu următorul cod; Vulkan nu acceptă în prezent această caracteristică. //C# UnityEngine.XR.XRSettings.occlusionMaskScale = 0.0f;
  • Pentru dezvoltatorul Unreal, momentan nu acceptă caracteristica Render Mask.

4.2 Conținutul MR
În prezent, OpenXR nu acceptă setarea calității de trecere și a ratei de cadre. Vom continua să optimizăm și să reparăm funcția Passthrough, așa că se recomandă dezvoltatorilor să actualizeze versiunea FOTA a dispozitivului pentru a o menține la zi.

Optimizare comună

5.1 Dezactivați modul de înaltă performanță
Dezactivarea „Modului de înaltă performanță” poate reduce dimensiunea afișajului dispozitivului, reducând astfel utilizarea GPU-ului. Dezavantajul este o scădere a rezoluției ecranului. Puteți echilibra calitatea și performanța pentru a decide dacă le activați.
Locația de setare pentru VIVE Focus 3 este prezentată în Figura 5-1-1:

Performanță de redare VIVE VR - Fig 5

Locația de setare pentru VIVE XR Elite este prezentată în Figura 5-1-2:

Performanță de redare VIVE VR - Fig 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.

  • Pentru dezvoltatorii nativi, MSAA OpenGL ES exsample pot referi la aceasta; MSAA Vulkan exampler se poate referi la asta.
    GPU-ul Adreno oferă o extensie care optimizează MSAA.
  • Pentru dezvoltatorul Unity, consultați această breaslă.
  • For Unreal developer, refer to this guild. Unreal also has provide post processing anti-aliasing, refer to this guild.

5.3 Încărcare/Depozitare GMEM
În arhitectura GPU Adreno, există o caracteristică în care, la legarea unei ținte de randare, dacă ținta de randare nu se șterge sau nu se invalidează, de fiecare dată când are loc randarea, valorile din ținta de randare sunt încărcate în memoria grafică, care se numește GMEM Load. Dacă valorile anterioare nu sunt necesare, ștergeți sau invalidați Render Target înainte de randare, puteți evita această situație pentru a îmbunătăți performanța GPU-ului.
Puteți evita încărcarea GMEM utilizând următoarele metode. În OpenGL ES, după legarea FBO, puteți apela glClear și glClearDepth pentru a șterge bufferul Color, Depth și Stencil sau puteți apela glInvalidateFramebuffer pentru a invalida ținta de randare specificată. În Vulkan, instrucțiuni suplimentare nu sunt necesare; puteți seta în mod explicit dacă să ștergeți atașamentul înainte de utilizare în VkAttachmentDescription.loadOp.
În mod similar, stocarea rezultatului unui Tile Render înapoi în memoria principală din memoria grafică se numește Magazin GMEM; această operațiune este costisitoare și pentru GPU. Pentru a evita acest lucru, vă recomandăm să legați numai țintele de randare necesare pentru a preveni operațiunile inutile de stocare.

5.4 Strat de compoziție (Multi Layer)
Texturile afișate folosind Multi-Layer au o calitate vizuală mai bună. Cu toate acestea, această caracteristică crește semnificativ performanța GPU-ului cu numărul de straturi și dimensiunea texturilor. Recomandăm să nu depășească trei straturi.

  • Pentru dezvoltatorul nativ,
    o VIVE Wave SDK utilizează WVR_SubmitFrameLayers pentru a transmite date pentru fiecare strat.
    o VIVE OpenXR SDK plasează datele stratului în XrFrameEndInfo și le trimite prin xrEndFrame.
  • Pentru dezvoltatorul Unity,
    o Setări VIVE Wave SDK, consultați acest ghid,
    o Setările VIVE OpenXR, consultați acest ghid.
  • Pentru dezvoltatorul Unreal,
    o Setări VIVE Wave SDK, consultați acest ghid.
    o Setările VIVE OpenXR, consultați acest ghid.

5.5 CPU Spike
Când încărcarea procesorului este mai grea, unele procese în fundal fire de execuție având prioritate mare, ar putea întrerupe execuția nativă. Nu putem garanta că aplicația de conținut nu va fi întreruptă de un alt fir.
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.

  • Pentru Unity Developer, consultați caracteristica de configurare a firelor de discuție Android. Dacă utilizați VIVE Wave SDK, avem o funcție în WaveXRSettings care vă permite să ajustați prioritatea, așa cum se arată în Figura 5-5-2. Valoarea mai mică reprezintă o prioritate mai mare.

Performanță de redare VIVE VR - Fig 7

  • Ireal nicio metodă de a schimba firul de joc, firul de redare și prioritatea firului RHI prin setări externe, dacă nu modificați codul motorului.

Copyright © 2024 HTC Corporation. Toate drepturile rezervatesigla VIVE

Documente/Resurse

Performanța de randare VIVE VR [pdfGhid de utilizare
Performanță de randare VR, Performanță de randare, Performanță

Referințe

Lasă un comentariu

Adresa ta de e-mail nu va fi publicată. Câmpurile obligatorii sunt marcate *