
Performanca e interpretimit të VR
Akordimi dhe Optimizimet
Hyrje
Arritja e një përvoje optimale VR në pajisje me burime të kufizuara është çelësi për të ofruar një përvojë të qetë dhe të rehatshme për përdoruesin. Nëse shpejtësia e renderimit të përmbajtjes bie ose është e paqëndrueshme nën shpejtësinë e rifreskimit të pajisjes, kjo do të çojë në dridhje dhe bllokim të kuadrove, të përziera nga lëvizja etj., të cilat në fund do të ndikojnë negativisht në përvojën e përdoruesit. Prandaj, optimizimi i performancës së përmbajtjes është shumë i rëndësishëm për të siguruar një përvojë të këndshme.
Para se të filloni rregullimin e performancës, është e rëndësishme të kuptoni se ku janë pengesat e performancës për të shmangur rregullimin joefikas. Ky dokument është hartuar për të ndihmuar zhvilluesit të identifikojnë pengesat e performancës dhe të ofrojnë zgjidhje për të zgjidhur problemet e performancës së renderimit.
Dokumenti është i organizuar në seksionet e mëposhtme:
- Kapitulli 2: Identifikoni Grykën e Ngushticës – Ky seksion i ndihmon zhvilluesit të identifikojnë se ku ndodhen grykat e ngushta.
- Kapitulli 3 dhe 4: Cilësimet e VIVE Wave dhe VIVE OpenXR – Këto seksione përshkruajnë cilësime specifike që mund të ndikojnë në performancën e CPU/GPU për aplikacionet VIVE Wave dhe OpenXR. Zhvilluesit mund të eksperimentojnë me aktivizimin ose çaktivizimin e këtyre veçorive bazuar në pengesat e performancës që hasen për të përcaktuar nëse ka ndonjë përmirësim.
- Kapitulli 5: Optimizimi i Zakonshëm – Ky seksion ndan disa praktika dhe përvoja të zakonshme të optimizimit.
Identifikoni Grykën e Ngushticës
Kur HMD është në lëvizje, nëse aplikacioni VR/MR ka luhatje të kornizës ose skaj të zi etj., kjo zakonisht shkaktohet nga një problem me performancën e dobët të renderimit. Në mënyrë tipike, problemet e performancës së renderimit mund të kategorizohen në 2 lloje: të lidhura me CPU-në ose të lidhura me GPU-në. Të kuptuarit se cilat lloje të lidhjeve për aplikacionin tuaj është shumë e rëndësishme në fillim për të shmangur akordimin joefikas.
Në këtë kapitull, ne ofrojmë hapa të thjeshtë që ju lejojnë të identifikoni shpejt se ku janë problemet e performancës.
2.1 Kontrolloni FPS-në e Renderimit të Përmbajtjes
Së pari, fillojmë duke kontrolluar FPS-in e përmbajtjes, që është numri i kuadrove që përmbajtja mund të renderojë në sekondë. Duhet të mbahet në shpejtësinë e kuadrove të shfaqura dhe të jetë i qëndrueshëm. Përndryshe, mund të shkaktojë luhatje të kuadrove.
Nëse SDK-ja e aplikacionit tuaj po përdor VIVE WAVE SDK 6.0.0 ose më të ri, mund të përdorni komandën e mëposhtme adb për të kontrolluar FPS-në. DK 6.0.0
$adb Logcat -s VRMetric
Do të shihni të dhënat e mëposhtme të regjistrit.
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” Numri i parë përfaqëson FPS-in e përmbajtjes, ndërsa numri i dytë përfaqëson shpejtësinë e kuadrove të ekranit.
Nëse versioni juaj i Wave SDK është më i ri se versioni 6.0.0, rekomandohet ta përditësoni në versionin më të fundit për të përmirësuar performancën e renderimit dhe optimizimin e të tjerëve.
Nëse SDK-ja e aplikacionit tuaj është ndërtuar me VIVE OpenXR, mund të përdorni komandën e mëposhtme adb për të kontrolluar FPS-në.
$adb Logcat -s RENDER_ATW
Do të shihni të dhënat e mëposhtme të regjistrit
RENDER_ATW: [FPS] teksturë e re: 90.00
RENDER_ATW: [FPS] R i pranishëm: 90.00 kapërce: 0 317, -0.0155 0.805527, 0.006788)
RENDER_ATW: [FPS] L i pranishëm:90.00 kapërce:0 (0.592301, -0.015502, 0.805539, 0.006773)
Numri që vjen pas "teksturës së re" përfaqëson FPS-in e përmbajtjes aktuale. Numri që vjen pas "R është i pranishëm" dhe "L është i pranishëm" përfaqëson shpejtësinë e kuadrove të ekranit.
Ndonjëherë, FPS e përmbajtjes dhe shpejtësia e kuadrove të ekranit mund të kenë një mospërputhje të vogël.
Për shembullampPra, në rastin e mësipërm, 89.8 FPS mund të konsiderohet si 90 FPS.
Nëse FPS e përmbajtjes së aplikacionit është vazhdimisht më e ulët se shpejtësia e kuadrove të ekranit ose mbetet e paqëndrueshme, kjo tregon një problem me performancën e renderimit. Prandaj, hapi tjetër është të identifikoni nëse pengesa vjen nga CPU apo GPU.
2.2 Kontrolloni përdorimin e CPU-së dhe GPU-së
Nëse SDK-ja e aplikacionit tuaj po përdor VIVE WAVE SDK 6.0.0 ose më të ri, mund të përdorni komandën e mëposhtme adb për të kontrolluar FPS-në.
$adb logcat -s VRMetric
Do të shihni të dhënat e mëposhtme të regjistrit.
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
Siç mund ta shihni në rezultatin e regjistrit më sipër, përdorimi i CPU-së është 27% dhe përdorimi i GPU-së është 72%. Nëse versioni juaj i Wave SDK është nën versionin 6.0.0, rekomandohet të përditësoni në versionin më të fundit për të përmirësuar performancën e renderimit dhe optimizimin e të tjerave.
Për aplikacionin VIVE OpenXR, mund të përdorni komandën e mëposhtme për të kontrolluar përdorimin e CPU-së dhe GPU-së.
# në linux/ubuntu
$ adb logcat | grep CPU_USAGE
# në PowerShell
$ adb logcat | Zgjidhni-String -Modeli CPU_USAGE
Do të shihni regjistrin e mëposhtëm
Mesatarja e CPU-së CPU0 CPU1 CPU2 CPU3 CPU4 CPU5 CPU6 CPU7 GPU PËRDORIMI I CPU-së [NGARKESË] 25.67% 32.22% 25.29% 30.77% 29.35% 21.35% 22.09% 18.39% 24.14% 73 %
Nëse vini re se FPS nuk mund ta mbajë shpejtësinë e kuadrove të ekranit dhe përdorimi i GPU-së është gjithashtu shumë i lartë, zakonisht tejkalon 85%, mund të provoni të rregulloni Rezolucionin e Eyebuffer (seksioni 3.1.2, seksioni 4.1.2) për të parë nëse përmirëson FPS. Nëse ky rregullim çon në një rezultat më të mirë
performancën, mund të konkludojmë se problemi lidhet me GPU-në dhe t'i përqendrojmë përpjekjet tona të optimizimit në përputhje me rrethanat.
Nga ana tjetër, nëse rregullimi i Rezolucionit të Eyebuffer nuk rezulton në një përmirësim të dukshëm të performancës, problemi ka të ngjarë të jetë i lidhur me CPU-në dhe ne duhet të përqendrohemi në optimizimin e performancës së CPU-së.
Është gjithashtu e mundur që aplikacioni të jetë i lidhur njëkohësisht me CPU-në dhe GPU-në. Në raste të tilla, përpjekjet për optimizim duhet të zbatohen si për CPU-në ashtu edhe për GPU-në për të arritur përmirësime të balancuara të performancës.
2.3 I lidhur me GPU-në
Kur një aplikacion VR është i lidhur me GPU-në, kjo do të thotë që GPU është pengesa kryesore dhe nuk është në gjendje të përballojë kërkesat e renderimit të aplikacionit. Për të zbutur problemet e lidhura me GPU-në, merrni në konsideratë rekomandimet e mëposhtme:
Së pari, përdorni mjete profilizimi si RenderDoc ose Game Engine profiler (Unity Profiler, Unreal Insights) për të analizuar se ku GPU-ja po e kalon pjesën më të madhe të kohës së saj. Identifikoni operacionet më të kushtueshme dhe përqendrohuni në optimizimin e tyre.
Për Native Developer, mund të përdorni RenderDoc për të identifikuar se cila thirrje vizatimi po shkakton ngarkesë të tepërt të GPU-së.
Për Zhvilluesin e Unity, mund të ndiqni këtë dokument të Unity ose të përdorni RenderDoc për të analizuar problemet e performancës së renderimit dhe të ndiqni dokumentacionin e optimizimit të grafikës së Unity për udhëzime se si të optimizoni aplikacionin tuaj.
Për Unreal Developer, mund të përdorni GPU Visualizer ose RenderDoc për të analizuar problemet e performancës së renderimit dhe të ndiqni Udhëzimet e Performancës Unreal për udhëzime për të optimizuar aplikacionin tuaj.
Së dyti, mund të provoni gjithashtu të rregulloni disa veçori ose cilësime të Wave për të zvogëluar ngarkesën e GPU-së.
- Cakto Ritmin e Rifreskimit të Ekranit më të ngadaltë (seksioni 3.1.1, seksioni 4.1.1)
- Rregulloni Rezolucionin e Eyebuffer (seksioni 3.1.2, seksioni 4.1.2), 14.1.1)
- Mundohu të aktivizosh Foveation (seksioni 3.1.4, seksioni 4.1.4).
Nëse aplikacioni juaj është gjithashtu një aplikacion MR, mund të rregulloni edhe cilësimet e Passthrough.
- Rregulloni Cilësinë e Imazhit Kalimtar më të ulët. (seksioni 3.2.1)
- Rregullo shpejtësinë e kuadrove të kalimit (Passthrough Framerate) më të ngadaltë. (seksioni 3.2.2).
Për më shumë cilësime të tjera rreth performancës së GPU-së, mund t'i referoheni Kapitullit 2.6.
2.4 I lidhur me CPU-në
Kur një aplikacion VR është i lidhur me CPU-në, kjo do të thotë që CPU është pengesa kryesore, merrni parasysh rekomandimet e mëposhtme:
Së pari, përdorni mjete profilizimi si Systrace ose Game Engine profiler (Unity Profiler, Unreal Insights) për të analizuar dhe identifikuar se cilat pjesë të kodit tuaj po konsumojnë më shumë burime të CPU-së. Përqendrohuni në optimizimin e këtyre zonave dhe rifaktorizoni algoritmet që kërkojnë shumë energji kompjuterike për të zvogëluar ngarkesën e CPU-së.
- Për Zhvilluesin Native, mund të përdorni Systrace për të zhvilluarfilepër projektin tuaj.
- Për Unity Developer, mund të përdorni CPU Usage Profilemoduli r për të gjetur problemin e performancës së CPU-së.
- Për Zhvilluesin Unreal, mund të përdorni Insights të Unreal për të gjetur problemin e performancës së CPU-së.
Së dyti, mund të provoni gjithashtu të rregulloni disa veçori ose cilësime të Wave për të zvogëluar ngarkesën e GPU-së.
- Cakto Ritmin e Rifreskimit të Ekranit më të ngadaltë (seksioni 3.1.1, seksioni 4.1.1)
- Përdorni Multi-View Renderimi (seksioni 3.1.4, seksioni 4.1.4)
Nëse aplikacioni juaj është gjithashtu një aplikacion MR, mund të rregulloni edhe cilësimet e Passthrough.
- Rregullo shpejtësinë e kuadrove të kalimit (passthrough) më të ngadaltë (seksioni 3.2.2).
Për më shumë cilësime të tjera rreth performancës së CPU-së, mund t'i referoheni Kapitullit 2.6.
2.5 Përmbledhje
Së fundmi, e kemi organizuar rrjedhën e punës së kontrollit të performancës së mësipërme në Figurën 2-5-1. Filloni duke kontrolluar FPS-në e përmbajtjes. Nëse është më e ulët se shpejtësia e kuadrit të ekranit ose mbetet e paqëndrueshme, atëherë analizoni përdorimin e GPU-së/CPU-së për të përcaktuar nëse është i lidhur me GPU-në apo me CPU-në. Së fundmi, përdorni një profesionist.filer për të identifikuar probleme të mundshme të performancës ose për të rregulluar veçoritë ose cilësimet e Wave për të optimizuar performancën e CPU-së.

