Kinerja Rendering VR
Tunning lan Optimizations
Pambuka
Entuk pengalaman VR sing optimal ing hardware winates sumber daya minangka kunci kanggo menehi pengalaman pangguna sing lancar lan nyaman. Yen tingkat pigura isi rendering mudhun utawa ora stabil ing ngisor tingkat refresh piranti, iku bakal mimpin kanggo pigura judder lan stutting, motion sicknes, etc,. pungkasane duwe pengaruh negatif marang pengalaman pangguna. Mulane, ngoptimalake kinerja konten penting banget kanggo njamin pengalaman sing nyenengake.
Sadurunge miwiti tuning kinerja, iku penting kanggo ngerti ngendi bottlenecks kinerja kanggo ngindhari tunning ora efisien. Dokumen iki dirancang kanggo mbantu pangembang ngenali kemacetan kinerja lan menehi solusi kanggo ngatasi masalah kinerja rendering.
Dokumen kasebut disusun dadi bagean ing ngisor iki:
- Bab 2: Ngenali Bottleneck - Bagean iki mbantu pangembang kanggo ngenali ing ngendi ana bottleneck.
- Bab 3 lan 4: Setelan VIVE Wave lan VIVE OpenXR - Bagean iki njelasake setelan khusus sing bisa nyebabake kinerja CPU/GPU kanggo aplikasi VIVE Wave lan OpenXR. Pangembang bisa nyoba ngaktifake utawa mateni fitur kasebut adhedhasar kemacetan kinerja sing ditemoni kanggo nemtokake manawa ana perbaikan.
- Bab 5: Optimasi Umum - Bagean iki nuduhake sawetara praktik lan pengalaman optimasi umum.
Ngenali Bottleneck
Nalika HMD obah, yen app VR / MR wis pigura jitter utawa pinggiran ireng, etc., iku biasane disebabake masalah kinerja rendering ala. Biasane, masalah kinerja rendering bisa dikategorikake dadi 2 jinis: CPU-bound utawa GPU-bound. Ngerti jinis bound kanggo app sampeyan penting banget ing wiwitan kanggo ngindhari tunning sing ora efisien.
Ing bab iki, kita nyedhiyani langkah-langkah prasaja sing ngijini sampeyan kanggo cepet ngenali endi masalah kinerja.
2.1 Priksa FPS Rendering Konten
Pisanan, kita miwiti kanthi mriksa konten FPS yaiku jumlah pigura sing ditawakake konten per detik. Iku kudu maintained kanggo framerate tampilan lan tetep stabil. Yen ora, bisa nyebabake jitters pigura.
Yen SDK aplikasi sampeyan nggunakake VIVE WAVE SDK 6.0.0 utawa mengko, sampeyan bisa nggunakake printah adb ing ngisor iki kanggo mriksa FPS. DK 6.0.0
$adb Logcat -s VRMetric
Sampeyan bakal weruh data log ing ngisor iki.
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" Nomer pisanan nggantosi FPS isi, nalika nomer kaloro nggantosi framerate tampilan.
Yen versi Wave SDK sampeyan kurang saka 6.0.0, dianjurake kanggo nganyarke menyang versi paling anyar kanggo nambah kinerja rendering lan optimasi liyane.
Yen aplikasi SDK dibangun nganggo VIVE OpenXR. Sampeyan bisa nggunakake printah adb ing ngisor iki kanggo mriksa FPS.
$adb Logcat -s RENDER_ATW
Sampeyan bakal weruh data log ing ngisor iki
RENDER_ATW: [FPS] tekstur anyar: 90.00
RENDER_ATW: [FPS] R saiki: 90.00 skip: 0 317, -0.0155 0.805527, 0.006788)
RENDER_ATW: [FPS] L saiki: 90.00 skip: 0 (0.592301, -0.015502, 0.805539, 0.006773)
Nomer ing ngisor iki "tekstur anyar" nuduhake FPS konten saiki. Nomer ing ngisor iki "R saiki" lan "L saiki" nuduhake framerate tampilan.
Kadhangkala, isi FPS lan framerate tampilan bisa uga rada beda.
Kanggo example, ing kasus ndhuwur, 89.8 FPS bisa dianggep minangka 90 FPS.
Yen FPS isi app terus-terusan luwih murah tinimbang framerate tampilan utawa tetep ora stabil, iki nuduhake masalah kinerja rendering. Mulane, langkah sabanjure kanggo ngenali manawa bottleneck teka saka CPU utawa GPU.
2.2 Priksa panggunaan CPU lan GPU
Yen SDK aplikasi sampeyan nggunakake VIVE WAVE SDK 6.0.0 utawa mengko, sampeyan bisa nggunakake printah adb ing ngisor iki kanggo mriksa FPS.
$adb logcat -s VRMetric
Sampeyan bakal weruh data log ing ngisor iki.
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
Nalika sampeyan bisa ndeleng ing asil log ndhuwur, panggunaan CPU 27% lan panggunaan GPU 72% Yen versi Wave SDK ngisor 6.0.0, dianjurake kanggo nganyarke menyang versi paling anyar kanggo nambah kinerja rendering lan optimasi liyane.
Kanggo aplikasi VIVE OpenXR, sampeyan bisa nggunakake printah ing ngisor iki kanggo mriksa panggunaan CPU lan GPU.
# ing linux / ubuntu
$ adb logcat | grep CPU_USAGE
# ing powershell
$ adb logcat | Pilih-String -Pola CPU_USAGE
Sampeyan bakal weruh log ing ngisor iki
CPU Rata-rata. 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 %
Yen sampeyan mirsani sing FPS ora bisa njaga tingkat pigura tampilan lan panggunaan GPU uga dhuwur banget, biasane ngluwihi 85%, sampeyan bisa nyoba nyetel Eyebuffer Resolusi (bagean 3.1.2, bagean 4.1.2) kanggo ndeleng yen mbenakake FPS. Yen imbuhan iki ndadékaké kanggo luwih apik
kinerja, kita bisa nganakke sing Jeksa Agung bisa ngetokake iki GPU-bound lan fokus efforts Optimization patut.
Ing tangan liyane, yen nyetel Eyebuffer Résolusi ora asil dandan kinerja ngelingke, bottleneck kamungkinan CPU-bound, lan kita kudu fokus ing ngoptimalake kinerja CPU.
Bisa uga aplikasi kasebut kaiket CPU lan kaiket GPU bebarengan. Ing kasus kaya mengkono, efforts optimasi kudu Applied kanggo loro CPU lan GPU kanggo entuk dandan kinerja imbang.
2.3 GPU-bound
Nalika app VR GPU-bound, iku tegese GPU punika bottleneck utami, lan iku ora bisa kanggo tetep munggah karo panjaluk Rendering saka aplikasi. Kanggo nyuda masalah sing ana gandhengane karo GPU, gunakake rekomendasi ing ngisor iki:
Pisanan, gunakake alat profil kaya RenderDoc utawa Game Engine profiler (Unity Profiler, Unreal Insights) kanggo njelasno ngendi GPU mbuwang paling wektu. Ngenali operasi paling larang lan fokus kanggo ngoptimalake.
Kanggo Pangembang Native, sampeyan bisa nggunakake RenderDoc kanggo ngenali telpon tarik sing nyebabake beban GPU sing berlebihan.
Kanggo Unity Developer, sampeyan bisa ngetutake Unity dokumen iki utawa nggunakake RenderDoc kanggo nganalisa masalah kinerja rendering, lan tindakake dokumentasi optimasi grafis Unity kanggo tuntunan kanggo ngoptimalake aplikasi sampeyan.
Kanggo Unreal Developer, sampeyan bisa nggunakake GPU Visualizer utawa nggunakake RenderDoc kanggo nganalisa masalah kinerja rendering, lan tindakake Pedoman Kinerja Unreal kanggo panuntun dhumateng kanggo ngoptimalake aplikasi.
Kapindho, sampeyan uga bisa nyoba nyetel fitur utawa setelan Wave tartamtu kanggo nyuda loading GPU.
- Setel Tingkat Refresh Tampilan luwih alon (bagean 3.1.1, bagean 4.1.1)
- Nyetel Resolusi Eyebuffer (bagean 3.1.2, bagean 4.1.2), 14.1.1)
- Coba ngaktifake Foveation (bagean 3.1.4, bagean 4.1.4).
Yen aplikasi sampeyan uga minangka aplikasi MR, sampeyan uga bisa nyetel setelan Passthrough.
- Setel Kualitas Gambar Passthrough luwih murah. (bagean 3.2.1)
- Setel Passthrough Framerate luwih alon. (bagean 3.2.2).
Kanggo setelan liyane babagan kinerja GPU, sampeyan bisa ndeleng Bab 2.6.
2.4 CPU-bound
Nalika app VR kaiket CPU, tegese CPU minangka bottleneck utama, nimbang rekomendasi ing ngisor iki:
Pisanan, gunakake alat profil kaya Systrace utawa Game Engine profiler (Unity Profiler, Unreal Insights) kanggo nganalisa lan ngenali bagean kode sampeyan sing nggunakake sumber daya CPU paling akeh. Fokus ing ngoptimalake wilayah kasebut lan refactor algoritma intensif komputasi kanggo nyuda beban CPU.
- Kanggo Native Developer, sampeyan bisa nggunakake Systrace kanggo profiler proyek sampeyan.
- Kanggo Unity Developer, sampeyan bisa nggunakake CPU Usage Profilemodul r kanggo nemokake masalah kinerja CPU.
- Kanggo Unreal Developer, sampeyan bisa nggunakake Unreal's Insights kanggo nemokake masalah kinerja CPU.
Kapindho, sampeyan uga bisa nyoba nyetel fitur utawa setelan Wave tartamtu kanggo nyuda loading GPU.
- Setel Tingkat Refresh Tampilan luwih alon (bagean 3.1.1, bagean 4.1.1)
- Gunakake Multi-View Rendering (bagean 3.1.4, bagean 4.1.4)
Yen aplikasi sampeyan uga minangka aplikasi MR, sampeyan uga bisa nyetel setelan Passthrough.
- Nyetel Passthrough Framerate luwih alon (bagean 3.2.2).
Kanggo setelan liyane babagan kinerja CPU, sampeyan bisa ndeleng Bab 2.6.
2.5 Ringkesan
Pungkasan, kita wis ngatur alur kerja mriksa kinerja ing ndhuwur menyang Gambar 2-5-1. Miwiti kanthi mriksa FPS konten. Yen luwih murah tinimbang framerate tampilan utawa tetep ora stabil, banjur analisa panggunaan GPU / CPU kanggo nemtokake manawa GPU-bound utawa CPUbound. Pungkasan, gunakake profiler kanggo ngenali masalah kinerja potensial utawa nyetel fitur Gelombang utawa setelan kanggo ngoptimalake kinerja CPU.

