VIVE logotipasVR atvaizdavimo našumas
Derinimas ir optimizavimas

Įvadas

Optimali VR patirtis ribotos resursų turinčioje įrangoje yra labai svarbi norint užtikrinti sklandžią ir patogią naudotojo patirtį. Jei turinio atvaizdavimo kadrų dažnis sumažėja arba yra nestabilus žemiau įrenginio atnaujinimo dažnio, tai sukels kadrų virpėjimą ir mikčiojimą, judesio ligą ir pan., o tai galiausiai neigiamai paveiks naudotojo patirtį. Todėl turinio našumo optimizavimas yra labai svarbus norint užtikrinti malonią patirtį.
Prieš pradedant našumo derinimą, svarbu suprasti, kur yra našumo kliūtys, kad būtų išvengta neefektyvaus derinimo. Šis dokumentas skirtas padėti kūrėjams nustatyti našumo kliūtis ir pasiūlyti sprendimus, kaip išspręsti atvaizdavimo našumo problemas.
Dokumentas suskirstytas į šiuos skyrius:

  • 2 skyrius: Kliūčių nustatymas. Šis skyrius padeda kūrėjams nustatyti kliūtis.
  • 3 ir 4 skyriai: „VIVE Wave“ ir „VIVE OpenXR“ nustatymai. Šiuose skyriuose aprašomi konkretūs nustatymai, kurie gali turėti įtakos „VIVE Wave“ ir „OpenXR“ programų procesoriaus / grafikos procesoriaus našumui. Kūrėjai gali eksperimentuoti įjungdami arba išjungdami šias funkcijas, atsižvelgdami į patirtas našumo kliūtis, kad nustatytų, ar yra kokių nors patobulinimų.
  • 5 skyrius: Įprastas optimizavimas. Šiame skyriuje aptariami keli įprasti optimizavimo metodai ir patirtis.

Nustatykite kliūtį

Jei HMD juda ir VR/MR programoje matomas kadro virpėjimas, juodi kraštai ir pan., tai dažniausiai lemia prastas vaizdavimo našumas. Paprastai vaizdavimo našumo problemas galima suskirstyti į 2 tipus: su procesoriumi susijusias ir su grafikos procesoriumi susijusias. Pradžioje labai svarbu suprasti, kokių tipų apribojimai taikomi jūsų programai, kad būtų išvengta neefektyvaus derinimo.
Šiame skyriuje pateikiame paprastus veiksmus, kurie leis greitai nustatyti, kur yra našumo problemos.

2.1 Patikrinkite turinio atvaizdavimo FPS
Pirmiausia patikriname turinio FPS, t. y. kadrų skaičių, kurį turinys pateikia per sekundę. Jis turėtų būti palaikomas ekrano kadrų dažnio lygyje ir stabilus. Priešingu atveju gali atsirasti kadrų virpėjimas.
Jei jūsų programos SDK naudoja „VIVE WAVE SDK 6.0.0“ arba naujesnę versiją, galite naudoti šią „adb“ komandą, kad patikrintumėte FPS: DK 6.0.0
$adb Logcat -s VRMetric
Matysite šiuos žurnalo duomenis.
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“ Pirmasis skaičius rodo turinio FPS, o antrasis – ekrano kadrų dažnį.
Jei jūsų „Wave SDK“ versija yra senesnė nei 6.0.0, rekomenduojama atnaujinti į naujausią versiją, kad būtų pagerintas vaizdavimo našumas ir optimizuotos kitos funkcijos.
Jei jūsų programos SDK sukurtas naudojant „VIVE OpenXR“, galite naudoti šią adb komandą, kad patikrintumėte FPS.
$adb Logcat -s RENDER_ATW
Matysite šiuos žurnalo duomenis
RENDER_ATW: [FPS] nauja tekstūra: 90.00
RENDER_ATW: [FPS] R yra: 90.00, praleidimas: 0 317, -0.0155 0.805527, 0.006788)
RENDER_ATW: [FPS] L esama: 90.00 praleidimas: 0 (0.592301, -0.015502, 0.805539, 0.006773)

