
VR көрсөтүү аткаруу
Туннинг жана оптималдаштыруу
Introduction
Ресурстары чектелген жабдыкта оптималдуу VR тажрыйбасына жетишүү колдонуучуга жылмакай жана ыңгайлуу тажрыйбаны жеткирүүнүн ачкычы болуп саналат. Эгер мазмунду көрсөтүүнүн кадр ылдамдыгы төмөндөп кетсе же аппараттын жаңыртуу ылдамдыгынан төмөн болсо, ал кадрдын титиреп, кекетип калышына, кыймыл оорусуна ж.б. алып келет. акыры терс колдонуучу тажрыйбасына таасир этет. Ошондуктан, мазмундун иштешин оптималдаштыруу жагымдуу тажрыйбаны камсыз кылуу үчүн абдан маанилүү болуп саналат.
Натыйжалуу тууралоону баштоодон мурун, эффективдүү эмес тюнингди болтурбоо үчүн, аткаруудагы тоскоолдуктар кайда экенин түшүнүү маанилүү. Бул документ иштеп чыгуучуларга өндүрүмдүүлүк көйгөйлөрүн аныктоого жана рендерингдин аткаруу маселелерин чечүү үчүн чечимдерди сунуштоого жардам берүү үчүн иштелип чыккан.
Документ төмөнкү бөлүмдөрдө уюштурулган:
- 2-бөлүм: Бөгөттөрдү аныктоо - Бул бөлүм иштеп чыгуучуларга тоскоолдуктар кайда экенин аныктоого жардам берет.
- 3 жана 4-бөлүм: VIVE Wave жана VIVE OpenXR Орнотуулары – Бул бөлүмдөр VIVE Wave жана OpenXR колдонмолору үчүн CPU/GPU иштешине таасир эте турган атайын орнотууларды камтыйт. Иштеп чыгуучулар кандайдыр бир жакшыруунун бар-жоктугун аныктоо үчүн кездешкен майнаптуулуктун кемчиликтеринин негизинде бул функцияларды иштетүү же өчүрүү менен эксперимент жүргүзө алышат.
- 5-бөлүм: Жалпы оптималдаштыруу - Бул бөлүмдө кээ бир жалпы оптималдаштыруу практикалары жана тажрыйбалары бөлүшүлөт.
Бөгөттүктү аныктоо
HMD жылып жатканда, VR/MR колдонмосунда кадрдын життери же кара чети ж. Адатта, рендеринг аткаруу көйгөйлөрүн 2 түргө бөлүүгө болот: CPU менен байланышкан же GPU менен байланышкан. Натыйжасыз тууралоону болтурбоо үчүн колдонмоңуз үчүн байланышкандын кайсы түрлөрү башында өтө маанилүү экенин түшүнүңүз.
Бул бөлүмдө биз сизге аткаруу көйгөйлөрүн тез аныктоого мүмкүндүк берген жөнөкөй кадамдарды беребиз.
2.1 Content Rendering FPS текшерүү
Биринчиден, биз FPS мазмунун текшерүү менен баштайбыз, бул мазмун секундасына көрсөткөн кадрлардын саны. Ал дисплей кадр ылдамдыгына чейин сакталып, туруктуу болушу керек. Болбосо, ал кадрдын титирөөсүнө алып келиши мүмкүн.
Колдонмоңуз SDK VIVE WAVE SDK 6.0.0 же андан кийинки версиясын колдонуп жатса, FPSти текшерүү үчүн төмөнкү adb буйругун колдонсоңуз болот. DK 6.0.0
$adb Logcat -s VRMetric
Сиз төмөнкү журнал маалыматтарын көрөсүз.
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” Биринчи сан FPS мазмунун, ал эми экинчи сан дисплей кадр ылдамдыгын билдирет.
Эгер Wave SDK версияңыз 6.0.0 төмөн болсо, рендерингдин натыйжалуулугун жана башкаларды оптималдаштырууну жакшыртуу үчүн акыркы версияга жаңыртуу сунушталат.
Эгер колдонмоңуз SDK VIVE OpenXR менен курулган болсо. FPSти текшерүү үчүн төмөнкү adb буйругун колдонсоңуз болот.
$adb Logcat -s RENDER_ATW
Сиз төмөнкү журнал маалыматтарын көрөсүз
RENDER_ATW: [FPS] жаңы текстура: 90.00
RENDER_ATW: [FPS] R учурдагы:90.00 өткөрүп жиберүү:0 317, -0.0155 0.805527, 0.006788)
RENDER_ATW: [FPS] L учурда:90.00 өткөрүп жиберүү:0 (0.592301, -0.015502, 0.805539, 0.006773)
"Жаңы текстурадан" кийинки сан учурдагы FPS мазмунун билдирет. “R present” жана “L present” дегенден кийинки сан дисплей кадр ылдамдыгын билдирет.
Кээде, мазмун FPS жана дисплей кадр ылдамдыгы бир аз айырма болушу мүмкүн.
Мисалы үчүнampле, жогорудагы учурда, 89.8 FPS 90 FPS катары каралышы мүмкүн.
Колдонмонун мазмуну FPS дисплей кадр ылдамдыгынан ырааттуу төмөн болсо же туруксуз бойдон калса, бул рендерингдин майнаптуулугун көрсөтөт. Ошондуктан, кийинки кадам - бул тоскоолдук процессордон же GPUдан келип чыкканын аныктоо.
2.2 CPU жана GPU колдонууну текшерүү
Колдонмоңуз SDK VIVE WAVE SDK 6.0.0 же андан кийинки версиясын колдонуп жатса, FPSти текшерүү үчүн төмөнкү adb буйругун колдонсоңуз болот.
$adb logcat -s VRMetric
Сиз төмөнкү журнал маалыматтарын көрөсүз.
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
Жогорудагы журналдын жыйынтыгынан көрүнүп тургандай, CPU колдонулушу 27% жана GPU колдонулушу 72% Эгерде Wave SDK версияңыз 6.0.0 төмөн болсо, рендерингдин иштешин жана башкаларды оптималдаштырууну жакшыртуу үчүн акыркы версияга жаңыртуу сунушталат.
VIVE OpenXR колдонмосу үчүн CPU жана GPU колдонулушун текшерүү үчүн төмөнкү буйрукту колдоно аласыз.
# Linux/ubuntu боюнча
$ adb logcat | grep CPU_USAGE
# Powershellде
$ adb logcat | Select-String -Pattern CPU_USAGE
Сиз төмөнкү журналды көрөсүз
CPU Орт. CPU0 CPU1 CPU2 CPU3 CPU4 CPU5 CPU6 CPU7 GPU CPU_USAGE [ЖҮКТӨӨ] 25.67% 32.22% 25.29% 30.77% 29.35% 21.35% 22.09% 18.39% 24.14% 73 %
Эгерде сиз FPS дисплей кадр ылдамдыгын сактай албаса жана GPU колдонулушу да өтө жогору экенин байкасаңыз, адатта 85% ашса, Eyebuffer резолюциясын (3.1.2-бөлүм, 4.1.2-бөлүм) тууралап көрүүгө аракет кылсаңыз, ал FPSти жакшыртат. Бул тууралоо жакшы алып келсе
аткаруу, биз маселе GPU менен байланыштуу деген тыянак чыгарууга болот жана ошого жараша оптималдаштыруу аракеттерибизди жумшайбыз.
Башка жагынан алганда, Eyebuffer резолюциясын тууралоо иштин байкаларлык жакшырышына алып келбесе, процесс процессор менен байланыштуу болушу мүмкүн жана биз CPU иштешин оптималдаштырууга көңүл буруубуз керек.
Бул колдонмо бир эле учурда CPU жана GPU менен байланышкан болушу мүмкүн. Мындай учурларда, оптималдаштыруу аракеттери процессордун жана GPUнин тең салмактуу иштешин жакшыртуу үчүн колдонулушу керек.
2.3 GPU менен байланышкан
VR колдонмосу GPU менен байланышканда, бул GPU негизги тоскоолдук болуп саналат жана ал колдонмонун рендеринг талаптарын аткара албайт дегенди билдирет. GPU менен байланышкан маселелерди азайтуу үчүн төмөнкү сунуштарды карап көрүңүз:
Биринчиден, RenderDoc же Game Engine pro сыяктуу профилдөө куралдарын колдонуңузfiler (Unity Profiler, Unreal Insights) GPU убактысынын көбүн кайда жумшап жатканын талдоо. Эң кымбат операцияларды аныктап, аларды оптималдаштырууга көңүл буруңуз.
Native Developer үчүн сиз RenderDoc колдоно аласыз, кайсы чийме чалуу ашыкча GPU жүктөмүн жаратып жатканын аныктоо үчүн.
Unity Developer үчүн, Unity бул документти ээрчий аласыз же рендерингдин аткаруу маселесин талдоо үчүн RenderDoc колдонсоңуз болот жана колдонмоңузду оптималдаштыруу боюнча көрсөтмө алуу үчүн Unity графикасын оптималдаштыруу документациясын аткарыңыз.
Unreal Developer үчүн, сиз GPU Visualizer колдоно аласыз же рендерингдин аткаруу маселесин талдоо үчүн RenderDoc колдонсоңуз болот жана колдонмоңузду оптималдаштыруу боюнча жетекчилик үчүн Unreal Performance көрсөтмөлөрүн аткарсаңыз болот.
Экинчиден, GPU жүктөлүшүн азайтуу үчүн белгилүү бир Wave функцияларын же жөндөөлөрүн тууралап көрүңүз.
- Дисплейдин жаңылануу ылдамдыгын жайыраак коюу (3.1.1 бөлүм, 4.1.1 бөлүм)
- Eyebuffer резолюциясын тууралоо (3.1.2 бөлүм, 4.1.2 бөлүм), 14.1.1)
- Foveation (бөлүм 3.1.4, бөлүм 4.1.4) иштетүү үчүн аракет кыл.
Эгер колдонмоңуз дагы MR колдонмосу болсо, сиз Passthrough жөндөөлөрүн да тууралай аласыз.
- Өткөөл сүрөттүн сапатын төмөндөтүңүз. (3.2.1-бөлүк)
- Өтүү кадр ылдамдыгын жайыраак тууралаңыз. (3.2.2-бөлүм).
GPU иштеши жөнүндө көбүрөөк башка орнотуулар үчүн 2.6-бөлүмгө кайрылсаңыз болот.
2.4 CPU менен байланышкан
VR колдонмосу CPU менен байланышканда, бул CPU негизги тоскоолдук экенин билдирет, төмөнкү сунуштарды карап көрүңүз:
Биринчиден, Systrace же Game Engine pro сыяктуу профилдөө куралдарын колдонуңузfiler (Unity Profiler, Unreal Insights) талдоо жана кодуңуздун кайсы бөлүктөрү CPU ресурстарын көбүрөөк керектеп жатканын аныктоо үчүн. Бул аймактарды оптималдаштырууга көңүл буруңуз жана CPU жүгүн азайтуу үчүн эсептөө интенсивдүү алгоритмдерди рефакторлаңыз.
- Native Developer үчүн, сиз Systrace үчүн профессионалдуу колдоно аласызfiler сиздин долбоор.
- Unity Developer үчүн CPU Usage Pro колдоно аласызfiler модулу CPU аткаруу көйгөйүн табуу үчүн.
- Unreal Developer үчүн Unreal's Insights программасын колдонуп, CPU'нун иштөөсүнө байланыштуу маселени таба аласыз.
Экинчиден, GPU жүктөлүшүн азайтуу үчүн белгилүү бир Wave функцияларын же жөндөөлөрүн тууралап көрүңүз.
- Дисплейдин жаңылануу ылдамдыгын жайыраак коюу (3.1.1 бөлүм, 4.1.1 бөлүм)
- Көп колдонууView Көрсөтүү (3.1.4-бөлүм, 4.1.4-бөлүм)
Эгер колдонмоңуз дагы MR колдонмосу болсо, сиз Passthrough жөндөөлөрүн да тууралай аласыз.
- Өтүү кадр ылдамдыгын жайыраак тууралаңыз (3.2.2-бөлүм).
Процессордун иштеши жөнүндө көбүрөөк башка орнотуулар үчүн 2.6-бөлүмгө кайрылсаңыз болот.
2.5 Кыскача маалымат
Акырында, биз жогорудагы аткарууну текшерүү иш процессин 2-5-1-сүрөттө уюштурдук. Мазмундун FPSин текшерүү менен баштаңыз. Эгер ал дисплей кадр ылдамдыгынан төмөн болсо же туруксуз болуп калса, GPU/CPU колдонулушун талдап, анын GPU же CPU менен байланышы бар экенин аныктаңыз. Акырында, профессионал колдонуңузfiler потенциалдуу аткаруу көйгөйлөрүн аныктоо же CPU иштешин оптималдаштыруу үчүн толкун функцияларын же жөндөөлөрүн тууралоо.