2.6 Referensi Cepet Kang Setelan Bisa Ngapikake CPU / GPU loading
Dhaptar setelan SDK sing ana gandhengane karo loading CPU/GPU kaya ing ngisor iki. Sampeyan bisa adhedhasar bottleneck app kanggo mriksa setelan optimasi sing cocog.
Gegandhengan karo CPU:
- Setelan SDK Gelombang VIVE
o Konten VR
▪ 3.1.1 Tampilan Refresh Rate
▪ 3.1.4 Multi-View Rendering
▪ 3.1.6 Kualitas Adaptif
▪ 3.1.7 Adaptive Motion Compositor
o Konten MR
▪ 3.2.2 Nyetel Passthrough Frame Rate - Setelan VIVE OpenXR SDK
o Konten VR
▪ 4.1.1 Tampilan Refresh Rate
▪ 4.1.4 Multi-View Rendering - Optimization umum
o 5.5 CPU Spike
Gegandhengan karo GPU:
- Setelan SDK Gelombang VIVE
o Konten VR
▪ 3.1.1 Tampilan Refresh Rate
▪ 3.1.2 Resolusi Eyebuffer
▪ 3.1.3 Multi-View Rendering
▪ 3.1.4 Foveation
▪ 3.1.5 Frame Sharpness Enhancement (FSE)
▪ 3.1.6 Kualitas Adaptif
▪ 3.1.7 Adaptive Motion Compositor
▪ 3.1.8 Topeng Render [Ora Ndhukung Ora Nyata] o Konten MR
▪ 3.2.1 Nyetel Kualitas Passthrough
▪ 3.2.2 Nyetel Passthrough Frame Rate - Setelan VIVE OpenXR SDK
o Konten VR
▪ 4.1.1 Tampilan Refresh Rate
▪ 4.1.2 Resolusi Eyebuffer
▪ 4.1.3 Multi-View Rendering
▪ 4.1.4 Foveation [Ora Ndhukung Ora Nyata] ▪ 4.1.5 Topeng Render [Ora Ndhukung Ora Nyata] - Optimization umum
o 5.1 Pateni Mode Kinerja Dhuwur
o 5.2 Multisampling
o 5.3 GMEM Muat / Toko
o 5.4 Lapisan Komposisi (Multi Layer)
Setelan Gelombang VIVE
VIVE Wave minangka platform mbukak lan toolset sing ngidini sampeyan ngembangake konten VR kanthi gampang lan nyedhiyakake optimalisasi piranti kanthi kinerja dhuwur kanggo mitra pihak katelu. VIVE Wave ndhukung mesin game Unity lan Unreal.
Kita terus-terusan ngoptimalake lan ngrampungake macem-macem kewan omo, mula disaranake supaya SDK tetep anyar.
Saiki, VIVE Wave mung ndhukung OpenGL ES. Ing kene dhaptar fitur sing diurutake miturut pengaruh kanggo kinerja GPU. Kita bakal dibagi dadi rong bagean: konten VR lan konten MR.
3.1 Konten VR
3.1.1 Tampilan Refresh Rate
Tarif refresh sing luwih dhuwur nyedhiyakake visual sing luwih alus, nanging biaya sistem tambah akeh. Kosok baline, tingkat refresh sing luwih murah nyuda beban sistem, nanging nyebabake visual sing kurang lancar. Yen App duwe masalah CPU / GPU, sampeyan bisa nyoba nyuda tingkat refresh tampilan kanggo ngatasi masalah kasebut.
- Kanggo pangembang asli, deleng WVR_SetFrameRate.
- Kanggo pangembang Unity, deleng pandhuan iki.
- Kanggo pangembang Unreal, deleng pandhuan iki.
3.1.2 Resolusi Eyebuffer
Resoultion Eyebuffer ukuran tekstur sing isi App kanggo render, tekstur render bakal dikirim menyang runtime kanggo nindakake proses posting lan saiki ing tampilan HMD.
Nalika ukuran buffer mripat sing luwih gedhe bisa nyebabake visual sing luwih cetha lan luwih rinci, nanging uga menehi beban sing signifikan ing GPU. Mulane, golek imbangan sing tepat antarane kualitas visual lan kinerja iku penting.
Yen App duwe masalah GPU, sampeyan bisa nyoba nyuda ukuran eyebuffer kanthi nambah faktor skala. Nanging, disaranake ora ngurangi faktor skala ing ngisor 0.7, amarga iki bisa nyebabake kualitas visual sing ora bisa ditampa.
- Kanggo pangembang asli, deleng WVR_ObtainTextureQueue. Nalika nyetel ukuran, sampeyan kudu multiply jembaré lan dhuwur dening rasio.
- Kanggo pangembang Unity, deleng WaveXRSettings.
Utawa, sampeyan bisa nggawe owahan liwat kode minangka belwoe.
XRSettings.eyeTextureResolutionScale = ResolutionScaleValue; // C# - Kanggo pangembang Unreal, deleng SetPixelDensity.
3.1.3 Multi-View Rendering
Ing rendering tradisional, kita nggambar mata kiwa lan tengen kanthi kapisah, sing mbutuhake rong panggilan kanggo adegan sing padha. multi-View Rendering ngatasi masalah iki kanthi mung nindakake siji telpon tarik.
Fitur iki nyuda beban CPU kanthi nyuda jumlah panggilan tarik. GPU uga wis sawetara keuntungan, beban kerja vertex shader uga suda amarga ora perlu mbukak shader tambahan kanggo mripat liyane, nanging beban kerja fragmen shader tetep ora owah amarga isih kudu ngevaluasi saben piksel kanggo loro mata. Disaranake ngaktifake fitur iki.
- Kanggo pangembang Native, sampeyan bisa ngrujuk menyang wvr_native_hellovr sample.
- Kanggo pangembang Unity, deleng Mode Render, pass siji multi-view fitur.
- Kanggo pangembang Unreal, deleng pandhuan iki.
3.1.4 Foveation
Rendering Foveated utamané dirancang kanggo nyuda beban GPU. Iku nyuda rinci pigura ing peripheral tampilan lan ngramut rinci resolusi dhuwur ing tengah lapangan saka view. Yen App duwe masalah GPU, sampeyan bisa nyoba ngaktifake rendering Foveation.