Skaičius po „nauja tekstūra“ rodo dabartinį turinio kadrų dažnį (FPS). Skaičius po „R present“ ir „L present“ rodo ekrano kadrų dažnį.
Kartais turinio kadrų dažnis (FPS) ir ekrano kadrų dažnis gali šiek tiek skirtis.
Pavyzdžiui,ampPavyzdžiui, aukščiau pateiktu atveju 89.8 FPS gali būti laikomi 90 FPS.
Jei programos turinio kadrų dažnis nuolat yra mažesnis nei ekrano kadrų dažnis arba išlieka nestabilus, tai rodo atvaizdavimo našumo problemą. Todėl kitas žingsnis yra nustatyti, ar kliūtis kyla dėl procesoriaus, ar dėl vaizdo plokštės.
2.2 Patikrinkite procesoriaus ir vaizdo plokštės naudojimą
Jei jūsų programos SDK naudoja „VIVE WAVE SDK 6.0.0“ arba naujesnę versiją, galite naudoti šią adb komandą, kad patikrintumėte FPS.
$adb logcat -s VRMetric
Matysite šiuos žurnalo duomenis.
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
Kaip matote aukščiau pateiktame žurnalo rezultatuose, procesoriaus apkrovimas yra 27 %, o grafikos plokštės – 72 %. Jei jūsų „Wave SDK“ versija yra senesnė nei 6.0.0, rekomenduojama atnaujinti į naujausią versiją, kad būtų pagerintas vaizdavimo našumas ir optimizuotos kitos funkcijos.
„VIVE OpenXR“ programėlėje galite naudoti šią komandą, norėdami patikrinti procesoriaus ir vaizdo plokštės naudojimą.
# Linux/Ubuntu sistemoje
$ adb žurnalo katė | grep CPU_USAGE
# „PowerShell“ sistemoje
$ adb logcat | Pasirinkti eilutę -Šablonas CPU_USAGE
Pamatysite šį žurnalą
CPU vid. CPU0 CPU1 CPU2 CPU3 CPU4 CPU5 CPU6 CPU7 GPU CPU_USAGE [APKROVIMAS] 25.67 % 32.22 % 25.29 % 30.77 % 29.35 % 21.35 % 22.09 % 18.39 % 24.14 % 73 %
Jei pastebite, kad FPS negali išlaikyti ekrano kadrų dažnio, o GPU naudojimas taip pat yra labai didelis, paprastai viršija 85 %, galite pabandyti pakoreguoti „Eyebuffer“ skiriamąją gebą (3.1.2, 4.1.2 skyriai), kad pamatytumėte, ar tai pagerina FPS. Jei šis koregavimas pagerina...
našumą, galime daryti išvadą, kad problema susijusi su GPU, ir atitinkamai sutelkti optimizavimo pastangas.
Kita vertus, jei „Eyebuffer“ skiriamosios gebos koregavimas nepagerina našumo, greičiausiai kliūtis susijusi su procesoriumi, todėl turėtume sutelkti dėmesį į procesoriaus našumo optimizavimą.
Taip pat gali būti, kad programa vienu metu apkraunama ir procesoriaus, ir grafikos procesoriaus. Tokiais atvejais optimizavimo pastangos turėtų būti taikomos tiek procesoriui, tiek grafikos procesoriui, kad būtų pasiektas subalansuotas našumo pagerėjimas.
2.3 Su GPU susijęs
Kai VR programa yra apribota GPU, tai reiškia, kad GPU yra pagrindinė kliūtis ir negali patenkinti programos atvaizdavimo reikalavimų. Norėdami išspręsti GPU problemas, susijusias su programa, atsižvelkite į šias rekomendacijas:
Pirmiausia naudokite profiliavimo įrankius, tokius kaip „RenderDoc“ arba „Game Engine Pro“.filer (Unity Pro)filer, „Unreal Insights“), kad išanalizuotų, kur GPU praleidžia daugiausia laiko. Nustatykite brangiausias operacijas ir sutelkite dėmesį į jų optimizavimą.
„Native Developer“ atveju galite naudoti „RenderDoc“, kad nustatytumėte, kuris iškvietimas sukelia per didelę GPU apkrovą.
„Unity“ kūrėjams galite vadovautis šiuo „Unity“ dokumentu arba naudoti „RenderDoc“, kad išanalizuotumėte atvaizdavimo našumo problemas, ir vadovautis „Unity“ grafikos optimizavimo dokumentacija, kad gautumėte nurodymų, kaip optimizuoti savo programą.
„Unreal Developer“ programuotojams galite naudoti GPU Visualizer arba RenderDoc, kad išanalizuotumėte atvaizdavimo našumo problemas, ir vadovaukitės „Unreal Performance Guidelines“, kad gautumėte nurodymų, kaip optimizuoti savo programą.
Antra, taip pat galite pabandyti pakoreguoti tam tikras „Wave“ funkcijas ar nustatymus, kad sumažintumėte GPU apkrovą.

  1. Sumažinkite ekrano atnaujinimo dažnį (3.1.1, 4.1.1 skyriai)
  2.  Koreguokite „Eyebuffer“ skiriamąją gebą (3.1.2, 4.1.2 skyriai, 14.1.1)
  3.  Pabandykite įjungti „Foveation“ (3.1.4, 4.1.4 skyriai).