2.6 Referencë e shpejtë Cilat cilësime mund të përmirësojnë ngarkimin e CPU-së/GPU-së
Renditni cilësimet e SDK-së që lidhen me ngarkimin e CPU-së/GPU-së si më poshtë. Mund të bazoheni në bllokimin e aplikacionit për të kontrolluar cilësimet përkatëse të optimizimit.
Lidhur me CPU-në:
- Cilësimet e SDK-së së VIVE Wave
Përmbajtje VR
▪ 3.1.1 Shpejtësia e Rifreskimit të Ekranit
▪ 3.1.4 Shumë-View Rendering
▪ 3.1.6 Cilësia Adaptive
▪ 3.1.7 Kompozitor Lëvizjeje Adaptuese
o Përmbajtja e MR-së
▪ 3.2.2 Rregullimi i shpejtësisë së kuadrove të kalimit - Cilësimet e SDK-së VIVE OpenXR
Përmbajtje VR
▪ 4.1.1 Shpejtësia e Rifreskimit të Ekranit
▪ 4.1.4 Shumë-View Rendering - Optimizimi i Përbashkët
o 5.5 CPU Spike
Lidhur me GPU-në:
- Cilësimet e SDK-së së VIVE Wave
Përmbajtje VR
▪ 3.1.1 Shpejtësia e Rifreskimit të Ekranit
▪ 3.1.2 Rezolucioni i Eyebuffer
▪ 3.1.3 Shumë-View Rendering
▪ 3.1.4 Foveacion
▪ 3.1.5 Përmirësimi i Mprehtësisë së Kuadrove (FSE)
▪ 3.1.6 Cilësia Adaptive
▪ 3.1.7 Kompozitor Lëvizjeje Adaptuese
▪ 3.1.8 Render Mask [Not Support Unreal]
o Përmbajtja e MR-së
▪ 3.2.1 Rregullimi i Cilësisë së Kalimit
▪ 3.2.2 Rregullimi i shpejtësisë së kuadrove të kalimit - Cilësimet e SDK-së VIVE OpenXR
Përmbajtje VR
▪ 4.1.1 Shpejtësia e Rifreskimit të Ekranit
▪ 4.1.2 Rezolucioni i Eyebuffer
▪ 4.1.3 Shumë-View Rendering
▪ 4.1.4 Foveation [Not Support Unreal]
▪ 4.1.5 Render Mask [Not Support Unreal] - Optimizimi i Përbashkët
o 5.1 Çaktivizoni Modalitetin e Performancës së Lartë
o 5.2 Multisampling
o 5.3 Ngarkimi/Depozitimi i GMEM
o 5.4 Shtresa e Kompozimit (Shumështresa)
Cilësimi i Valës VIVE
VIVE Wave është një platformë dhe një set mjetesh i hapur që ju lejon të zhvilloni lehtësisht përmbajtje VR dhe ofron optimizim të pajisjeve me performancë të lartë për partnerë të palëve të treta. VIVE Wave mbështet motorët e lojërave Unity dhe Unreal.
Ne vazhdimisht optimizojmë dhe zgjidhim gabime të ndryshme, prandaj rekomanduam që SDK-ja të mbahet e përditësuar.
Aktualisht, VIVE Wave mbështet vetëm OpenGL ES. Këtu renditen veçoritë e renditura sipas ndikimit në performancën e GPU-së. Do ta ndajmë këtë në dy pjesë: përmbajtje VR dhe përmbajtje MR.
3.1 Përmbajtje VR
3.1.1 Shpejtësia e Rifreskimit të Ekranit
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.
- Për zhvilluesit vendas, referojuni WVR_SetFrameRate.
- Për zhvilluesit e Unity, referojuni këtij udhëzuesi.
- Për zhvilluesit e Unreal, referojuni këtij udhëzuesi.
3.1.2 Rezolucioni i Eyebuffer
Zgjidhja e Eyebuffer është madhësia e teksturës që përmbajtja e aplikacionit do të renderohet. Tekstura e renderuar do të dërgohet në kohën e ekzekutimit për të kryer procesin e postimit dhe për t'u paraqitur në ekranin HMD.
Ndërkohë që një madhësi më e madhe e bufferit të syrit mund të rezultojë në pamje më të qarta dhe më të detajuara, ajo gjithashtu imponon një ngarkesë të konsiderueshme në GPU. Prandaj, gjetja e ekuilibrit të duhur midis cilësisë vizuale dhe performancës është thelbësore.
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.
- Për zhvilluesit vendas, referojuni WVR_ObtainTextureQueue. Kur rregulloni madhësinë, duhet të shumëzoni gjerësinë dhe lartësinë me një raport.
- Për zhvilluesit e Unity, referojuni WaveXRSettings.
Si alternativë, mund të bëni ndryshime nëpërmjet kodit si belwoe.
XRSettings.eyeTextureResolutionScale = ResolutionScaleValue; // C# - Për zhvilluesit Unreal, referojuni SetPixelDensity.
3.1.3 Shumë-View Rendering
Në renderimin tradicional, ne i vizatojmë sytë e majtë dhe të djathtë veçmas, gjë që kërkon dy thirrje vizatimi për të njëjtën skenë.View Renderimi e adreson këtë problem duke kryer vetëm një thirrje vizatimi.
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.
- Për zhvilluesit Native, mund t'i referoheni wvr_native_hellovr sample.
- Për zhvilluesit e Unity, referojuni Modalitetit të Renderimit, kalimi i vetëm është shumë-view veçori.
- Për zhvilluesit e Unreal, referojuni këtij udhëzuesi.
3.1.4 Foveacion
Renderimi i foveatuar është projektuar kryesisht për të zvogëluar ngarkesën e GPU-së. Ai zvogëlon detajet e kuadrit në periferi të ekranit dhe ruan detaje me rezolucion të lartë në qendër të fushës së viewNëse aplikacioni ka probleme me GPU-në, mund të provoni të aktivizoni renderimin e Foveation.

