Kinerja Rendering VR
Penyetelan dan Optimasi
Perkenalan
Mencapai pengalaman VR yang optimal pada perangkat keras dengan sumber daya terbatas adalah kunci untuk menghadirkan pengalaman pengguna yang lancar dan nyaman. Jika frame rate dari konten yang dirender turun atau tidak stabil di bawah refresh rate perangkat, hal itu akan menyebabkan frame tersendat dan tersendat, mabuk perjalanan, dll., yang akhirnya berdampak negatif pada pengalaman pengguna. Oleh karena itu, mengoptimalkan kinerja konten sangat penting untuk memastikan pengalaman yang menyenangkan.
Sebelum memulai penyetelan kinerja, penting untuk memahami di mana saja hambatan kinerja berada untuk menghindari penyetelan yang tidak efisien. Dokumen ini dirancang untuk membantu pengembang mengidentifikasi hambatan kinerja dan menawarkan solusi untuk mengatasi masalah kinerja rendering.
Dokumen ini disusun menjadi beberapa bagian berikut:
- Bab 2: Identifikasi Kendala – Bagian ini membantu pengembang mengidentifikasi di mana kendalanya.
- Bab 3 dan 4: Pengaturan VIVE Wave dan VIVE OpenXR – Bagian ini menguraikan pengaturan khusus yang dapat memengaruhi kinerja CPU/GPU untuk aplikasi VIVE Wave dan OpenXR. Pengembang dapat bereksperimen dengan mengaktifkan atau menonaktifkan fitur ini berdasarkan hambatan kinerja yang ditemukan untuk menentukan apakah ada peningkatan.
- Bab 5: Optimasi Umum – Bagian ini berbagi beberapa praktik dan pengalaman optimasi umum.
Mengidentifikasi Kendala
Saat HMD bergerak, jika aplikasi VR/MR mengalami frame jitter atau tepi hitam, dll., biasanya hal ini disebabkan oleh masalah kinerja rendering yang buruk. Biasanya, masalah kinerja rendering dapat dikategorikan menjadi 2 jenis: CPU-bound atau GPU-bound. Memahami jenis batas untuk aplikasi Anda sangat penting di awal untuk menghindari penyetelan yang tidak efisien.
Dalam bab ini, kami menyediakan langkah-langkah sederhana yang memudahkan Anda mengidentifikasi dengan cepat di mana letak masalah kinerja.
2.1 Periksa FPS Rendering Konten
Pertama, kita mulai dengan memeriksa FPS konten, yaitu jumlah bingkai yang dirender konten per detik. FPS harus dipertahankan pada kecepatan bingkai tampilan dan tetap stabil. Jika tidak, FPS dapat menyebabkan gangguan bingkai.
Jika SDK aplikasi Anda menggunakan VIVE WAVE SDK 6.0.0 atau yang lebih baru, Anda dapat menggunakan perintah adb berikut untuk memeriksa FPS. DK 6.0.0
$adb Logcat -s VRMetrik
Anda akan melihat data log berikut.
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” Angka pertama menunjukkan FPS konten, sedangkan angka kedua menunjukkan framerate tampilan.
Jika versi Wave SDK Anda di bawah 6.0.0, disarankan untuk meningkatkan ke versi terbaru untuk meningkatkan kinerja rendering dan pengoptimalan lainnya.
Jika SDK aplikasi Anda dibuat dengan VIVE OpenXR, Anda dapat menggunakan perintah adb berikut untuk memeriksa FPS.
$adb Logcat -s RENDER_ATW
Anda akan melihat data log berikut ini
RENDER_ATW: [FPS] tekstur baru:90.00
RENDER_ATW: [FPS] R sekarang:90.00 lewati:0 317, -0.0155 0.805527, 0.006788)
RENDER_ATW: [FPS] L hadir:90.00 lewati:0 (0.592301, -0.015502, 0.805539, 0.006773)
Angka setelah "tekstur baru" mewakili FPS konten saat ini. Angka setelah "R saat ini" dan "L saat ini" mewakili framerate tampilan.
Terkadang, FPS konten dan frame rate tampilan mungkin memiliki sedikit perbedaan.
Misalnyaample, dalam kasus di atas, 89.8 FPS dapat dianggap sebagai 90 FPS.
Jika FPS konten aplikasi secara konsisten lebih rendah daripada framerate tampilan atau tetap tidak stabil, ini menunjukkan masalah kinerja rendering. Oleh karena itu, langkah selanjutnya adalah mengidentifikasi apakah hambatan tersebut berasal dari CPU atau GPU.
2.2 Periksa penggunaan CPU dan GPU
Jika SDK aplikasi Anda menggunakan VIVE WAVE SDK 6.0.0 atau yang lebih baru, Anda dapat menggunakan perintah adb berikut untuk memeriksa FPS.
$adb logcat -s VRMetrik
Anda akan melihat data log berikut.
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
Seperti yang Anda lihat pada hasil log di atas, penggunaan CPU adalah 27% dan penggunaan GPU adalah 72%. Jika versi Wave SDK Anda di bawah 6.0.0, disarankan untuk memutakhirkan ke versi terbaru untuk meningkatkan kinerja rendering dan pengoptimalan lainnya.
Untuk aplikasi VIVE OpenXR, Anda dapat menggunakan perintah berikut untuk memeriksa penggunaan CPU dan GPU.
# di linux/ubuntu
$ adb logcat | grep PENGGUNAAN_CPU
# di powershell
$ adb logcat | Pilih-String -Pola PENGGUNAAN_CPU
Anda akan melihat log berikut ini
CPU Rata-rata CPU0 CPU1 CPU2 CPU3 CPU4 CPU5 CPU6 CPU7 GPU PENGGUNAAN CPU [BEBAN] 25.67% 32.22% 25.29% 30.77% 29.35% 21.35% 22.09% 18.39% 24.14% 73 %
Jika Anda mengamati bahwa FPS tidak dapat mempertahankan frame rate tampilan dan penggunaan GPU juga sangat tinggi, biasanya melebihi 85%, Anda dapat mencoba menyesuaikan Resolusi Eyebuffer (bagian 3.1.2, bagian 4.1.2) untuk melihat apakah itu meningkatkan FPS. Jika penyesuaian ini mengarah ke yang lebih baik
performanya, kami dapat menyimpulkan bahwa masalahnya ada pada GPU dan memfokuskan upaya pengoptimalan sebagaimana mestinya.
Di sisi lain, apabila penyesuaian Resolusi Eyebuffer tidak menghasilkan peningkatan performa yang berarti, kemungkinan besar hambatannya ada pada CPU, dan kita harus fokus pada pengoptimalan kinerja CPU.
Ada kemungkinan juga bahwa aplikasi tersebut terikat pada CPU dan GPU secara bersamaan. Dalam kasus seperti itu, upaya pengoptimalan harus diterapkan pada CPU dan GPU untuk mencapai peningkatan kinerja yang seimbang.
2.3 Terikat GPU
Bila aplikasi VR terikat GPU, artinya GPU merupakan hambatan utama, dan tidak dapat memenuhi tuntutan rendering aplikasi. Untuk mengurangi masalah yang terikat GPU, pertimbangkan rekomendasi berikut:
Pertama, gunakan alat profil seperti RenderDoc atau Game Engine profiler (Unity Profiler, Unreal Insights) untuk menganalisis di mana GPU menghabiskan sebagian besar waktunya. Identifikasi operasi yang paling mahal dan fokuslah pada pengoptimalannya.
Untuk Pengembang Asli, Anda dapat menggunakan RenderDoc untuk mengidentifikasi panggilan gambar mana yang menyebabkan beban GPU berlebihan.
Untuk Pengembang Unity, Anda dapat mengikuti dokumen Unity ini atau menggunakan RenderDoc untuk menganalisis masalah kinerja rendering, dan mengikuti dokumentasi pengoptimalan grafis Unity untuk panduan dalam mengoptimalkan aplikasi Anda.
Untuk Unreal Developer, Anda dapat menggunakan GPU Visualizer atau menggunakan RenderDoc untuk menganalisis masalah kinerja rendering, dan ikuti Panduan Kinerja Unreal untuk panduan mengoptimalkan aplikasi Anda.
Kedua, Anda juga dapat mencoba menyesuaikan fitur atau pengaturan Wave tertentu untuk mengurangi beban GPU.
- Mengatur Kecepatan Refresh Tampilan lebih lambat (bagian 3.1.1, bagian 4.1.1)
- Sesuaikan Resolusi Eyebuffer (bagian 3.1.2, bagian 4.1.2), 14.1.1)
- Coba aktifkan Foveation (bagian 3.1.4, bagian 4.1.4).
Jika aplikasi Anda juga merupakan aplikasi MR, Anda juga dapat menyesuaikan pengaturan Passthrough.
- Atur Kualitas Gambar Passthrough ke lebih rendah. (bagian 3.2.1)
- Sesuaikan Passthrough Framerate lebih lambat. (bagian 3.2.2)
Untuk pengaturan lain tentang kinerja GPU, Anda dapat merujuk ke Bab 2.6.
2.4 Terikat CPU
Bila aplikasi VR terikat CPU, artinya CPU merupakan hambatan utama. Pertimbangkan rekomendasi berikut:
Pertama, gunakan alat profil seperti Systrace atau Game Engine profiler (Unity Profiler, Unreal Insights) untuk menganalisis dan mengidentifikasi bagian kode mana yang paling banyak menghabiskan sumber daya CPU. Fokus pada pengoptimalan area ini dan lakukan refaktor algoritma yang intensif komputasi untuk mengurangi beban CPU.
- Untuk Pengembang Asli, Anda dapat menggunakan Systrace untuk profiler proyek Anda.
- Untuk Pengembang Unity, Anda dapat menggunakan CPU Usage Profilemodul r untuk menemukan masalah kinerja CPU.
- Untuk Unreal Developer, Anda dapat menggunakan Insight Unreal untuk menemukan masalah kinerja CPU.
Kedua, Anda juga dapat mencoba menyesuaikan fitur atau pengaturan Wave tertentu untuk mengurangi beban GPU.
- Mengatur Kecepatan Refresh Tampilan lebih lambat (bagian 3.1.1, bagian 4.1.1)
- Gunakan Multi-View Rendering (bagian 3.1.4, bagian 4.1.4)
Jika aplikasi Anda juga merupakan aplikasi MR, Anda juga dapat menyesuaikan pengaturan Passthrough.
- Sesuaikan Passthrough Framerate lebih lambat (bagian 3.2.2).
Untuk pengaturan lain tentang kinerja CPU, Anda dapat merujuk ke Bab 2.6.
2.5 Ringkasan
Terakhir, kami telah menyusun alur kerja pemeriksaan kinerja di atas ke dalam Gambar 2-5-1. Mulailah dengan memeriksa FPS konten. Jika lebih rendah dari framerate tampilan atau tetap tidak stabil, maka analisis penggunaan GPU/CPU untuk menentukan apakah itu terikat GPU atau CPU. Terakhir, gunakan profiler untuk mengidentifikasi potensi masalah kinerja atau menyesuaikan fitur atau pengaturan Wave untuk mengoptimalkan kinerja CPU.