Jei jūsų programa yra ir MR programa, galite koreguoti ir „Passthrough“ nustatymus.

  1. Sumažinkite perduoto vaizdo kokybę (3.2.1 skyrius).
  2. Sumažinkite kadrų dažnį (Passthrough). (3.2.2 skyrius)

Daugiau informacijos apie GPU našumo nustatymus rasite 2.6 skyriuje.

2.4 Su procesoriumi susijęs
Kai VR programa yra apribota procesoriaus apkrovos, tai reiškia, kad procesorius yra pagrindinė kliūtis. Atsižvelkite į šias rekomendacijas:
Pirmiausia naudokite profiliavimo įrankius, tokius kaip „Systrace“ arba „Game Engine Pro“.filer (Unity Pro)filer, „Unreal Insights“), kad išanalizuotumėte ir nustatytumėte, kurios jūsų kodo dalys sunaudoja daugiausia procesoriaus išteklių. Sutelkite dėmesį į šių sričių optimizavimą ir pertvarkykite skaičiavimo požiūriu daug išteklių reikalaujančius algoritmus, kad sumažintumėte procesoriaus apkrovą.

  • Vietiniams kūrėjams galite naudoti „Systrace“ profesionalams.filejūsų projektą.
  • „Unity“ kūrėjams galite naudoti „CPU Usage Pro“filer modulis, skirtas rasti procesoriaus našumo problemas.
  • „Unreal Developer“ kūrėjams galite naudoti „Unreal Insights“, kad rastumėte procesoriaus našumo problemas.

Antra, taip pat galite pabandyti pakoreguoti tam tikras „Wave“ funkcijas ar nustatymus, kad sumažintumėte GPU apkrovą.

  1. Sumažinkite ekrano atnaujinimo dažnį (3.1.1, 4.1.1 skyriai)
  2.  Naudokite daugiafunkcinįView Atvaizdavimas (3.1.4 skyrius, 4.1.4 skyrius)

Jei jūsų programa yra ir MR programa, galite koreguoti ir „Passthrough“ nustatymus.

  1. Sumažinkite kadrų dažnį (3.2.2 skyrius).

Daugiau informacijos apie procesoriaus našumo nustatymus galite rasti 2.6 skyriuje.

2.5 Santrauka
Galiausiai, aukščiau pateiktą našumo tikrinimo darbo eigą susisteminome 2-5-1 paveiksle. Pradėkite nuo turinio kadrų dažnio (FPS) patikrinimo. Jei jis yra mažesnis nei ekrano kadrų dažnis arba išlieka nestabilus, išanalizuokite GPU/CPU apkrovą, kad nustatytumėte, ar tai susiję su GPU, ar su CPU. Galiausiai naudokite profesionalų...filer, kad būtų galima nustatyti galimas našumo problemas arba pakoreguoti „Wave“ funkcijas ar nustatymus, siekiant optimizuoti procesoriaus našumą.

VIVE VR perteikimo našumas – 1 pav.

2.6 Greita nuoroda Kurie nustatymai gali pagerinti procesoriaus / grafikos procesoriaus apkrovą

Žemiau išvardykite SDK nustatymus, susijusius su procesoriaus / grafikos procesoriaus apkrova. Galite remtis programos kliūtimi, kad patikrintumėte atitinkamus optimizavimo nustatymus.

Susiję su procesoriumi:

  • VIVE Wave SDK nustatymas
    o VR turinys
    ▪ 3.1.1 Ekrano atnaujinimo dažnis
    ▪ 3.1.4 DaugiafunkcisView Atvaizdavimas
    ▪ 3.1.6 Adaptyvi kokybė
    ▪ 3.1.7 Adaptyvus judesio kompozitorius
    o MR turinys
    ▪ 3.2.2 Kadrų dažnio perdavimas
  • VIVE OpenXR SDK nustatymai
    o VR turinys
    ▪ 4.1.1 Ekrano atnaujinimo dažnis
    ▪ 4.1.4 DaugiafunkcisView Atvaizdavimas
  • Bendras optimizavimas
    o 5.5 procesoriaus šuolis