Ka diçka që duhet të merret në konsideratë gjatë përdorimit të foveacionit:
➢ Përdoruesit zakonisht nuk e vënë re detajet e reduktuara në rajonet periferike kur aplikojnë modalitetin e parazgjedhur të foveacionit. Por nëse cilësia periferike e foveacionit është vendosur shumë e ulët, kjo mund të bëhet e dukshme për përdoruesin.
➢ Efektet e foveacionit mund të jenë më të dukshme me materiale të caktuara me tekstura, të cilat mund të tërheqin vëmendjen e përdoruesit. Zhvilluesit duhet të jenë të vetëdijshëm për këtë dhe ta vlerësojnë atë në përputhje me rrethanat.
➢ Aktivizimi i funksionit të renderimit të paracaktuar sjell një kosto fikse të performancës së GPU-së, e cila mund të ndryshojë midis 1% dhe 6% në varësi të madhësisë së buffer-it të syrit. Kur përdorni një shader të thjeshtë në skenë, fitimi i performancës nga kursimi i burimeve mund të jetë më i ulët se kostoja fikse e performancës së GPU-së, duke rezultuar në një rënie të performancës.
- Për zhvilluesit Native, referojuni këtij udhëzuesi.
- Për zhvilluesit e Unity, referojuni këtij udhëzuesi. Veçanërisht, kur aktivizoni përpunimin pas përpunimit ose HDR, foveacioni nuk mund të përdoret plotësisht. Sepse Unity do t'i renderojë objektet në teksturën e renderimit të gjeneruar nga vetja, në vend të teksturës së renderimit të prezantimit të gjeneruar nga koha e ekzekutimit që mbështet foveacionin.
- Për zhvilluesit e Unreal, referojuni këtij udhëzuesi. Veçanërisht, foveation nuk mund të përdoret plotësisht në Multi-View Renderimi, sepse Unreal nuk mund të renderojë drejtpërdrejt objektet në teksturën e renderimit të gjeneruar nga koha e ekzekutimit që mbështet foveacionin.
3.1.5 Përmirësimi i Mprehtësisë së Kuadrove (FSE)
FSE që ofron rezultate të mprehta të renderimit nëpërmjet futjes së filtrit të mprehjes, mund ta bëjë përmbajtjen më të qartë dhe të jetë mjaft e dobishme për përmirësimin e qartësisë së tekstit në skenë. Nëse aplikacioni ka probleme me GPU-në, mund të merrni në konsideratë çaktivizimin e FSE nëse nuk është thelbësor.