2.6 Referensi Cepat Pengaturan Mana yang Dapat Meningkatkan Pemuatan CPU/GPU
Cantumkan pengaturan SDK yang terkait dengan pemuatan CPU/GPU seperti di bawah ini. Anda dapat memeriksa pengaturan pengoptimalan yang relevan berdasarkan hambatan aplikasi.
Terkait dengan CPU:
- Pengaturan SDK VIVE Wave
o Konten VR
▪ 3.1.1 Kecepatan Refresh Tampilan
▪ 3.1.4 Multi-View Merender
▪ 3.1.6 Kualitas Adaptif
▪ 3.1.7 Kompositor Gerak Adaptif
o Konten MR
▪ 3.2.2 Menyesuaikan Passthrough Frame Rate - Pengaturan SDK VIVE OpenXR
o Konten VR
▪ 4.1.1 Kecepatan Refresh Tampilan
▪ 4.1.4 Multi-View Merender - Optimasi Umum
o Lonjakan CPU 5.5
Terkait dengan GPU:
- Pengaturan SDK VIVE Wave
o Konten VR
▪ 3.1.1 Kecepatan Refresh Tampilan
▪ 3.1.2 Resolusi Eyebuffer
▪ 3.1.3 Multi-View Merender
▪ 3.1.4 Foveasi
▪ 3.1.5 Peningkatan Ketajaman Bingkai (FSE)
▪ 3.1.6 Kualitas Adaptif
▪ 3.1.7 Kompositor Gerak Adaptif
▪ 3.1.8 Render Mask [Tidak Mendukung Unreal] o Konten MR
▪ 3.2.1 Menyesuaikan Kualitas Passthrough
▪ 3.2.2 Menyesuaikan Passthrough Frame Rate - Pengaturan SDK VIVE OpenXR
o Konten VR
▪ 4.1.1 Kecepatan Refresh Tampilan
▪ 4.1.2 Resolusi Eyebuffer
▪ 4.1.3 Multi-View Merender
▪ 4.1.4 Foveation [Tidak Mendukung Unreal] ▪ 4.1.5 Render Mask [Tidak Mendukung Unreal] - Optimasi Umum
o 5.1 Matikan Mode Kinerja Tinggi
o 5.2 Multibahasaampbahasa inggris
o 5.3 Muat/Simpan GMEM
o 5.4 Lapisan Komposisi (Multi Layer)
Pengaturan Gelombang VIVE
VIVE Wave adalah platform dan perangkat terbuka yang memudahkan Anda mengembangkan konten VR dan menyediakan pengoptimalan perangkat berkinerja tinggi untuk mitra pihak ketiga. VIVE Wave mendukung mesin game Unity dan Unreal.
Kami terus mengoptimalkan dan mengatasi berbagai bug, jadi kami sarankan agar SDK selalu diperbarui.
Saat ini, VIVE Wave hanya mendukung OpenGL ES. Berikut ini adalah daftar fitur yang diurutkan berdasarkan pengaruhnya terhadap kinerja GPU. Kami akan membaginya menjadi dua bagian: konten VR dan konten MR.
3.1 Konten VR
3.1.1 Kecepatan Refresh Tampilan
Kecepatan refresh yang lebih tinggi menawarkan visual yang lebih halus, tetapi mengakibatkan peningkatan beban sistem. Sebaliknya, kecepatan refresh yang lebih rendah mengurangi beban sistem, tetapi menghasilkan visual yang kurang halus. Jika aplikasi mengalami masalah yang terikat pada CPU/GPU, Anda dapat mencoba menurunkannya.asinmengubah kecepatan penyegaran layar untuk mengatasi masalah tersebut.
- Untuk pengembang asli, lihat WVR_SetFrameRate.
- Untuk pengembang Unity, lihat panduan ini.
- Untuk pengembang Unreal, lihat panduan ini.
3.1.2 Resolusi Eyebuffer
Resolusi Eyebuffer adalah ukuran tekstur konten App yang akan dirender, tekstur yang dirender akan diserahkan ke runtime untuk melakukan proses posting dan ditampilkan pada tampilan HMD.
Meskipun ukuran buffer mata yang lebih besar dapat menghasilkan visual yang lebih jelas dan lebih rinci, tetapi juga memberikan beban yang signifikan pada GPU. Oleh karena itu, menemukan keseimbangan yang tepat antara kualitas visual dan kinerja sangatlah penting.
Jika aplikasi mengalami masalah keterbatasan GPU, Anda dapat mencoba mengurangiasinUkuran eyebuffer dapat disesuaikan dengan mengalikan faktor skala. Namun, kami menyarankan untuk tidak mengurangi faktor skala di bawah 0.7, karena hal ini dapat mengakibatkan kualitas visual yang tidak dapat diterima.
- Untuk pengembang asli, rujuk ke WVR_ObtainTextureQueue. Saat menyesuaikan ukuran, Anda harus mengalikan lebar dan tinggi dengan rasio.
- Untuk pengembang Unity, lihat WaveXRSettings.
Alternatifnya, Anda dapat membuat perubahan melalui kode seperti di bawah ini.
XRSettings.eyeTextureResolutionScale = NilaiSkalaResolusi; // C# - Untuk pengembang Unreal, lihat SetPixelDensity.
3.1.3 Multi-View Merender
Dalam rendering tradisional, kita menggambar mata kiri dan kanan secara terpisah, yang memerlukan dua panggilan gambar untuk adegan yang sama.View Rendering mengatasi masalah ini dengan hanya melakukan satu panggilan gambar.
Fitur ini mengurangi beban CPU dengan cara menurunkannya.asing jumlah panggilan gambar. GPU juga memiliki beberapa keuntungan, beban kerja shader vertex juga berkurang karena tidak perlu menjalankan shader tambahan untuk mata lainnya, tetapi beban kerja shader fragment tetap tidak berubah karena masih perlu mengevaluasi setiap piksel untuk kedua mata. Kami merekomendasikan untuk mengaktifkan fitur ini.
- Untuk pengembang asli, Anda dapat merujuk ke wvr_native_hellovr sampsaya.
- Untuk pengembang Unity, lihat Mode Render, single pass adalah multi-view fitur.
- Untuk pengembang Unreal, lihat panduan ini.
3.1.4 Foveasi
Rendering foveated terutama dirancang untuk mengurangi beban GPU. Rendering ini mengurangi detail bingkai di bagian perifer tampilan dan mempertahankan detail resolusi tinggi di bagian tengah bidang viewJika Aplikasi memiliki masalah terikat GPU, Anda dapat mencoba mengaktifkan rendering Foveation.