Susiję su GPU:

  • VIVE Wave SDK nustatymas
    o VR turinys
    ▪ 3.1.1 Ekrano atnaujinimo dažnis
    ▪ 3.1.2 Akių buferio skiriamoji geba
    ▪ 3.1.3 DaugiafunkcisView Atvaizdavimas
    ▪ 3.1.4 Foveacija
    ▪ 3.1.5 Kadrų ryškumo gerinimas (FSE)
    ▪ 3.1.6 Adaptyvi kokybė
    ▪ 3.1.7 Adaptyvus judesio kompozitorius
    ▪ 3.1.8 Atvaizdavimo kaukė [Nepalaikomas nerealistiškas vaizdas] o MR turinys
    ▪ 3.2.1 Pralaidumo kokybės reguliavimas
    ▪ 3.2.2 Kadrų dažnio perdavimas
  • VIVE OpenXR SDK nustatymai
    o VR turinys
    ▪ 4.1.1 Ekrano atnaujinimo dažnis
    ▪ 4.1.2 Akių buferio skiriamoji geba
    ▪ 4.1.3 DaugiafunkcisView Atvaizdavimas
    ▪ 4.1.4 Foveation [Nepalaikomas nerealaus formato] ▪ 4.1.5 Render Mask [Nepalaikomas nerealaus formato]
  • Bendras optimizavimas
    o 5.1 Išjunkite didelio našumo režimą
    o 5.2 Daugiafunkciniaiampmolva
    o 5.3 GMEM įkėlimas / saugojimas
    o 5.4 Kompozicijos sluoksnis (daugiasluoksnis)

VIVE bangų nustatymas

„VIVE Wave“ yra atvira platforma ir įrankių rinkinys, leidžiantis lengvai kurti VR turinį ir užtikrinantis didelio našumo įrenginių optimizavimą trečiųjų šalių partneriams. „VIVE Wave“ palaiko „Unity“ ir „Unreal“ žaidimų variklius.
Mes nuolat optimizuojame ir šaliname įvairias klaidas, todėl rekomenduojame SDK atnaujinti.
Šiuo metu „VIVE Wave“ palaiko tik „OpenGL ES“. Čia išvardytos funkcijos, išdėstytos pagal įtaką GPU našumui. Padalinsime tai į dvi dalis: VR turinį ir MR turinį.
3.1 VR turinys
3.1.1 Ekrano atnaujinimo dažnis

Didesni atnaujinimo dažniai užtikrina sklandesnį vaizdą, tačiau padidina sistemos apkrovą. Ir atvirkščiai, mažesni atnaujinimo dažniai sumažina sistemos apkrovą, tačiau lemia mažiau sklandų vaizdą. Jei programoje yra su procesoriumi / grafikos procesoriumi susijusių problemų, galite pabandyti sumažintiasing padidinkite ekrano atnaujinimo dažnį, kad išspręstumėte problemą.

  • Vietinių kūrėjų atveju žr. WVR_SetFrameRate.
  • Unity kūrėjams žr. šį vadovą.
  • „Unreal“ kūrėjams žr. šį vadovą.

3.1.2 „Eyebuffer“ skiriamoji geba
„Eyebuffer“ raiška yra tekstūros dydis, kurį turi būti atvaizduojamas turinys programoje. Atvaizduota tekstūra bus pateikta vykdymo aplinkai, kad būtų atliktas paskelbimo procesas ir rodoma HMD ekrane.
Nors didesnis akių buferio dydis gali užtikrinti aiškesnį ir detalesnį vaizdą, jis taip pat labai apkrauna GPU. Todėl labai svarbu rasti tinkamą vaizdo kokybės ir našumo pusiausvyrą.
Jei programoje yra GPU apribojimų, galite pabandyti sumažintiasinPadauginkite akies buferio dydį iš mastelio koeficiento. Tačiau nerekomenduojame mažinti mastelio koeficiento žemiau 0.7, nes tai gali lemti nepriimtiną vaizdo kokybę.

  • Vietinių kūrėjų atveju žr. WVR_ObtainTextureQueue. Koreguojant dydį, plotį ir aukštį reikia padauginti iš santykio.
  • „Unity“ kūrėjams žr. „WaveXRSettings“.
    Arba galite atlikti pakeitimus naudodami kodą kaip belwoe.
    XRSettings.eyeTextureResolutionScale = ResolutionScaleValue; // C#
  • „Unreal“ kūrėjams žr. „SetPixelDensity“.

3.1.3 KeliView Atvaizdavimas
Tradiciniame vaizdavime kairę ir dešinę akis piešiame atskirai, todėl tam pačiam vaizdui reikia dviejų piešimo užklausų.View Atvaizdavimas išsprendžia šią problemą atlikdamas tik vieną piešimo iškvietimą.
Ši funkcija sumažina procesoriaus apkrovąasing iškvietimų skaičius. GPU taip pat turi tam tikrų privalumų, sumažėja viršūnių šešėliavimo įrenginio darbo krūvis, nes jam nereikia paleisti papildomo šešėliavimo įrenginio kitai akiai, tačiau fragmentų šešėliavimo įrenginio darbo krūvis išlieka nepakitęs, nes jam vis tiek reikia įvertinti kiekvieną pikselį abiem akims. Rekomenduojame įjungti šią funkciją.

  • Vietinių programų kūrėjams galite peržiūrėti wvr_native_hellovr failą.ample.
  • „Unity“ kūrėjams žr. „Render Mode“ – vienas praėjimas yra daugkartinis.view funkcija.
  • „Unreal“ kūrėjams žr. šį vadovą.