2.6 Ыкчам маалымдама Кайсы орнотуулар CPU/GPU жүктөөсүн жакшыртат
Төмөндө CPU/GPU жүктөөсүнө байланыштуу SDK орнотууларын тизмектеңиз. Тиешелүү оптималдаштыруу жөндөөлөрүн текшерүү үчүн, сиз колдонмонун тыгынына негизделсеңиз болот.
CPU менен байланыштуу:
- VIVE Wave SDK жөндөөлөрү
o VR мазмуну
▪ 3.1.1 Жаңыртуу ылдамдыгын көрсөтүү
▪ 3.1.4 КөптөгөнView Рендеринг
▪ 3.1.6 Адаптивдүү сапат
▪ 3.1.7 Adaptive Motion Compositor
o MR Content
▪ 3.2.2 Кадр ылдамдыгын тууралоо - VIVE OpenXR SDK Орнотуу
o VR мазмуну
▪ 4.1.1 Жаңыртуу ылдамдыгын көрсөтүү
▪ 4.1.4 КөптөгөнView Рендеринг - Жалпы оптималдаштыруу
o 5.5 CPU Spike
GPU менен байланыштуу:
- VIVE Wave SDK жөндөөлөрү
o VR мазмуну
▪ 3.1.1 Жаңыртуу ылдамдыгын көрсөтүү
▪ 3.1.2 Eyebuffer Resolution
▪ 3.1.3 КөптөгөнView Рендеринг
▪ 3.1.4 Фовеация
▪ 3.1.5 Кадрдын курчтугун жогорулатуу (FSE)
▪ 3.1.6 Адаптивдүү сапат
▪ 3.1.7 Adaptive Motion Compositor
▪ 3.1.8 Render Mask [Not Support Unreal]
o MR Content
▪ 3.2.1 Өтүү сапатын тууралоо
▪ 3.2.2 Кадр ылдамдыгын тууралоо - VIVE OpenXR SDK Орнотуу
o VR мазмуну
▪ 4.1.1 Жаңыртуу ылдамдыгын көрсөтүү
▪ 4.1.2 Eyebuffer Resolution
▪ 4.1.3 КөптөгөнView Рендеринг
▪ 4.1.4 Foveation [Not Support Unreal]
▪ 4.1.5 Render Mask [Not Support Unreal] - Жалпы оптималдаштыруу
o 5.1 Жогорку аткаруу режимин өчүрүү
o 5.2 Multisampлинг
o 5.3 GMEM Жүктөө/Мактоо
o 5.4 Композиция катмары (көп катмар)
VIVE толкун орнотуу
VIVE Wave – бул ачык платформа жана инструменттердин топтому, ал сизге VR мазмунун оңой иштеп чыгууга мүмкүндүк берет жана үчүнчү тараптын өнөктөштөрү үчүн жогорку өндүрүмдүүлүктөгү аппаратты оптималдаштырууну камсыз кылат. VIVE Wave Unity жана Unreal оюн кыймылдаткычтарын колдойт.
Биз ар кандай мүчүлүштүктөрдү тынымсыз оптималдаштырып, чечип турабыз, андыктан SDKны жаңыртып турууну сунуштайбыз.
Учурда VIVE Wave OpenGL ESти гана колдойт. Бул жерде GPU иштешине таасири боюнча иреттелген функциялардын тизмеси келтирилген. Биз муну эки бөлүккө бөлөбүз: VR мазмуну жана MR мазмуну.
3.1 VR мазмуну
3.1.1 Жаңыртуу ылдамдыгын көрсөтүү
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.
- Native иштеп чыгуучу үчүн, WVR_SetFrameRate караңыз.
- Unity иштеп чыгуучусу үчүн бул колдонмону караңыз.
- Unreal иштеп чыгуучусу үчүн бул колдонмону караңыз.
3.1.2 Eyebuffer Resolution
Eyebuffer резолюциясы – бул колдонмонун мазмуну көрсөтүлө турган текстуранын өлчөмү, көрсөтүлгөн текстура жарыялоо процессин аткаруу үчүн аткаруу убактысына тапшырылып, HMD дисплейинде көрсөтүлөт.
Көздүн буферинин чоңураак өлчөмү айкыныраак жана деталдуу визуалдык көрүнүштөрдү алып келиши мүмкүн, бирок ал GPUга олуттуу жүктү жүктөйт. Ошондуктан, көрүү сапаты менен аткаруунун ортосундагы туура балансты табуу абдан маанилүү.
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.
- Native иштеп чыгуучу үчүн WVR_ObtainTextureQueue караңыз. Өлчөмдү тууралоодо, туурасы менен бийиктигин катышка көбөйтүү керек.
- Unity иштеп чыгуучусу үчүн WaveXRSettings караңыз.
Же болбосо, belwoe катары код аркылуу өзгөртүүлөрдү киргизе аласыз.
XRSettings.eyeTextureResolutionScale = ResolutionScaleValue; // C# - Unreal иштеп чыгуучусу үчүн SetPixelDensity караңыз.
3.1.3 КөптөгөнView Рендеринг
Салттуу рендерингде биз сол жана оң көздү өз-өзүнчө тартабыз, бул бир эле көрүнүш үчүн эки тартууну талап кылат. көп-View Көрсөтүү бул маселени бир гана тартуу чалуу менен чечет.
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.
- Native иштеп чыгуучу үчүн, сиз wvr_native_hellovr s кайрыла аласызample.
- Unity иштеп чыгуучусу үчүн, көрсөтүү режимин караңыз, бир өтүү көпview өзгөчөлүгү.
- Unreal иштеп чыгуучусу үчүн бул колдонмону караңыз.
3.1.4 Фовеация
Foveated рендеринг биринчи кезекте GPU жүгүн азайтуу үчүн иштелип чыккан. Ал дисплейдин перифериялык бөлүгүндөгү кадр деталдарын азайтат жана талаанын борборунда жогорку чечилиштеги деталдарды сактайт. view. Колдонмонун GPU менен байланышкан көйгөйү бар болсо, сиз Foveation рендеринг иштетүүгө аракет кылсаңыз болот.