- Për zhvilluesit Native, referojuni këtij udhëzuesi.
- Për zhvilluesit e Unity, referojuni këtij udhëzuesi.
- Për zhvilluesit e Unreal, referojuni këtij udhëzuesi.
3.1.6 Cilësia Adaptive
Për të kursyer baterinë dhe për të ruajtur performancën e renderimit të pajisjes, kjo veçori rregullon automatikisht nivelet e performancës së orës së CPU-së/GPU-së bazuar në përdorimin e tyre. Përveç kësaj, mund të zbatohen strategji të tjera për të përmirësuar performancën, siç është aktivizimi/çaktivizimi automatik i Foveation ose përmbajtja mund të rregullohet vetë nëse merr ngjarje ngarkese të lartë/të ulët.
- Për zhvilluesit Native, referojuni këtij udhëzuesi.
- Për zhvilluesit e Unity, referojuni këtij udhëzuesi. Në shtojcën tonë Unity, madhësia e buffer-it të syrit mund të rregullohet automatikisht bazuar në performancën aktuale; Madhësia e tekstit do të filtrojë vlerat e shkallës që janë shumë të vogla në listën e Rezolucionit. Ne rekomandojmë tekst me madhësi të paktën 20 dmm ose më të madhe.
- Për zhvilluesit e Unreal, referojuni këtij udhëzuesi.
3.1.7 Kompozitor Lëvizjeje Adaptuese
Kjo veçori është eksperimentale që përfshin UMC dhe PMC. UMC do ta përgjysmojë Frekuencën e Kuadrove dhe do të nxjerrë kuadro të reja në kohë reale për të ruajtur rrjedhshmërinë vizuale. Megjithatë, ajo vjen me disa vonesa, artefakte dhe ngarkim të GPU-së.
PMC përdor kryesisht Depth Buffer për të lejuar ATW të marrë në konsideratë përkthimin HMD, të shtrihet në një kompensim prej 6 nivelesh. Kjo veçori mund të zvogëlojë vonesën e përkthimit me 1~2 korniza, por të rrisë ngarkesën e GPU-së.
- Për zhvilluesit Native, referojuni këtij udhëzuesi.
- Për zhvilluesit e Unity, referojuni këtij udhëzuesi.
- Për zhvilluesit e Unreal, referojuni këtij udhëzuesi.
3.1.8 Maska e Renderimit [Nuk Mbështetet Unreal]
Pikselët në skaje bëhen pothuajse të padukshëm pas shtrembërimit, maska e renderimit modifikon vlerat e bufferit të thellësisë së këtyre pikselëve të padukshëm. Nëse aktivizoni testimin e thellësisë, për shkak të versionit të hershëm z, këta pikselë të padukshëm nuk do të renderohen, duke zvogëluar kështu ngarkesën e GPU-së. Kjo veçori është e dobishme nëse ka objekte renderimi me ngarkesë të lartë në këto zona të padukshme; përndryshe, nëse nuk ka objekte renderimi në këto zona, rekomandohet ta çaktivizoni sepse do të konsumojë një përdorim të vogël të GPU-së.
- Për zhvilluesit vendas, referojuni këtij udhëzuesi. Duhet të lidhni buffer-in e thellësisë përpara se të thirrni RenderMask; përndryshe, do të jetë joefektiv.
- Për zhvilluesit e Unity, referojuni këtij udhëzuesi.
- Për zhvilluesit e Unreal, aktualisht nuk e mbështet veçorinë Render Mask.
3.2 Përmbajtja e MR-së
3.2.1 Rregullimi i Cilësisë së Kalimit
Ekzistojnë 3 nivele për cilësinë e imazhit kalimtar:
➢ WVR_PassthroughImageQuality_DefaultMode – i përshtatshëm për përmbajtjen MR pa kërkesë specifike.
➢ WVR_PassthroughImageQuality_PerformanceMode – i përshtatshëm për përmbajtjen MR që ka nevojë për më shumë burime GPU për renderimin e skenës virtuale.
➢ WVR_PassthroughImageQuality_QualityMode – i përshtatshëm për përmbajtjen MR që u lejon përdoruesve të shohin qartë mjedisin përreth, por skena virtuale e përmbajtjes duhet të ketë një rregullim më të imët për performancë.
Mund ta rregulloni cilësinë Passthrough në PerformanceMode për të zvogëluar përdorimin e GPU-së.
- Për zhvilluesit Native, Uunity ose Unreal, referojuni këtij udhëzuesi.
3.2.2 Rregullimi i shpejtësisë së kuadrove kalimtare
Ashtu si shpejtësia e rifreskimit të ekranit, shpejtësia më e lartë e kuadrit Passthrough ofron pamje më të lëmuara, por vjen me koston e rritjes së ngarkesës së sistemit. Anasjelltas, shpejtësitë më të ulëta të rifreskimit zvogëlojnë ngarkesën e sistemit, por rezultojnë në pamje më pak të lëmuara. Ekzistojnë 2 mënyra të shpejtësisë së kuadrit passthrough: Boost dhe Normale.
- Për zhvilluesit vendas, mund të rregulloni cilësinë e kalimit duke përdorur WVR_SetPasthroughImageRate.
- Për zhvilluesit e Unity, mund të ndryshohet nëpërmjet kodit, p.sh.ampCilësimet janë si më poshtë // C#
Interop.WVR_SetPasthroughImageQuality(WVR_PasthroughImageQuality.PerformanceMode); - Për metodën e konfigurimit të zhvilluesit Unreal, shihni nyjen e planit në Figurën 3-2-2.