3.1.4 Foveacija
Išlenktas atvaizdavimas pirmiausia skirtas sumažinti GPU apkrovą. Jis sumažina kadro detalumą ekrano periferijoje ir išlaiko didelės skiriamosios gebos detalumą lauko centre. viewJei programoje yra su GPU susijusi problema, galite pabandyti įjungti „Foveation“ renderinimą.

VIVE VR perteikimo našumas – 2 pav.

Naudojant foveaciją, reikia atkreipti dėmesį į kai ką:

➢ Vartotojai paprastai nepastebi sumažėjusio detalumo periferiniuose regionuose, kai taikomas numatytasis išsikišimo režimas. Tačiau jei išsikišimo periferinė kokybė nustatyta per žema, vartotojas gali tai pastebėti.
➢ Foveacijos efektas gali būti labiau pastebimas naudojant tam tikras medžiagas ar tekstūras, kurios gali patraukti vartotojo dėmesį. Kūrėjai turėtų tai žinoti ir atitinkamai įvertinti.
➢ Įjungus išgaubto vaizdo perteikimo funkciją, sumažėja fiksuota GPU našumo kaina, kuri gali svyruoti nuo 1 % iki 6 %, priklausomai nuo akies buferio dydžio. Naudojant paprastą šešėliavimo įrankį scenoje, našumo padidėjimas taupant išteklius gali būti mažesnis nei fiksuota GPU našumo kaina, todėl našumas gali sumažėti.

  • Vietinių kūrėjų atveju žr. šį vadovą.
  • „Unity“ kūrėjams žr. šį vadovą. Pažymėtina, kad įjungus papildomą apdorojimą arba HDR, foveacijos negalima pilnai išnaudoti. Kadangi „Unity“ objektus perteiks pagal savo sugeneruotą vaizdavimo tekstūrą, o ne pagal vykdymo aplinkoje sugeneruotą esamos versijos vaizdavimo tekstūrą, kuri palaiko foveaciją.
  • „Unreal“ kūrėjams žr. šį vadovą. Pažymėtina, kad „foveation“ negalima pilnai išnaudoti „Multi-“ sistemoje.View Atvaizdavimas, nes „Unreal“ negali tiesiogiai atvaizduoti objektų ant vykdymo aplinkoje sugeneruotos atvaizdavimo tekstūros, kuri palaiko foveaciją.

3.1.5 Kadrų ryškumo gerinimas (FSE)
FSE, užtikrinantis ryškesnį perteikimo rezultatą įvedant ryškinimo filtrą, gali padaryti turinį aiškesnį ir būti gana naudingas gerinant teksto aiškumą scenoje. Jei programoje yra su GPU susijusi problema, galite apsvarstyti FSE išjungimą, jei tai nėra būtina.

VIVE VR perteikimo našumas – 3 pav.

  • Vietinių kūrėjų atveju žr. šį vadovą.
  • Unity kūrėjams žr. šį vadovą.
  • „Unreal“ kūrėjams žr. šį vadovą.

3.1.6 Adaptyvioji kokybė
Siekiant taupyti akumuliatoriaus energiją ir palaikyti įrenginio vaizdavimo našumą, ši funkcija automatiškai reguliuoja procesoriaus / grafikos procesoriaus laikrodžio našumo lygius pagal jų naudojimą. Be to, galima įdiegti kitas našumo gerinimo strategijas, pvz., automatiškai įjungti / išjungti „Foveation“ arba turinys gali pats prisitaikyti, kai gaunami didelės / mažos apkrovos įvykiai.

  • Vietinių kūrėjų atveju žr. šį vadovą.
  • „Unity“ kūrėjams žr. šį vadovą. Mūsų „Unity“ įskiepyje akių buferio dydis gali būti automatiškai reguliuojamas pagal dabartinį našumą; teksto dydis atfiltruos per mažas mastelio reikšmes sąraše „Resolution“. Rekomenduojame naudoti bent 20 dmm dydžio arba didesnį tekstą.
  • „Unreal“ kūrėjams žr. šį vadovą.

3.1.7 Adaptyvus judesio kompozitorius
Ši funkcija yra eksperimentinė, apimanti UMC ir PMC. UMC sumažins kadrų dažnį perpus ir realiuoju laiku ekstrapoliuos naujus kadrus, kad išlaikytų vaizdo sklandumą. Tačiau ji turi tam tikrą delsą, artefaktus ir GPU apkrovos problemas.
PMC daugiausia naudoja gylio buferį, kad ATW galėtų atsižvelgti į HMD vertimą ir išplėsti jį iki 6 laipsnių kompensacijos. Ši funkcija gali sumažinti vertimo delsą 1–2 kadrais, bet padidinti GPU apkrovą.

  • Vietinių kūrėjų atveju žr. šį vadovą.
  • Unity kūrėjams žr. šį vadovą.
  • „Unreal“ kūrėjams žr. šį vadovą.