Ada beberapa hal yang perlu diperhatikan saat menggunakan foveasi:
➢ Pengguna biasanya tidak menyadari berkurangnya detail di area periferal saat menerapkan mode foveasi default. Namun, jika kualitas foveasi periferal diatur terlalu rendah, hal itu dapat terlihat oleh pengguna.
➢ Efek foveasi mungkin lebih terlihat pada material atau tekstur tertentu, yang dapat menarik perhatian pengguna. Pengembang harus menyadari hal ini dan mengevaluasinya sebagaimana mestinya.
➢ Mengaktifkan fitur foveated rendering akan menimbulkan biaya kinerja GPU tetap, yang dapat bervariasi antara 1% hingga 6% tergantung pada ukuran eye buffer. Saat menggunakan shader sederhana dalam adegan, perolehan kinerja dari penghematan sumber daya mungkin lebih rendah daripada biaya kinerja GPU tetap, yang mengakibatkan penurunan kinerja.
- Untuk pengembang asli, rujuk panduan ini.
- Untuk pengembang Unity, lihat panduan ini. Khususnya, saat Anda mengaktifkan pasca-pemrosesan atau HDR, foveation tidak dapat digunakan sepenuhnya. Karena Unity akan merender objek ke tekstur render yang dihasilkannya sendiri, bukan tekstur render yang dihasilkan saat runtime yang mendukung foveation.
- Untuk pengembang Unreal, lihat panduan ini. Perlu dicatat, foveation tidak dapat digunakan sepenuhnya pada Multi-View Rendering, karena Unreal tidak dapat langsung merender objek ke tekstur render yang dihasilkan runtime yang mendukung foveation.
3.1.5 Peningkatan Ketajaman Bingkai (FSE)
FSE yang menyediakan hasil rendering yang tajam melalui pengenalan filter yang tajam, dapat membuat konten lebih jelas dan cukup membantu untuk meningkatkan kejelasan teks dalam adegan. Jika Aplikasi memiliki masalah GPU, Anda dapat mempertimbangkan untuk menonaktifkan FSE jika tidak penting.