Cilësimet e VIVE OpenXR
OpenXR është një standard i hapur që ofron një grup të përbashkët API-sh për zhvillimin e aplikacioneve XR që funksionojnë në një gamë të gjerë pajisjesh VR, të zhvilluara nga Khronos Group. VIVE Focus 3 dhe VIVE XR Elite gjithashtu mbështesin OpenXR, VIVE OpenXR SDK ofron mbështetje gjithëpërfshirëse për pajisjet HTC VR, duke u lejuar zhvilluesve të ndërtojnë All-One dhe përmbajtje me motorët Unity dhe Unreal në pajisjet HTC VR. Ne vazhdimisht optimizojmë dhe zgjidhim gabime të ndryshme, kështu që rekomandohet që zhvilluesit të përditësojnë versionin FOTA të pajisjes së tyre për ta mbajtur atë të azhurnuar. Aktualisht, VIVE OpenXR SDK mbështet OpenGL ES dhe Vulkan.
4.1 Përmbajtje VR
4.1.1 Shpejtësia e Rifreskimit të Ekranit
Koncepti këtu është i ngjashëm me 3.1.1 Display Refresh Rate.
- Për zhvilluesit vendas, referojuni XrEventDataDisplayRefreshRateChangedFB.
- Për zhvilluesit e Unity, referojuni këtij udhëzuesi.
- Për zhvilluesit e Unreal, referojuni këtij udhëzuesi.
4.1.2 Rezolucioni i Eyebuffer
Koncepti këtu është i ngjashëm me 3.1.2 Eyebuffer Resolution. Ne rekomandojmë të mos e ulni faktorin e shkallës nën 0.7, pasi kjo mund të rezultojë në cilësi vizuale të papranueshme.
- Për zhvilluesit vendas, referojuni xrCreateSwapchain. Kur rregulloni madhësinë, duhet të shumëzoni gjerësinë dhe lartësinë me një raport.
- Për zhvilluesit e Unity, referojuni shembullit të mëposhtëmample // C#
XRSettings.eyeTextureResolutionScale = 0.7f; //e rekomanduar 1.0f~0.7f - Për cilësimet joreale, referojuni këtij udhëzuesi.
4.1.3 Shumë-View Rendering
Koncepti këtu është i ngjashëm me 3.1.3 Multi-View Renderimi. Kjo veçori zvogëlon ngarkesën në CPU, GPU gjithashtu ka disa përfitime. Ne rekomandojmë aktivizimin e kësaj veçorie.
- Për zhvilluesit vendas, KhronosGroup ofron një OpenXR Multi-View example, referojuni këtij udhëzuesi.
- Për zhvilluesit e Unity, referojuni Modalitetit të Renderimit, kalimi i vetëm është shumë-view veçori.
- Për cilësimet e zhvilluesit Unreal, si me cilësimet e VIVE Wave, referojuni këtij udhëzuesi.
4.1.4 Foveation [Nuk mbështet Unreal]
Koncepti këtu është i ngjashëm me 3.1.4 Foveation. Renderimi i Foveated është projektuar kryesisht për të zvogëluar ngarkesën e GPU-së, por aktivizimi i tij do të sjellë një kosto fikse të performancës së GPU-së dhe nëse foveation është vendosur shumë ulët dhe përdoren materiale ose tekstura të caktuara, ai mund të bëhet shumë i...
e dukshme për përdoruesin. Prandaj, këshillohet që ta aktivizoni ose çaktivizoni veçorinë bazuar në kërkesat tuaja specifike dhe konsideratat e performancës. Aktualisht, funksionaliteti Foveated mbështetet vetëm në OpenGL ES në VIVE OpenXR SDK.
- Për zhvilluesit vendas, kjo veçori është e disponueshme, por aktualisht, nuk ka exampjanë dhënë.
- Për zhvilluesit e Unity, referojuni këtij udhëzuesi.
- Për zhvilluesit e Unreal, nuk e mbështet këtë veçori për momentin.
4.1.5 Maska e Renderimit [Nuk Mbështetet Unreal]
Koncepti këtu është i ngjashëm me Render Mask 3.1.8.
- Për zhvilluesit vendas, përdorni XrVisibilityMaskKHR për të marrë Mesh-in. Përpara se të renderoni skenën, përdorni këtë Mesh për të populluar vlerat e buffer-it të thellësisë përpara se të renderoni skenën.
- Për zhvilluesit e Unity, funksioni Render Mask është aktivizuar si parazgjedhje për OpenGL ES dhe mund të çaktivizohet me kodin e mëposhtëm; Vulkan aktualisht nuk e mbështet këtë funksion. //C# UnityEngine.XR.XRSettings.occlusionMaskScale = 0.0f;
- Për zhvilluesit e Unreal, aktualisht nuk e mbështet veçorinë Render Mask.
4.2 Përmbajtja e MR-së
OpenXR aktualisht nuk mbështet caktimin e Cilësisë së Kalimit dhe Shpejtësisë së Kuadrove. Ne do të vazhdojmë të optimizojmë dhe rregullojmë veçorinë e Kalimit, prandaj rekomandohet që zhvilluesit të përditësojnë versionin FOTA të pajisjes për ta mbajtur atë të përditësuar.
Optimizimi i Përbashkët
5.1 Çaktivizoni Modalitetin e Performancës së Lartë
Çaktivizimi i "Modalitetit me performancë të lartë" mund të zvogëlojë madhësinë e ekranit të pajisjes, duke zvogëluar kështu përdorimin e GPU-së. Disavantazhi është ulja e rezolucionit të ekranit. Mund të balanconi cilësinë dhe performancën për të vendosur nëse do ta aktivizoni atë.
Vendndodhja e konfigurimit për VIVE Focus 3 është treguar në Figurën 5-1-1:

Vendndodhja e konfigurimit për VIVE XR Elite tregohet në Figurën 5-1-2:

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.
- Për zhvilluesit vendas, MSAA OpenGL ES exsampmund t'i referohemi kësaj; MSAA Vulkan ishampler mund t'i referohet kësaj.
GPU-ja Adreno ofron një zgjerim që optimizon MSAA-në. - Për zhvilluesit e Unity, referojuni këtij gilde.
- For Unreal developer, refer to this guild. Unreal also has provide post processing anti-aliasing, refer to this guild.
5.3 Ngarkimi/Ruajtja GMEM
Në arkitekturën e GPU-së Adreno, ekziston një veçori ku, kur lidhet një objektiv renderimi, nëse objektivi i renderimit nuk fshihet ose bëhet i pavlefshëm, sa herë që ndodh renderimi, vlerat në objektivin e renderimit ngarkohen në memorien grafike, e cila quhet Ngarkesë GMEM. Nëse vlerat e mëparshme nuk janë të nevojshme, fshirja ose pavlefshmëria e objektivit të renderimit para renderimit mund të shmangë këtë situatë për të përmirësuar performancën e GPU-së.
Mund ta shmangni Ngarkimin e GMEM duke përdorur metodat e mëposhtme. Në OpenGL ES, pasi të keni lidhur FBO-në, mund të thirrni glClear dhe glClearDepth për të pastruar memorjen e ngjyrave, thellësisë dhe stencilit, ose mund të thirrni glInvalidateFramebuffer për të pavlefshëm objektivin e specifikuar të Renderimit. Në Vulkan, udhëzime shtesë nuk janë të nevojshme; mund të vendosni në mënyrë të qartë nëse do ta pastroni bashkëngjitjen para përdorimit në VkAttachmentDescription.loadOp.
Në mënyrë të ngjashme, ruajtja e rezultatit të një Renderimi Tile përsëri në Memorjen Kryesore nga Memoria Grafike quhet GMEM Store; ky operacion është gjithashtu i kushtueshëm për GPU-në. Për ta shmangur këtë, ne rekomandojmë të lidhni vetëm objektivat e kërkuar të Renderimit për të parandaluar operacionet e panevojshme të Ruajtjes.
5.4 Shtresa e Kompozimit (Shumështresa)
Tekstet e shfaqura duke përdorur Multi-Layer kanë një cilësi vizuale më të mirë. Megjithatë, kjo veçori rrit ndjeshëm performancën e GPU-së me numrin e shtresave dhe madhësinë e teksturave. Ne rekomandojmë të mos përdorni mbi tre shtresa.
- Për zhvilluesin Native,
VIVE Wave SDK përdor WVR_SubmitFrameLayers për të kaluar të dhënat për secilën shtresë.
VIVE OpenXR SDK vendos të dhënat e shtresave në XrFrameEndInfo dhe i dërgon ato nëpërmjet xrEndFrame. - Për zhvilluesin e Unity,
o Cilësimet e VIVE Wave SDK, referojuni këtij udhëzuesi,
Cilësimet e VIVE OpenXR, referojuni këtij udhëzuesi. - Për zhvilluesin e Unreal,
Cilësimet e VIVE Wave SDK, referojuni këtij udhëzuesi.
Cilësimet e VIVE OpenXR, referojuni këtij udhëzuesi.
Rritje e CPU-së 5.5
Kur ngarkesa e CPU-së është më e madhe, disa procese në sfond që kanë prioritet të lartë, mund të ndërpresin ekzekutimin vendas. Ne nuk mund të garantojmë që Aplikacioni i Përmbajtjes nuk do të ndërpritet nga fije të tjera.
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.
- Për Unity Developer, referojuni veçorisë së konfigurimit të fijeve të Android. Nëse po përdorni VIVE Wave SDK, ne kemi një veçori në WaveXRSettings që ju lejon të rregulloni përparësinë, siç tregohet në Figurën 5-5-2. Vlera më e vogël përfaqëson përparësi më të lartë.

- Nuk ka metodë joreale për të ndryshuar fijen e lojës, fijen e renderimit dhe përparësinë e fijes RHI përmes cilësimeve të jashtme, përveç nëse modifikoni kodin e motorit.
Të drejtat e autorit © 2024 HTC Corporation. Të gjitha të drejtat e rezervuara
Dokumentet / Burimet
![]() | Performanca e interpretimit të VR |
Referencat
- 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
- Performance Guidelines for Mobile Devices in Unreal Engine | Unreal Engine 5.5 Documentation | Epic Developer Communitydev.epicgames.com
- dev.epicgames.com/documentation/en-us/unreal-engine/unreal-insights-in-unreal-enginedev.epicgames.com
- Dokumentacioni Qualcommdeveloper.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
- Manuali i Përdoruesitmanual.tools