3.1.8 Atvaizdavimo kaukė [Nepalaikomas „Unreal“]
Pikseliai kraštuose po iškraipymo tampa beveik nematomi, o atvaizdavimo kaukė pakeičia šių nematomų pikselių gylio buferio vertes. Jei įjungsite gylio testavimą, dėl ankstyvo z šie nematomi pikseliai nebus atvaizduojami, taip sumažinant GPU apkrovą. Ši funkcija naudinga, jei šiose nematomose srityse yra daug apkrovų generuojančių objektų; priešingu atveju, jei šiose srityse nėra atvaizdavimo objektų, rekomenduojama ją išjungti, nes ji sunaudos mažai GPU.

  • Vietinių programų kūrėjams žr. šį vadovą. Prieš iškviečiant „RenderMask“, reikia susieti gylio buferį; kitaip jis bus neveiksmingas.
  • Unity kūrėjams žr. šį vadovą.
  • „Unreal“ kūrėjams šiuo metu nepalaikoma „Render Mask“ funkcija.

3.2 MR turinys
3.2.1 Pralaidumo kokybės reguliavimas
Yra 3 vaizdo perdavimo kokybės lygiai:
➢ WVR_PassthroughImageQuality_DefaultMode – tinka MR turiniui be specialių reikalavimų.
➢ WVR_PassthroughImageQuality_PerformanceMode – tinka MR turiniui, kuriam reikia daugiau GPU išteklių virtualių scenų vaizdavimui.
➢ WVR_PassthroughImageQuality_QualityMode – tinka MR turiniui, leidžiančiam vartotojams aiškiai matyti supančią aplinką, tačiau virtualioje turinio scenoje našumui užtikrinti reikia tikslesnio derinimo.
Galite pakeisti „Passthrough“ kokybę į „PerformanceMode“, kad sumažintumėte GPU naudojimą.

  • „Native“, „Uunity“ arba „Unreal“ kūrėjams žr. šį vadovą.

3.2.2 Kadrų dažnio perdavimas
Kaip ir ekrano atnaujinimo dažnis, didesnis kadrų dažnis perdavimui suteikia sklandesnį vaizdą, tačiau padidina sistemos apkrovą. Ir atvirkščiai, mažesnis atnaujinimo dažnis sumažina sistemos apkrovą, tačiau lemia mažiau sklandų vaizdą. Yra 2 kadrų dažnio perdavimui režimai: padidintas ir normalus.

  • Vietinių programų kūrėjams pralaidumo kokybę galima reguliuoti naudojant „WVR_SetPassthroughImageRate“.
  • Unity kūrėjams galima keisti naudojant kodą, pvz.ampfailų nustatymai yra tokie // C#
    Interop.WVR_SetPassthroughImageQuality(WVR_PassthroughImageQuality.PerformanceMode);
  • „Unreal“ kūrėjams metodo nustatymo žr. 3-2-2 paveiksle pateiktą brėžinio mazgą.

VIVE VR perteikimo našumas – 4 pav.

VIVE OpenXR nustatymai

„OpenXR“ yra atviras standartas, teikiantis bendrą API rinkinį XR programoms, kurios veikia įvairiuose VR įrenginiuose, kuriuos sukūrė „Khronos Group“. „VIVE Focus 3“ ir „VIVE XR Elite“ taip pat palaiko „OpenXR“, o „VIVE OpenXR SDK“ teikia visapusišką palaikymą HTC VR įrenginiams, leisdamas kūrėjams kurti „viskas viename“ ir turinį naudojant „Unity“ ir „Unreal“ variklius HTC VR įrenginiuose. Mes nuolat optimizuojame ir šaliname įvairias klaidas, todėl kūrėjams rekomenduojama atnaujinti savo įrenginių FOTA versiją, kad ji būtų atnaujinta. Šiuo metu „VIVE OpenXR SDK“ palaiko „OpenGL ES“ ir „Vulkan“.

4.1 VR turinys
4.1.1 Ekrano atnaujinimo dažnis
Ši koncepcija panaši į 3.1.1 ekrano atnaujinimo dažnį.

  • Jei tai skirta vietiniam kūrėjui, žr. „XrEventDataDisplayRefreshRateChangedFB“.
  • Unity kūrėjams žr. šį vadovą.
  • „Unreal“ kūrėjams žr. šį vadovą.