Фовеацияны колдонууда бир нерсеге көңүл буруу керек:
➢ Демейки фовеация режимин колдонгон перифериялык аймактарда колдонуучулар деталдардын кыскарганын байкашпайт. Бирок, эгерде фовеациянын перифериялык сапаты өтө төмөн коюлса, ал колдонуучуга байкалып калышы мүмкүн.
➢ Колдонуучунун көңүлүн бурушу мүмкүн болгон текстуралардын айрым материалдарында фовеациянын таасири көбүрөөк байкалышы мүмкүн. Иштеп чыгуучулар муну билип, ошого жараша баа бериши керек.
➢ Фовеацияланган рендеринг функциясын иштетүү GPU иштешинин туруктуу наркын талап кылат, ал көз буферинин өлчөмүнө жараша 1%дан 6%га чейин өзгөрүшү мүмкүн. Сахнада жөнөкөй шейдерди колдонгондо, ресурстарды үнөмдөөнүн натыйжасы белгиленген GPU аткаруу наркынан төмөн болушу мүмкүн, натыйжада өндүрүмдүүлүк төмөндөйт.
- Native иштеп чыгуучу үчүн бул колдонмону караңыз.
- Unity иштеп чыгуучусу үчүн бул колдонмону караңыз. Белгилей кетчү нерсе, сиз пост-процессингди же HDRди иштеткенде, фовеация толугу менен колдонулбайт. Анткени Unity объекттерди фовацияны колдогон аткаруу убактысында түзүлгөн учурдун рендердик текстурасына эмес, өзүнүн түзүлгөн рендердик текстурасына көрсөтөт.
- Unreal иштеп чыгуучусу үчүн бул колдонмону караңыз. Белгилей кетчү нерсе, Foveation толугу менен көп колдонуу мүмкүн эмес.View Рендерлөө, анткени Unreal объекттерди фовацияны колдогон аткаруу учурунда түзүлгөн рендердик текстурага түз көрсөтө албайт.
3.1.5 Кадрдын тактыгын жогорулатуу (FSE)
FSE курч чыпкасын киргизүү аркылуу курч көрсөтүүнүн натыйжасын камсыздайт, ал мазмунду айкыныраак кылып, сахнадагы тексттин ачыктыгын жакшыртуу үчүн абдан пайдалуу болушу мүмкүн. Колдонмонун GPU менен байланышкан көйгөйү бар болсо, анда ал маанилүү эмес болсо, FSEди өчүрүп коюңуз.