Ana sawetara sing kudu digatekake nalika nggunakake foveation:
➢ Pangguna biasane ora weruh rincian suda ing wilayah periferal nggunakake mode foveation standar. Nanging yen kualitas peripheral foveation disetel banget kurang, iku bisa dadi katon kanggo pangguna.
➢ Efek saka foveation bisa luwih katon karo bahan tekstur tartamtu, sing bisa narik kawigaten pangguna. Pangembang kudu ngerti babagan iki lan ngevaluasi kanthi cocog.
➢ Ngaktifake fitur rendering foveated mbutuhake biaya kinerja GPU tetep, sing bisa beda-beda antarane 1% nganti 6% gumantung saka ukuran buffer mripat. Nalika nggunakake shader prasaja ing pemandangan, gain kinerja saka nyimpen sumber daya bisa luwih murah tinimbang biaya kinerja GPU tetep, asil ing gulung kinerja.
- Kanggo pangembang asli, deleng pandhuan iki.
- Kanggo pangembang Unity, deleng pandhuan iki. Utamane, nalika sampeyan ngaktifake post-processing utawa HDR, foveation ora bisa digunakake kanthi lengkap. Amarga Unity bakal nerjemahake obyek menyang tekstur render sing digawe dhewe, tinimbang tekstur render saiki sing digawe runtime sing ndhukung foveation.
- Kanggo pangembang Unreal, deleng pandhuan iki. Utamane, foveation ora bisa digunakake kanthi lengkap ing Multi-View Rendering, amarga Unreal ora bisa langsung nerjemahake obyek menyang tekstur render runtime sing ndhukung foveation.
3.1.5 Peningkatan Ketajaman Bingkai (FSE)
FSE nyediakake asil rendering sharpen liwat ngenalke Filter sharpen, bisa nggawe isi luwih cetha lan cukup mbiyantu kanggo nambah kajelasan teks ing pemandangan. Yen App duwe masalah GPU, sampeyan bisa nimbang mateni FSE yen ora penting.