4.1.2 „Eyebuffer“ skiriamoji geba
Ši koncepcija panaši į 3.1.2 „Eyebuffer Resolution“. Rekomenduojame nemažinti mastelio koeficiento žemiau 0.7, nes tai gali lemti nepriimtiną vaizdo kokybę.

  • Vietinių programų kūrėjams žr. xrCreateSwapchain. Koreguojant dydį, plotį ir aukštį reikia padauginti iš santykio.
  • Unity kūrėjams žr. šį pavyzdįample // C#
    XRSettings.eyeTextureResolutionScale = 0.7f; //rekomenduojama 1.0f~0.7f
  • Dėl „Unreal“ nustatymų žr. šį vadovą.

4.1.3 KeliView Atvaizdavimas
Ši koncepcija panaši į 3.1.3 DaugiafunkcinėView Atvaizdavimas. Ši funkcija sumažina procesoriaus apkrovą, GPU taip pat turi tam tikrų privalumų. Rekomenduojame įjungti šią funkciją.

  • Vietinių programuotojų poreikiams „KhronosGroup“ teikia „OpenXR Multi-“View exampna, žr. šį vadovą.
  • „Unity“ kūrėjams žr. „Render Mode“ – vienas praėjimas yra daugkartinis.view funkcija.
  • „Unreal“ kūrėjams, kaip ir „VIVE Wave“ nustatymams, žr. šį vadovą.

4.1.4 Foveation [Nepalaikomas nerealistiškas stilius]
Ši koncepcija panaši į 3.1.4 „Foveation“. „Foveated“ vaizdavimas pirmiausia skirtas sumažinti GPU apkrovą, tačiau jo įjungimas pareikalaus fiksuotų GPU našumo sąnaudų, o jei „foveation“ nustatytas per mažas ir naudojamos tam tikros medžiagos ar tekstūros, jis gali tapti labai...
pastebimas vartotojui. Todėl patartina įjungti arba išjungti šią funkciją atsižvelgiant į konkrečius reikalavimus ir našumo aspektus. Šiuo metu „Foveated“ funkcionalumas palaikomas tik „OpenGL ES“ sistemoje „VIVE OpenXR SDK“.

  • Ši funkcija prieinama vietinių programų kūrėjams, tačiau šiuo metu jos nėra.amples teikiamos.
  • Unity kūrėjams žr. šį vadovą.
  • „Unreal“ kūrėjams ši funkcija šiuo metu nepalaikoma.

4.1.5 Atvaizdavimo kaukė [Nepalaikomas „Unreal“]
Ši koncepcija panaši į 3.1.8 „Render Mask“.

  • Vietinių programų kūrėjams naudokite „XrVisibilityMaskKHR“, kad gautumėte tinklelį. Prieš generuodami sceną, naudokite šį tinklelį gylio buferio reikšmėms užpildyti.
  • „Unity“ kūrėjams „Render Mask“ funkcija „OpenGL ES“ yra įjungta pagal numatytuosius nustatymus ir gali būti išjungta naudojant šį kodą; „Vulkan“ šiuo metu nepalaiko šios funkcijos. //C# UnityEngine.XR.XRSettings.occlusionMaskScale = 0.0f;
  • „Unreal“ kūrėjams šiuo metu nepalaikoma „Render Mask“ funkcija.

4.2 MR turinys
„OpenXR“ šiuo metu nepalaiko perdavimo kokybės ir kadrų dažnio nustatymo. Mes ir toliau optimizuosime ir taisysime perdavimo funkciją, todėl kūrėjams rekomenduojama atnaujinti įrenginio FOTA versiją, kad ji būtų naujausia.

Bendras optimizavimas

5.1 Išjunkite didelio našumo režimą
Išjungus „Didelio našumo režimą“, galima sumažinti įrenginio ekrano dydį ir kartu sumažinti GPU naudojimą. Trūkumas – sumažėjusi ekrano skiriamoji geba. Galite subalansuoti kokybę ir našumą, kad nuspręstumėte, ar įjungti šį režimą.
„VIVE Focus 3“ nustatymo vieta parodyta 5-1-1 paveiksle:

VIVE VR perteikimo našumas – 5 pav.

„VIVE XR Elite“ nustatymo vieta parodyta 5-1-2 paveiksle:

VIVE VR perteikimo našumas – 6 pav.