- Untuk pengembang asli, rujuk panduan ini.
- Untuk pengembang Unity, lihat panduan ini.
- Untuk pengembang Unreal, lihat panduan ini.
3.1.6 Kualitas Adaptif
Untuk menghemat baterai dan mempertahankan kinerja rendering perangkat, fitur ini secara otomatis menyesuaikan tingkat kinerja clock CPU/GPU berdasarkan penggunaannya. Selain itu, strategi lain dapat diterapkan untuk meningkatkan kinerja, seperti mengaktifkan/menonaktifkan Foveation secara otomatis atau konten dapat menyesuaikan dirinya sendiri jika menerima peristiwa beban tinggi/rendah.
- Untuk pengembang asli, rujuk panduan ini.
- Untuk pengembang Unity, lihat panduan ini. Dalam plugin Unity kami, ukuran buffer mata dapat disesuaikan secara otomatis berdasarkan kinerja saat ini; Ukuran teks akan menyaring nilai skala yang terlalu kecil dalam daftar Resolusi. Kami merekomendasikan teks berukuran minimal 20 dmm atau lebih besar.
- Untuk pengembang Unreal, lihat panduan ini.
3.1.7 Kompositor Gerak Adaptif
Fitur ini merupakan fitur eksperimental yang mencakup UMC dan PMC. UMC akan mengurangi Frame Rate hingga setengahnya dan mengekstrapolasi frame baru secara real time untuk menjaga kelancaran visual. Namun, fitur ini disertai dengan beberapa latensi, artefak, dan pemuatan GPU.
PMC terutama menggunakan Depth Buffer untuk memungkinkan ATW memperhitungkan translasi HMD, yang diperluas hingga kompensasi 6-dof. Fitur ini dapat mengurangi latensi translasi sebanyak 1~2 frame, tetapi meningkatkan pemuatan GPU.
- Untuk pengembang asli, rujuk panduan ini.
- Untuk pengembang Unity, lihat panduan ini.
- Untuk pengembang Unreal, lihat panduan ini.
3.1.8 Render Mask [Tidak Mendukung Unreal]
Piksel di tepi menjadi hampir tidak terlihat setelah distorsi, topeng render memodifikasi nilai buffer kedalaman piksel yang tidak terlihat ini. Jika Anda mengaktifkan pengujian kedalaman, karena early-z, piksel yang tidak terlihat ini tidak akan dirender, sehingga mengurangi beban GPU. Fitur ini berguna jika ada objek render dengan beban berat di area yang tidak terlihat ini; jika tidak, jika tidak ada objek render di area ini, disarankan untuk menonaktifkannya karena akan menghabiskan sedikit penggunaan GPU.
- Untuk pengembang asli, lihat panduan ini. Anda harus mengikat buffer kedalaman sebelum memanggil RenderMask; jika tidak, itu tidak akan efektif.
- Untuk pengembang Unity, lihat panduan ini.
- Untuk pengembang Unreal, saat ini tidak mendukung fitur Render Mask.
3.2 Konten MR
3.2.1 Menyesuaikan Kualitas Passthrough
Ada 3 level untuk kualitas gambar passthrough:
➢ WVR_PassthroughImageQuality_DefaultMode – cocok untuk konten MR tanpa permintaan khusus.
➢ WVR_PassthroughImageQuality_PerformanceMode – cocok untuk konten MR yang membutuhkan lebih banyak sumber daya GPU untuk rendering pemandangan virtual.
➢ WVR_PassthroughImageQuality_QualityMode – cocok untuk konten MR yang memungkinkan pengguna melihat lingkungan sekitar dengan jelas, tetapi pemandangan konten virtual harus memiliki penyetelan yang lebih baik untuk performa.
Anda dapat menyesuaikan kualitas Passthrough ke PerformanceMode untuk mengurangi penggunaan GPU.
- Untuk pengembang Native, Uunity atau Unreal, lihat panduan ini.
3.2.2 Menyesuaikan Kecepatan Bingkai Passthrough
Seperti halnya kecepatan refresh Display, framerate Passthrough yang lebih tinggi menawarkan visual yang lebih halus, tetapi mengorbankan beban sistem yang lebih besar. Sebaliknya, kecepatan refresh yang lebih rendah mengurangi beban sistem, tetapi menghasilkan visual yang kurang halus. Ada 2 mode framerate passthrough: Boost dan Normal.
- Untuk pengembang asli, dapat menyesuaikan kualitas passthrough menggunakan WVR_SetPassthroughImageRate.
- Untuk pengembang Unity, dapat mengubah melalui kode, mis.amppengaturan file adalah sebagai berikut // C#
Interop.WVR_SetPassthroughImageQuality(WVR_PassthroughImageQuality.PerformanceMode); - Untuk pengembang Unreal, pengaturan metode lihat simpul cetak biru pada Gambar 3-2-2.