- Kanggo pangembang asli, deleng pandhuan iki.
- Kanggo pangembang Unity, deleng pandhuan iki.
- Kanggo pangembang Unreal, deleng pandhuan iki.
3.1.6 Kualitas adaptif
Kanggo ngirit baterei lan njaga kinerja rendering piranti, fitur iki kanthi otomatis nyetel tingkat kinerja jam CPU/GPU adhedhasar panggunaane. Kajaba iku, strategi liyane bisa dileksanakake kanggo nambah kinerja, kayata ngaktifake / mateni Foveation kanthi otomatis utawa isi bisa nyetel dhewe yen nampa acara dhuwur / kurang.
- Kanggo pangembang asli, deleng pandhuan iki.
- Kanggo pangembang Unity, deleng pandhuan iki. Ing plugin Unity kita, ukuran buffer mripat bisa diatur kanthi otomatis adhedhasar kinerja saiki; Ukuran teks bakal nyaring nilai skala sing cilik banget ing dhaptar Resolusi. Disaranake teks kanthi ukuran paling sethithik 20 dmm utawa luwih gedhe.
- Kanggo pangembang Unreal, deleng pandhuan iki.
3.1.7 Adaptive Motion Compositor
Fitur iki minangka fitur eksperimen sing kalebu UMC lan PMC. UMC bakal nyuda Frame Rate kanthi setengah lan extrapolate pigura anyar ing wektu nyata kanggo njaga kelancaran visual. Nanging, dilengkapi sawetara latensi, artefak lan loading GPU.
PMC utamané nggunakake Depth Buffer kanggo ngidini ATW kanggo akun terjemahan HMD, ngluwihi kanggo ganti rugi 6-dof. Fitur iki bisa nyuda latensi terjemahan kanthi 1 ~ 2 pigura, nanging nambah beban GPU.
- Kanggo pangembang asli, deleng pandhuan iki.
- Kanggo pangembang Unity, deleng pandhuan iki.
- Kanggo pangembang Unreal, deleng pandhuan iki.
3.1.8 Topeng Render [Ora Ndhukung Ora Nyata]
Piksel ing pinggir dadi meh ora katon sawise distorsi, topeng render ngowahi nilai buffer ambane piksel sing ora katon iki. Yen sampeyan ngaktifake tes jero, amarga awal-z, piksel sing ora katon iki ora bakal ditampilake, saengga bisa nyuda beban GPU. Fitur iki migunani yen ana obyek rendering abot ing wilayah sing ora katon; digunakake, yen ora ana obyek Rendering ing wilayah iki, dianjurake kanggo mateni amarga bakal nganggo panggunaan GPU cilik.
- Kanggo pangembang asli, deleng pandhuan iki. Sampeyan kudu naleni buffer ambane sadurunge nelpon RenderMask; yen ora, iku bakal ora efektif.
- Kanggo pangembang Unity, deleng pandhuan iki.
- Kanggo pangembang Unreal, saiki ora ndhukung fitur Render Mask.
3.2 Isi MR
3.2.1 Nyetel Kualitas Passthrough
Ana 3 tingkat kanggo kualitas gambar passthrough:
➢ WVR_PassthroughImageQuality_DefaultMode – cocok kanggo isi MR tanpa panjaluk tartamtu.
➢ WVR_PassthroughImageQuality_PerformanceMode – cocok kanggo konten MR sing mbutuhake sumber daya GPU luwih akeh kanggo rendering pemandangan virtual.
➢ WVR_PassthroughImageQuality_QualityMode – cocok kanggo konten MR sing ngidini pangguna ndeleng lingkungan sekitar kanthi jelas, nanging adegan virtual konten kudu duwe tuning sing luwih apik kanggo kinerja.
Sampeyan bisa nyetel kualitas Passthrough kanggo PerformanceMode kanggo nyuda panggunaan GPU.
- Kanggo pangembang Native, Uunity utawa Unreal, deleng pandhuan iki.
3.2.2 Nyetel Passthrough Frame Rate
Kaya tingkat refresh Tampilan, framerate Passthrough sing luwih dhuwur nawakake visual sing luwih alus, nanging biaya beban sistem tambah. Kosok baline, tingkat refresh sing luwih murah nyuda beban sistem, nanging nyebabake visual sing kurang lancar. Ana 2 mode passthrough framerate: Boost lan Normal.
- Kanggo pangembang Native, bisa nyetel kualitas passthrough nggunakake WVR_SetPassthroughImageRate.
- Kanggo pangembang Unity, bisa ngganti liwat kode, exampsetelan kaya ing ngisor iki // C#
Interop.WVR_SetPassthroughImageQuality(WVR_PassthroughImageQuality.PerformanceMode); - Kanggo pangembang Unreal, cara setelan ndeleng simpul cithak biru ing Gambar 3-2-2.