- Native иштеп чыгуучу үчүн бул колдонмону караңыз.
- Unity иштеп чыгуучусу үчүн бул колдонмону караңыз.
- Unreal иштеп чыгуучусу үчүн бул колдонмону караңыз.
3.1.6 Адаптивдүү сапат
Батареяны үнөмдөө жана аппараттын рендеринг натыйжалуулугун колдоо үчүн, бул функция CPU/GPU саатынын иштөө деңгээлин автоматтык түрдө алардын колдонулушуна жараша тууралайт. Кошумчалай кетсек, майнаптуулукту жогорулатуу үчүн башка стратегияларды ишке ашырса болот, мисалы Foveation автоматтык түрдө күйгүзүү/өчүрүү же жогорку/төмөн жүктөм окуяларды кабыл алууда мазмун өзүн тууралай алат.
- Native иштеп чыгуучу үчүн бул колдонмону караңыз.
- Unity иштеп чыгуучусу үчүн бул колдонмону караңыз. Биздин Unity плагинде көз буферинин өлчөмүн учурдагы аткаруунун негизинде автоматтык түрдө тууралоого болот; Тексттин өлчөмү Резолюция тизмесинде өтө кичине масштабдуу маанилерди чыпкалайт. Кеминде 20 дмм же андан чоңураак текстти сунуштайбыз.
- Unreal иштеп чыгуучусу үчүн бул колдонмону караңыз.
3.1.7 Adaptive Motion Compositor
Бул функция UMC жана PMC камтыган эксперименталдык функция. UMC визуалдык жылмакай сактоо үчүн кадр ылдамдыгын эки эсеге азайтат жана реалдуу убакытта жаңы кадрды экстраполяциялайт. Бирок, ал кээ бир кечигүү, артефакттар жана GPU жүктөө менен келет.
PMC, биринчи кезекте, ATWге HMD котормосун эсепке алууга, 6 эселенген компенсацияга чейин узартуу үчүн Тереңдик буферин колдонот. Бул функция котормонун күтүү убактысын 1~2 кадрга азайтат, бирок GPU жүктөлүшүн жогорулатат.
- Native иштеп чыгуучу үчүн бул колдонмону караңыз.
- Unity иштеп чыгуучусу үчүн бул колдонмону караңыз.
- Unreal иштеп чыгуучусу үчүн бул колдонмону караңыз.
3.1.8 Рендер маскасы [Unreal колдоого алынбайт]
Четиндеги пикселдер бурмалангандан кийин дээрлик көрүнбөй калат, рендердик маска бул көрүнбөгөн пикселдердин тереңдик буферинин маанилерин өзгөртөт. Тереңдикти текшерүүнү иштетсеңиз, эрте-z болгондуктан, бул көрүнбөгөн пикселдер көрсөтүлбөйт, ошону менен GPU жүгүн азайтат. Бул көзгө көрүнбөгөн аймактарда оор жүктөөчү рендеринг объекттери болсо, бул функция пайдалуу; антпесе, бул аймактарда рендеринг объектилери жок болсо, аны өчүрүү сунушталат, анткени ал GPU аз колдонууну талап кылат..
- Native иштеп чыгуучу үчүн бул колдонмону караңыз. RenderMaskке чалуудан мурун тереңдик буферин байлашыңыз керек; антпесе, натыйжасыз болуп калат.
- Unity иштеп чыгуучусу үчүн бул колдонмону караңыз.
- Unreal иштеп чыгуучусу үчүн учурда масканы көрсөтүү функциясын колдобойт.
3.2 MR Мазмуну
3.2.1 Өтүү сапатын тууралоо
Сүрөттүн сапаты үчүн 3 деңгээл бар:
➢ WVR_PassthroughImageQuality_DefaultMode – конкреттүү суроо-талапсыз MR мазмунуна ылайыктуу.
➢ WVR_PassthroughImageQuality_PerformanceMode – виртуалдык көрүнүштү көрсөтүү үчүн көбүрөөк GPU ресурсун талап кылган MR мазмунуна ылайыктуу.
➢ WVR_PassthroughImageQuality_QualityMode – колдонуучуларга курчап турган чөйрөнү даана көрүүгө мүмкүндүк берген MR мазмуну үчүн ылайыктуу, бирок мазмундун виртуалдык көрүнүшү аткаруу үчүн жакшыраак жөндөөлөргө ээ болушу керек.
GPU колдонууну азайтуу үчүн Passthrough сапатын PerformanceMode режимине тууралай аласыз.
- Native, Uunity же Unreal иштеп чыгуучусу үчүн бул колдонмону караңыз.
3.2.2 Кадр ылдамдыгын тууралоо
Дисплейдин жаңылануу ылдамдыгы сыяктуу эле, жогорку Passthrough кадр ылдамдыгы жылмакай визуалдарды сунуштайт, бирок системанын жүгүн жогорулатуунун баасы менен келет. Тескерисинче, жаңыртуу ылдамдыгынын төмөндөшү системанын жүгүн азайтат, бирок визуалдык көрүнүштөрдүн жылмакай болушуна алып келет. Кадр ылдамдыгынын 2 режими бар: Boost жана Нормалдуу.
- Native иштеп чыгуучу үчүн WVR_SetPassthroughImageRate аркылуу өтүү сапатын тууралай алат.
- Unity иштеп чыгуучусу үчүн код аркылуу өзгөртө алат, мисалыample орнотуулары төмөнкүдөй // C #
Interop.WVR_SetPassthroughImageQuality(WVR_PasshroughImageQuality.PerformanceMode); - Unreal иштеп чыгуучусу үчүн орнотуу ыкмасын 3-2-2-сүрөттөгү схема түйүнүн караңыз.