Pengaturan VIVE OpenXR
OpenXR adalah standar terbuka yang menyediakan serangkaian API umum untuk mengembangkan aplikasi XR yang berjalan di berbagai perangkat VR, yang dikembangkan oleh Khronos Group. VIVE Focus 3 dan VIVE XR Elite juga mendukung OpenXR, VIVE OpenXR SDK menyediakan dukungan komprehensif untuk perangkat VR HTC, yang memungkinkan pengembang untuk membangun Allin-One dan konten dengan Unity dan Unreal engine pada perangkat VR HTC. Kami terus mengoptimalkan dan mengatasi berbagai bug, jadi disarankan agar pengembang memperbarui versi FOTA perangkat mereka agar tetap mutakhir. Saat ini, VIVE OpenXR SDK mendukung OpenGL ES dan Vulkan.
4.1 Konten VR
4.1.1 Kecepatan Refresh Tampilan
Konsep di sini mirip dengan 3.1.1 Display Refresh Rate.
- Untuk pengembang asli, lihat XrEventDataDisplayRefreshRateChangedFB.
- Untuk pengembang Unity, lihat panduan ini.
- Untuk pengembang Unreal, lihat panduan ini.
4.1.2 Resolusi Eyebuffer
Konsep di sini mirip dengan 3.1.2 Eyebuffer Resolution. Kami sarankan untuk tidak mengurangi faktor skala di bawah 0.7, karena ini dapat menghasilkan kualitas visual yang tidak dapat diterima.
- Untuk pengembang asli, lihat xrCreateSwapchain. Saat menyesuaikan ukuran, Anda harus mengalikan lebar dan tinggi dengan rasio. ,
- Untuk pengembang Unity, lihat contoh berikutampsaya // C#
XRSettings.eyeTextureResolutionScale = 0.7f; //disarankan 1.0f~0.7f - Untuk pengaturan Unreal, lihat panduan ini.
4.1.3 Multi-View Merender
Konsep di sini mirip dengan 3.1.3 Multi-View Rendering. Fitur ini mengurangi beban pada CPU, GPU juga memiliki beberapa manfaat. Kami sarankan untuk mengaktifkan fitur ini.
- Untuk pengembang asli, KhronosGroup menyediakan OpenXR Multi-View example, lihat panduan ini.
- Untuk pengembang Unity, lihat Mode Render, single pass adalah multi-view fitur.
- Untuk pengembang Unreal, seperti pengaturan VIVE Wave, lihat panduan ini.
4.1.4 Foveation [Tidak Mendukung Unreal]
Konsep di sini mirip dengan 3.1.4 Foveation. Rendering foveated terutama dirancang untuk mengurangi beban GPU tetapi mengaktifkannya akan menimbulkan biaya kinerja GPU tetap dan jika foveation diatur terlalu rendah dan bahan atau tekstur tertentu digunakan, hal itu dapat menjadi sangat
terlihat oleh pengguna. Oleh karena itu, sebaiknya Anda mengaktifkan atau menonaktifkan fitur tersebut berdasarkan kebutuhan dan pertimbangan performa spesifik Anda. Saat ini, fungsionalitas Foveated hanya didukung di OpenGL ES pada VIVE OpenXR SDK.
- Untuk pengembang asli, fitur ini tersedia, tetapi saat ini belum tersediaample disediakan.
- Untuk pengembang Unity, lihat panduan ini.
- Untuk pengembang Unreal, tidak mendukung fitur ini saat ini.
4.1.5 Render Mask [Tidak Mendukung Unreal]
Konsep di sini mirip dengan 3.1.8 Render Mask.
- Untuk pengembang asli, gunakan XrVisibilityMaskKHR untuk mendapatkan Mesh. Sebelum merender adegan, gunakan Mesh ini untuk mengisi nilai buffer kedalaman sebelum merender adegan.
- Untuk pengembang Unity, fitur Render Mask diaktifkan secara default untuk OpenGL ES, dan dapat dinonaktifkan dengan kode berikut; Vulkan saat ini tidak mendukung fitur ini. //C# UnityEngine.XR.XRSettings.occlusionMaskScale = 0.0f;
- Untuk pengembang Unreal, saat ini tidak mendukung fitur Render Mask.
4.2 Konten MR
OpenXR saat ini tidak mendukung pengaturan Kualitas Passthrough dan Frame Rate. Kami akan terus mengoptimalkan dan memperbaiki fitur Passthrough, jadi kami sarankan agar pengembang memperbarui versi FOTA perangkat agar tetap mutakhir.
Optimasi Umum
5.1 Matikan Mode Kinerja Tinggi
Menonaktifkan "Mode kinerja tinggi" dapat mengurangi ukuran tampilan perangkat, sehingga mengurangi penggunaan GPU. Kekurangannya adalah penurunan resolusi layar. Anda dapat menyeimbangkan kualitas dan kinerja untuk memutuskan apakah akan mengaktifkannya.
Lokasi pengaturan untuk VIVE Focus 3 ditunjukkan pada Gambar 5-1-1:

Lokasi pengaturan untuk VIVE XR Elite ditunjukkan pada Gambar 5-1-2:

5.2 Multiampling Anti-Aliasing
banyakampling adalah anti-aliasinTeknik yang digunakan untuk menghaluskan tepi bergerigi, biasanya dipercepat melalui perangkat keras, yang mengakibatkan penurunan kinerja GPU. Kami menyarankan untuk tidak mengatur MSAA lebih tinggi dari 2x karena nilai yang lebih tinggi akan mengonsumsi lebih banyak penggunaan GPU.
- Untuk pengembang asli, MSAA OpenGL ES exsample bisa merujuk pada ini; MSAA Vulkan mantanampler dapat merujuk ke ini.
GPU Adreno menyediakan ekstensi yang mengoptimalkan MSAA. - Untuk pengembang Unity, rujuk ke guild ini.
- Untuk pengembang Unreal, lihat panduan ini. Unreal juga menyediakan fitur anti-aliasing pasca-pemrosesan.asing, merujuk pada perkumpulan ini.
5.3 Muat/Simpan GMEM
Dalam arsitektur GPU Adreno, terdapat fitur yang memungkinkan, saat mengikat Target Render, jika Target Render tidak dihapus atau dibatalkan, setiap kali rendering terjadi, nilai dalam Target Render dimuat ke dalam Memori Grafis, yang disebut Pemuatan GMEM. Jika nilai sebelumnya tidak diperlukan, hapus atau batalkan Target Render sebelum rendering, dapat menghindari situasi ini untuk meningkatkan kinerja GPU.
Anda dapat menghindari GMEM Load menggunakan metode berikut. Di OpenGL ES, setelah mengikat FBO, Anda dapat memanggil glClear dan glClearDepth untuk menghapus buffer Color, Depth, dan Stencil, atau memanggil glInvalidateFramebuffer untuk membatalkan Render Target yang ditentukan. Di Vulkan, instruksi tambahan tidak diperlukan; Anda dapat secara eksplisit mengatur apakah akan menghapus lampiran sebelum digunakan di VkAttachmentDescription.loadOp.
Demikian pula, menyimpan hasil Tile Render kembali ke Memori Utama dari Memori Grafis disebut GMEM Store; operasi ini juga mahal bagi GPU. Untuk menghindari hal ini, kami sarankan untuk mengikat hanya Render Target yang diperlukan guna mencegah operasi Store yang tidak perlu.
5.4 Lapisan Komposisi (Multi Layer)
Tekstur yang ditampilkan menggunakan Multi-Layer memiliki kualitas visual yang lebih baik. Namun, fitur ini meningkatkan kinerja GPU secara signifikan dengan jumlah lapisan dan ukuran tekstur. Kami sarankan tidak lebih dari tiga lapisan.
- Untuk pengembang asli,
o VIVE Wave SDK menggunakan WVR_SubmitFrameLayers untuk meneruskan data untuk setiap lapisan.
o VIVE OpenXR SDK menempatkan data lapisan ke dalam XrFrameEndInfo dan mengirimkannya melalui xrEndFrame. - Untuk pengembang Unity,
o Pengaturan VIVE Wave SDK, lihat panduan ini,
o Pengaturan VIVE OpenXR, lihat panduan ini. - Untuk pengembang Unreal,
o Pengaturan VIVE Wave SDK, lihat panduan ini.
o Pengaturan VIVE OpenXR, lihat panduan ini.
Lonjakan CPU 5.5
Ketika beban CPU lebih berat, beberapa thread proses latar belakang memiliki prioritas tinggi, hal ini dapat mengganggu eksekusi asli. Kami tidak dapat menjamin bahwa Aplikasi Konten tidak akan terganggu oleh thread lain.
Jika masalah seperti itu muncul, Anda dapat mencoba meningkatkanasinAnda dapat mengubah prioritas thread untuk melihat apakah itu menyelesaikan masalah. Tetapi jika Anda mengubah konfigurasi thread untuk mengoptimalkan perangkat, Anda perlu memeriksa apakah ini berdampak negatif.
- Untuk Unity Developer, lihat fitur konfigurasi thread Android. Jika Anda menggunakan VIVE Wave SDK, kami memiliki fitur di WaveXRSettings yang memungkinkan Anda menyesuaikan prioritas, seperti yang ditunjukkan pada Gambar 5-5-2. Nilai yang lebih kecil menunjukkan prioritas yang lebih tinggi.

- Unreal tidak memiliki metode untuk mengubah prioritas thread game, thread rendering, dan thread RHI melalui pengaturan eksternal kecuali Anda memodifikasi kode mesin.
Hak cipta © 2024 HTC Corporation. Semua hak dilindungi undang-undang
Dokumen / Sumber Daya
![]() |
Performa Rendering VIVE VR [Bahasa Indonesia:] Panduan Pengguna Kinerja Rendering VR, Kinerja Rendering, Kinerja |