Setelan VIVE OpenXR
OpenXR minangka standar mbukak sing nyedhiyakake set umum saka API kanggo ngembangake aplikasi XR sing mlaku ing macem-macem piranti VR, sing dikembangake dening Khronos Group. VIVE Focus 3 lan VIVE XR Elite uga ndhukung OpenXR, VIVE OpenXR SDK nyedhiyakake dhukungan lengkap kanggo piranti HTC VR, ngidini pangembang mbangun Allin-One lan konten karo mesin Unity lan Unreal ing piranti HTC VR. Kita terus-terusan ngoptimalake lan ngatasi macem-macem kewan omo, mula disaranake pangembang nganyari versi FOTA piranti supaya tetep anyar. Saiki, VIVE OpenXR SDK ndhukung OpenGL ES lan Vulkan.
4.1 Konten VR
4.1.1 Tampilan Refresh Rate
Konsep ing kene padha karo 3.1.1 Tampilan Refresh Rate.
- Kanggo pangembang asli, deleng XrEventDataDisplayRefreshRateChangedFB.
- Kanggo pangembang Unity, deleng pandhuan iki.
- Kanggo pangembang Unreal, deleng pandhuan iki.
4.1.2 Resolusi Eyebuffer
Konsep ing kene padha karo 3.1.2 Resolusi Eyebuffer. disaranake supaya ora ngurangi faktor skala ing ngisor 0.7, amarga iki bisa nyebabake kualitas visual sing ora bisa ditampa.
- Kanggo pangembang asli, deleng xrCreateSwapchain. Nalika nyetel ukuran, sampeyan kudu multiply jembaré lan dhuwur dening rasio. ,
- Kanggo pangembang Unity, deleng conto ing ngisor ikiamplan // C#
XRSettings.eyeTextureResolutionScale = 0.7f; //disaranake 1.0f~0.7f - Kanggo setelan Unreal, waca pandhuan iki.
4.1.3 Multi-View Rendering
Konsep ing kene padha karo 3.1.3 Multi-View Rendering. Fitur iki nyuda beban ing CPU, GPU uga duwe sawetara keuntungan. Disaranake ngaktifake fitur iki.
- Kanggo pangembang asli, KhronosGroup nyedhiyakake OpenXR Multi-View example, deleng pandhuan iki.
- Kanggo pangembang Unity, deleng Mode Render, pass siji multi-view fitur.
- Kanggo pangembang Unreal, kaya karo setelan Gelombang VIVE, deleng pandhuan iki.
4.1.4 Foveation [Ora Ndhukung Ora Nyata]
Konsep ing kene padha karo 3.1.4 Foveation. Rendering Foveated utamane dirancang kanggo nyuda beban GPU nanging bisa nyebabake biaya kinerja GPU sing tetep lan yen foveasi disetel banget lan bahan utawa tekstur tartamtu digunakake, bisa dadi banget.
katon kanggo pangguna. Mula, luwih becik ngaktifake utawa mateni fitur kasebut adhedhasar syarat khusus lan pertimbangan kinerja Saiki, fungsi Foveated mung didhukung ing OpenGL ES ing VIVE OpenXR SDK.
- Kanggo pangembang asli, fitur iki kasedhiya, nanging saiki, ora ana examples diwenehake.
- Kanggo pangembang Unity, deleng pandhuan iki.
- Kanggo pangembang Unreal, ora ndhukung fitur iki ing wayahe.
4.1.5 Topeng Render [Ora Ndhukung Ora Nyata]
Konsep ing kene padha karo 3.1.8 Render Mask.
- Kanggo pangembang asli, gunakake XrVisibilityMaskKHR kanggo entuk Mesh. Sadurunge nggawe pemandangan, gunakake Mesh iki kanggo ngisi nilai buffer kedalaman sadurunge nggawe pemandangan.
- Kanggo pangembang Unity, fitur Render Mask diaktifake kanthi standar kanggo OpenGL ES, lan bisa dipateni nganggo kode ing ngisor iki; Vulkan saiki ora ndhukung fitur iki. //C# UnityEngine.XR.XRSettings.occlusionMaskScale = 0.0f;
- Kanggo pangembang Unreal, saiki ora ndhukung fitur Render Mask.
4.2 Isi MR
OpenXR saiki ora ndhukung setelan Passthrough Quality lan Frame Rate. Kita bakal terus ngoptimalake lan ndandani fitur Passthrough, supaya disaranake pangembang nganyari versi FOTA piranti supaya tetep anyar.
Optimization umum
5.1 Pateni Mode Kinerja Dhuwur
Mateni "Mode kinerja dhuwur" bisa nyuda ukuran tampilan piranti, saengga bisa nyuda panggunaan GPU. Kelemahane yaiku nyuda resolusi layar. Sampeyan bisa ngimbangi kualitas lan kinerja kanggo mutusake apa ngaktifake.
Lokasi setelan kanggo Fokus VIVE 3 ditampilake ing Gambar 5-1-1:

Lokasi setelan kanggo VIVE XR Elite ditampilake ing Gambar 5-1-2:

5.2 Multipleampling Anti-Aliasing
Multisampling iku sawijining technique anti-aliasing digunakake kanggo Gamelan metu sudhut jagged, biasane digawe cepet liwat hardware, kang incurs biaya kinerja GPU. Disaranake ora nyetel MSAA luwih dhuwur tinimbang 2x amarga nilai sing luwih dhuwur bakal nggunakake panggunaan gpu luwih akeh.
- Kanggo pangembang asli, MSAA OpenGL ES exsample bisa ngrujuk iki; MSAA Vulkan exampler bisa ngrujuk iki.
Adreno GPU nyedhiyakake ekstensi sing ngoptimalake MSAA. - Kanggo pangembang Unity, deleng guild iki.
- Kanggo pangembang Unreal, deleng guild iki. Unreal uga nyedhiyakake anti-aliasing post processing, deleng guild iki.
5.3 GMEM Muat / Toko
Ing arsitektur GPU Adreno, ana fitur ing ngendi, nalika naleni Target Render, yen Target Render ora mbusak utawa ora valid, saben rendering kedadeyan, nilai ing Target Render dimuat menyang Memori Grafis, sing diarani GMEM Load. Yen nilai sadurunge ora perlu, cetha utawa invalidate Render Target befaure Rendering, bisa supaya kahanan iki kanggo nambah kinerja GPU.
Sampeyan bisa nyegah GMEM Load nggunakake cara ing ngisor iki. Ing OpenGL ES, sawise ngiket FBO, sampeyan bisa nelpon glClear lan glClearDepth kanggo mbusak buffer Color, Depth, lan Stencil, utawa nelpon glInvalidateFramebuffer kanggo mbatalake Target Render sing ditemtokake. Ing Vulkan, instruksi tambahan ora perlu; sampeyan bisa kanthi jelas nyetel apa mbusak lampiran sadurunge digunakake ing VkAttachmentDescription.loadOp.
Kajaba iku, nyimpen asil Tile Render bali menyang Memori Utama saka Graphics Memory diarani GMEM Store; operasi iki uga larang kanggo GPU. Kanggo ngindhari iki, disaranake mung naleni Target Render sing dibutuhake kanggo nyegah operasi Toko sing ora perlu.
5.4 Lapisan Komposisi (Multi Lapisan)
Tekstur sing ditampilake nggunakake Multi-Layer nduweni kualitas visual sing luwih apik. Nanging, fitur iki nambah kinerja GPU kanthi jumlah lapisan lan ukuran tekstur. Disaranake ora luwih saka telung lapisan.
- Kanggo pangembang asli,
o VIVE Wave SDK nggunakake WVR_SubmitFrameLayers kanggo ngirim data kanggo saben lapisan.
o VIVE OpenXR SDK nyelehake data lapisan menyang XrFrameEndInfo lan dikirim liwat xrEndFrame. - Kanggo pangembang Unity,
o Setelan VIVE Wave SDK, deleng pandhuan iki,
o Setelan VIVE OpenXR, deleng pandhuan iki. - Kanggo pangembang Unreal,
o Setelan VIVE Wave SDK, deleng pandhuan iki.
o Setelan VIVE OpenXR, deleng pandhuan iki.
5.5 CPU Spike
Nalika beban CPU luwih abot, sawetara latar mburi ngolah benang sing nduweni prioritas dhuwur, bisa uga ngganggu eksekusi asli. Kita ora bisa njamin yen Aplikasi Konten ora bakal diselani dening utas liyane.
Yen masalah kasebut muncul, sampeyan bisa nyoba nambah prioritas utas kanggo ndeleng apa bisa ngrampungake masalah kasebut. Nanging yen sampeyan ngganti konfigurasi thread kanggo ngoptimalake piranti, sampeyan kudu mriksa apa iki duwe impact negatif.
- Kanggo Unity Developer, deleng fitur konfigurasi thread Android. Yen sampeyan nggunakake VIVE Wave SDK, kita duwe fitur ing WaveXRSettings sing ngijini sampeyan kanggo nyetel prioritas, minangka ditampilake ing Figure 5-5-2. Nilai sing luwih cilik nggambarake prioritas sing luwih dhuwur.

- Ora ana cara sing ora nyata kanggo ngganti thread game, rendering thread lan prioritas thread RHI liwat setelan eksternal kajaba sampeyan ngowahi kode mesin.
Hak Cipta © 2024 HTC Corporation. Kabeh hak dilindhungi undhang-undhang
Dokumen / Sumber Daya
![]() |
Kinerja Rendering VIVE VR [pdf] Pandhuan pangguna Kinerja Rendering VR, Kinerja Rendering, Kinerja |