5.2 Multisampling Anti-Aliasing
Multisampling yra anti-aliasing technika, naudojama nelygiems kraštams išlyginti, paprastai yra pagreitinama aparatinės įrangos, todėl sumažėja GPU našumas. Rekomenduojame nenustatyti MSAA didesnės nei 2x vertės, nes didesnė reikšmė sunaudos daugiau GPU.

  • Vietiniams kūrėjams, MSAA OpenGL ES example galiu tai nurodyti; MSAA Vulkan exampler gali į tai remtis.
    „Adreno GPU“ teikia plėtinį, kuris optimizuoja MSAA.
  • Unity kūrėjams kreipkitės į šią gildiją.
  • „Unreal“ kūrėjams žr. šią gildiją. „Unreal“ taip pat teikia anti-ali apdorojimą.asing, kreipkitės į šią gildiją.

5.3 GMEM įkėlimas / saugojimas
„Adreno“ GPU architektūroje yra funkcija, kai susiejus „Render Target“ ir jei „Render Target“ neišvalomas arba anuliuojamas, kiekvieną kartą vykdant vaizdavimą „Render Target“ reikšmės įkeliamos į grafikos atmintį (tai vadinama GMEM įkėlimu). Jei ankstesnės reikšmės nereikalingos, „Render Target“ išvalymas arba anuliavimas prieš vaizdavimą gali padėti išvengti šios situacijos ir pagerinti GPU našumą.
GMEM įkėlimo galite išvengti naudodami šiuos metodus. „OpenGL ES“, susieję FBO, galite kreiptis į „glClear“ ir „glClearDepth“, kad išvalytumėte spalvų, gylio ir trafareto buferį, arba kreiptis į „glInvalidateFramebuffer“, kad anuliuotumėte nurodytą renderavimo tikslą. „Vulkan“ papildomos instrukcijos nebūtinos; galite aiškiai nustatyti, ar prieš naudojimą išvalyti priedą, faile „VkAttachmentDescription.loadOp“.
Panašiai, plytelių vaizdavimo rezultato išsaugojimas iš grafikos atminties atgal į pagrindinę atmintį vadinamas GMEM saugojimu; ši operacija taip pat brangi GPU. Norėdami to išvengti, rekomenduojame susieti tik reikiamus vaizdavimo tikslus, kad būtų išvengta nereikalingų saugojimo operacijų.

5.4 Kompozicijos sluoksnis (daugiasluoksnis)
Naudojant daugiasluoksnį režimą, tekstūros pasižymi geresne vaizdo kokybe. Tačiau ši funkcija žymiai padidina GPU našumą, padidinant sluoksnių skaičių ir tekstūrų dydį. Rekomenduojame ne daugiau kaip tris sluoksnius.

  • Vietinių programų kūrėjams
    o „VIVE Wave SDK“ naudoja „WVR_SubmitFrameLayers“, kad perduotų duomenis kiekvienam sluoksniui.
    o „VIVE OpenXR SDK“ įdeda sluoksnių duomenis į „XrFrameEndInfo“ ir pateikia juos per „xrEndFrame“.
  • Unity kūrėjams,
    o VIVE Wave SDK nustatymus žr. šiame vadove,
    o VIVE OpenXR nustatymus žr. šiame vadove.
  • „Unreal“ kūrėjui,
    o VIVE Wave SDK nustatymus žr. šiame vadove.
    o VIVE OpenXR nustatymus žr. šiame vadove.

5.5 procesoriaus šuolio
Kai procesoriaus apkrova didesnė, kai kurie foniniai procesai atlieka aukšto prioriteto gijas, tai gali sutrikdyti natyvų vykdymą. Negalime garantuoti, kad turinio programos veikimo nepertrauks kitos gijos.
Jei kyla tokių problemų, galite pabandyti padidintiasinPatikrinkite gijos prioritetą, kad pamatytumėte, ar tai išsprendžia problemą. Tačiau jei pakeisite gijos konfigūraciją, kad optimizuotumėte įrenginius, turite patikrinti, ar tai neturi neigiamo poveikio.

  • „Unity“ kūrėjams žr. „Android“ gijų konfigūravimo funkciją. Jei naudojate „VIVE Wave SDK“, „WaveXRSettings“ yra funkcija, leidžianti reguliuoti prioritetą, kaip parodyta 5-5-2 paveiksle. Mažesnė vertė reiškia aukštesnį prioritetą.

VIVE VR perteikimo našumas – 7 pav.

  • „Unreal“ žaidime nėra metodo pakeisti žaidimo gijos, gijos atvaizdavimo ir RHI gijos prioriteto per išorinius nustatymus, nebent pakeistumėte variklio kodą.

Autorių teisės © 2024 HTC Corporation. Visos teisės saugomos.VIVE logotipas

Dokumentai / Ištekliai

VIVE VR perteikimo našumas [pdfVartotojo vadovas
VR atvaizdavimo našumas, atvaizdavimo našumas, našumas

Nuorodos

Palikite komentarą

Jūsų el. pašto adresas nebus skelbiamas. Privalomi laukai pažymėti *