VIVE OpenXR Орнотуу
OpenXR ачык стандарт болуп саналат, ал Khronos Group тарабынан иштелип чыккан VR түзмөктөрүнүн кеңири спектринде иштеген XR тиркемелерин иштеп чыгуу үчүн жалпы API топтомун камсыз кылат. VIVE Focus 3 жана VIVE XR Elite ошондой эле OpenXRди колдойт, VIVE OpenXR SDK HTC VR түзмөктөрүн ар тараптуу колдоо менен камсыздайт, бул иштеп чыгуучуларга Allin-One жана HTC VR түзмөктөрүндө Unity жана Unreal кыймылдаткычы менен мазмунду түзүүгө мүмкүндүк берет. Биз ар кандай мүчүлүштүктөрдү тынымсыз оптималдаштырып, чечип турабыз, андыктан иштеп чыгуучуларга аппараттын FOTA версиясын жаңыртып туруу сунушталат. Учурда VIVE OpenXR SDK OpenGL ES жана Vulkan колдойт.
4.1 VR мазмуну
4.1.1 Жаңыртуу ылдамдыгын көрсөтүү
Бул жерде түшүнүк 3.1.1 Дисплейди жаңыртуу ылдамдыгына окшош.
- Native иштеп чыгуучу үчүн, XrEventDataDisplayRefreshRateChangedFB караңыз.
- Unity иштеп чыгуучусу үчүн бул колдонмону караңыз.
- Unreal иштеп чыгуучусу үчүн бул колдонмону караңыз.
4.1.2 Eyebuffer Resolution
Бул жерде концепция 3.1.2 Eyebuffer Resolution менен окшош. биз масштабдык факторду 0.7ден төмөн азайтпоону сунуштайбыз, анткени бул кабыл алынгыс визуалдык сапатка алып келиши мүмкүн.
- Native иштеп чыгуучу үчүн, xrCreateSwapchain караңыз. Өлчөмдү тууралоодо, туурасы менен бийиктигин катышка көбөйтүү керек. ,
- Unity иштеп чыгуучусу үчүн, төмөнкү эксample // C#
XRSettings.eyeTextureResolutionScale = 0.7f; //сунушталган 1.0f~0.7f - Unreal орнотуулары үчүн бул колдонмону караңыз.
4.1.3 КөптөгөнView Рендеринг
Бул жерде түшүнүк 3.1.3 Мульти-View Рендеринг. Бул өзгөчөлүк CPU жүгүн азайтат, GPU да кээ бир артыкчылыктарга ээ. Бул функцияны иштетүүнү сунуштайбыз.
- Native иштеп чыгуучу үчүн, KhronosGroup OpenXR Multi-н камсыз кылат.View example, бул колдонмону карагыла.
- Unity иштеп чыгуучусу үчүн, көрсөтүү режимин караңыз, бир өтүү көпview өзгөчөлүгү.
- Unreal иштеп чыгуучусу үчүн, VIVE Wave орнотуулары сыяктуу, бул колдонмону караңыз.
4.1.4 Foveation [Unrealди колдобойт]
Бул жерде түшүнүк 3.1.4 Фовеацияга окшош. Foveated рендеринг биринчи кезекте GPU жүгүн азайтуу үчүн иштелип чыккан, бирок аны иштетүү GPU аткаруунун туруктуу наркын талап кылат жана эгерде фовеация өтө төмөн коюлса жана белгилүү бир материалдар же текстуралар колдонулса, ал абдан чоң болуп калышы мүмкүн.
колдонуучуга байкалат. Ошондуктан, өзгөчө талаптарыңыздын жана аткаруучулук ойлордун негизинде функцияны иштетүү же өчүрүү сунушталат.
- Native иштеп чыгуучу үчүн бул функция жеткиликтүү, бирок азыркы учурда эч кандай эскиampлар берилет.
- Unity иштеп чыгуучусу үчүн бул колдонмону караңыз.
- Unreal иштеп чыгуучу үчүн, учурда бул функцияны колдобойт.
4.1.5 Рендер маскасы [Unreal колдоого алынбайт]
Бул жерде концепция 3.1.8 Масканы көрсөтүүгө окшош.
- Native иштеп чыгуучу үчүн Mesh алуу үчүн XrVisibilityMaskKHR колдонуңуз. Сахнаны көрсөтүүдөн мурун, бул торду сахнаны көрсөтүүдөн мурун тереңдик буферинин маанилерин толтуруу үчүн колдонуңуз.
- Unity иштеп чыгуучусу үчүн, масканы көрсөтүү функциясы OpenGL ES үчүн демейки боюнча иштетилген жана төмөнкү код менен өчүрүлүшү мүмкүн; Вулкан учурда бул функцияны колдобойт. //C# UnityEngine.XR.XRSettings.occlusionMaskScale = 0.0f;
- Unreal иштеп чыгуучусу үчүн учурда масканы көрсөтүү функциясын колдобойт.
4.2 MR Мазмуну
OpenXR учурда өтүү сапатын жана кадр ылдамдыгын орнотууну колдобойт. Биз Passthrough функциясын оптималдаштырууну жана оңдоону улантабыз, андыктан иштеп чыгуучуларга түзмөктүн FOTA версиясын жаңыртып туруу сунушталат.
Жалпы оптималдаштыруу
5.1 Жогорку аткаруу режимин өчүрүү
"Жогорку аткаруу режимин" өчүрүү аппараттын дисплей өлчөмүн азайтып, GPU колдонууну азайтат. Кемчилиги - экрандын чечилишинин төмөндөшү. Сиз аны иштетүү керекпи же жокпу, чечим кабыл алуу үчүн сапат менен аткарууну тең салмактай аласыз.
VIVE Focus 3 үчүн орнотулган жер 5-1-1-сүрөттө көрсөтүлгөн:

VIVE XR Elite үчүн орнотулган жер 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.
- Native иштеп чыгуучу үчүн, MSAA OpenGL ES exsample ушуга кайрылса болот; MSAA Vulkan exampлер буга кайрыла алышат.
Adreno GPU MSAAны оптималдаштыруучу кеңейтүүнү камсыз кылат. - Unity иштеп чыгуучусу үчүн бул гильдияга кайрылыңыз.
- For Unreal developer, refer to this guild. Unreal also has provide post processing anti-aliasing, refer to this guild.
5.3 GMEM жүктөө/дүкөн
Adreno GPU архитектурасында, бир өзгөчөлүк бар, анда Максаттуу Көрсөтүүнү байлаганда, Максатты көрсөтүү тазаланбаса же жараксыз болуп калса, көрсөтүү ар бир жолу пайда болгондо, Көрсөтүү Максатындагы маанилер GMEM Load деп аталган Графикалык эстутумга жүктөлөт. Мурунку маанилер талап кылынбаса, Render Target көрсөтүүнү тазалаңыз же жараксыз кылып коюңуз, GPU иштешин жакшыртуу үчүн бул кырдаалдан качыңыз.
Төмөнкү ыкмаларды колдонуу менен GMEM жүктөөдөн качсаңыз болот. OpenGL ESде, FBOну байлагандан кийин, Color, Depth жана Stencil буферин тазалоо үчүн glClear жана glClearDepth чакыра аласыз, же көрсөтүлгөн Көрсөтүү Максатын жараксыз деп табуу үчүн glInvalidateFramebuffer чакыра аласыз. Vulkan, кошумча көрсөтмөлөр зарыл эмес; VkAttachmentDescription.loadOp сайтында тиркемени колдонуудан мурун тазалоону ачык түрдө белгилей аласыз.
Ошо сыяктуу эле, графикалык эстутумдан негизги эстутумга кайра плиткаларды көрсөтүүнүн натыйжасын сактоо GMEM дүкөнү деп аталат; бул операция GPU үчүн да кымбат. Буга жол бербөө үчүн, Дүкөндүн керексиз операцияларын болтурбоо үчүн, талап кылынган Көрсөтүү Максаттарын гана байланыштырууну сунуштайбыз.
5.4 Композиция катмары (көп катмар)
Multi-Layer аркылуу көрсөтүлгөн текстуралар жакшыраак визуалдык сапатка ээ. Бирок, бул өзгөчөлүк катмарлардын саны жана текстуралардын өлчөмү менен GPU иштешин олуттуу жогорулатат. Үч катмардан ашпоону сунуштайбыз.
- Native иштеп чыгуучу үчүн,
o VIVE Wave SDK ар бир катмар үчүн маалыматтарды өткөрүү үчүн WVR_SubmitFrameLayers колдонот.
o VIVE OpenXR SDK катмар маалыматтарын XrFrameEndInfo ичине жайгаштырат жана аны xrEndFrame аркылуу тапшырат. - Unity иштеп чыгуучусу үчүн,
o VIVE Wave SDK орнотуулары, бул колдонмону караңыз,
o VIVE OpenXR орнотуулары, бул колдонмону караңыз. - Unreal иштеп чыгуучу үчүн,
o VIVE Wave SDK орнотуулары, бул колдонмону караңыз.
o VIVE OpenXR орнотуулары, бул колдонмону караңыз.
5.5 CPU Spike
Процессордун жүктөлүшү оор болгондо, кээ бир фон процесстери жогорку артыкчылыкка ээ, ал жергиликтүү аткарууну үзгүлтүккө учуратышы мүмкүн. Биз Content Application башка жип менен үзгүлтүккө учурабайт деп кепилдик бере албайбыз.
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.
- Unity Developer үчүн Android жип конфигурациясынын өзгөчөлүгүн караңыз. Эгер сиз VIVE Wave SDK колдонуп жатсаңыз, бизде WaveXRSettingsте 5-5-2-сүрөттө көрсөтүлгөндөй артыкчылыкты тууралоого мүмкүндүк берген функция бар. Кичинекей маани жогорку артыкчылыкты билдирет.

- Кыймылдаткычтын кодун өзгөртмөйүнчө, тышкы жөндөөлөр аркылуу оюн жиптерин, рендеринг жиптерин жана RHI жиптеринин артыкчылыктарын өзгөртүүнүн эч кандай ыкмасы жок.
Copyright © 2024 HTC Corporation. Бардык укуктар корголгон
Документтер / Ресурстар
![]() | VR көрсөтүү аткаруу |
Шилтемелер
- 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
- Unreal Engineдеги Мобилдик Түзмөктөр үчүн Ишке ашыруу көрсөтмөлөрү | Unreal Engine 5.5 Документация | Epic Developer Communitydev.epicgames.com
- dev.epicgames.com/documentation/en-us/unreal-engine/unreal-insights-in-unreal-enginedev.epicgames.com
- Qualcomm Documentationdeveloper.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
- User Manualmanual.tools
