Berita Produk

Mengoptimalkan Performa untuk Android XR dengan Unity

Waktu baca: 6 menit
Lihat profil Luke Hopkins
Luke Hopkins Developer Relations Engineer, Android

Samsung Galaxy XR kini telah hadir, didukung oleh Android XR. Postingan blog ini adalah bagian dari Android XR Spotlight Week, tempat kami menyediakan referensi—postingan blog, video, kode contoh, dan lainnya—yang semuanya dirancang untuk membantu Anda mempelajari, membangun, dan menyiapkan aplikasi untuk Android XR.  

Minggu ini, Samsung meluncurkan Galaxy XR, yang dibuat melalui kolaborasi dengan Google dan Qualcomm. Ini adalah momen yang menarik bagi developer, dan kami ingin membantu Anda mendapatkan performa terbaik dari aplikasi XR Anda.

Meskipun performa yang buruk dalam game dan aplikasi di perangkat non-XR dapat membuat pengguna frustrasi, di dunia XR, performa bukan sekadar opsional, melainkan sangat penting bagi keberhasilan aplikasi Anda. Jika Anda tidak mencapai target kecepatan frame di XR, hal ini dapat menyebabkan masalah yang jauh lebih serius seperti mabuk perjalanan. 

Dalam panduan ini, kami akan memandu Anda memahami pengoptimalan performa penting yang perlu Anda pahami untuk pengembangan Android XR. Anda akan mempelajari fitur mana yang memberikan peningkatan performa terbesar, kapan harus menggunakannya, dan cara fitur tersebut bekerja sama untuk membantu Anda mencapai target kecepatan frame.

Berikut tujuan kami: 

  • Minimum: 72 fps (bagian dari pedoman kualitas Google Play)
  • Opsional: 90 fps dengan anggaran 11 md per frame

Untuk mengetahui informasi selengkapnya tentang alasan pentingnya mempertahankan kecepatan frame yang tinggi, lihat panduan performa kami.   

Fitur Performa Khusus XR

Kita akan mulai dengan membahas dua fitur performa khusus XR: Foveated Rendering dan Vulkan Subsampling. 

Foveated Rendering

Rendering foveated adalah pengoptimalan yang memiliki dua mode. Yang pertama adalah mode statis yang merender bagian tengah layar dengan resolusi lebih tinggi, dan secara progresif menurunkan resolusi semakin jauh Anda melihat.

Yang kedua adalah mode pelacakan gerak mata yang secara khusus merender area yang Anda lihat secara mendetail, sekaligus mengurangi kualitas yang ditampilkan di area periferal Anda. Pada dasarnya, teknologi ini meniru cara kerja penglihatan manusia, yaitu kita hanya melihat detail halus di area tertentu yang menjadi fokus kita.

Rendering foveated secara signifikan mengurangi beban kerja GPU tanpa mengorbankan kualitas gambar yang dirasakan pengguna. Keunggulan foveated rendering adalah pengguna tidak akan menyadari penurunan kualitas dalam penglihatan periferal mereka, tetapi GPU Anda pasti akan merasakan peningkatan performa.

Bayangkan Anda sedang membangun pengalaman museum dengan artefak 3D yang rumit. Tanpa foveated rendering, Anda akan kesulitan mempertahankan 90 fps saat mencoba merender semua yang ada di ‘ruang pandang’. Dengan foveated rendering, Anda dapat mempertahankan detail poligon tinggi di tempat pengguna melihat, tetapi lingkungan latar belakang dirender dengan kualitas yang lebih rendah. Pengguna tidak akan melihat perbedaannya, tetapi Anda akan memiliki ruang untuk menambahkan lebih banyak detail ke adegan.

Subsampling Vulkan

Subsampling Vulkan adalah sahabat terbaik foveated rendering. Meskipun foveated rendering menentukan apa yang akan dirender pada berbagai tingkat kualitas, Subsampling Vulkan menangani cara merender berbagai tingkat kualitas secara efisien menggunakan Fragment Density Map.

Jika digabungkan dengan foveated rendering, Subsampling Vulkan memberi Anda performa tambahan sebesar 0,5 md. Fitur ini juga membantu menghaluskan tepi bergerigi di penglihatan periferal Anda, sehingga gambar secara keseluruhan terlihat lebih bersih.

Misalnya, dalam game simulator penerbangan yang mengharuskan pengguna berfokus pada instrumen dan kontrol, menggabungkan foveated rendering dengan Subsampling Vulkan berarti kontrol yang mendetail akan dirender dengan tajam, tetapi struktur kokpit periferal menggunakan lebih sedikit resource. Tambahan 0,5 md itu mungkin tidak terdengar banyak, tetapi itulah yang membedakan antara memiliki ruang untuk elemen interaktif tambahan atau penurunan frame selama momen intens.

Fitur GPU untuk Adegan Kompleks

Selain Foveated Rendering dan Vulkan Subsampling, ada beberapa fitur GPU yang mengurangi beban yang tidak perlu melalui instancing dan culling yang cerdas. Hal ini sangat efektif untuk scene kompleks dengan geometri berulang atau oklusi yang signifikan.

GPU Resident Drawer

GPU Resident Drawer otomatis menggunakan pembuatan instance GPU untuk mengurangi panggilan gambar dan mengosongkan waktu pemrosesan CPU. Jadi, alih-alih CPU memberi tahu GPU tentang setiap objek satu per satu, GPU mengelompokkan objek yang serupa.

Fitur ini paling efektif untuk adegan besar dengan mesh berulang, seperti pohon di hutan, furnitur di gedung perkantoran, atau properti yang tersebar di seluruh lingkungan.

Bayangkan pemandangan hutan dengan 200 pohon yang menggunakan mesh dasar yang sama. Tanpa GPU Resident Drawer, Anda memiliki 200 panggilan gambar yang menghabiskan GPU, sehingga membebaskan CPU. Jika Anda mengaktifkan fitur ini, GPU akan membuat instance pohon tersebut secara cerdas, sehingga mengurangi panggilan gambar menjadi hanya 5-10. Penghematan GPU yang sangat besar ini dapat Anda investasikan dalam logika gameplay atau penghitungan fisika.

GPU Occlusion Culling

GPU Occlusion Culling menggunakan GPU, bukan CPU, untuk mengidentifikasi dan melewati rendering objek tersembunyi. Fitur ini otomatis mendeteksi apa yang terhalang (tersembunyi) di balik objek lain, sehingga Anda tidak menyia-nyiakan GPU untuk hal-hal yang tidak dapat dilihat pengguna.

Fitur ini sangat efektif di ruang interior dengan beberapa ruangan, lingkungan yang padat, atau pemandangan arsitektur tempat dinding, lantai, dan objek secara alami menghalangi pandangan.

Misalnya, Anda sedang membangun pengalaman rumah dengan banyak ruangan. Saat pengguna berada di ruang keluarga, mengapa harus membuang-buang siklus GPU untuk merender dapur yang sangat mendetail dan sepenuhnya tersembunyi di balik dinding? Penghilangan Oklusi GPU otomatis melewati rendering objek tersembunyi tersebut, sehingga memberi Anda lebih banyak anggaran performa untuk objek yang benar-benar terlihat.

Memantau Performa Anda

Menggunakan fitur ini saja tidak cukup. Anda juga perlu mengukur pengoptimalan, sehingga Anda dapat mengukur dampaknya dan memverifikasi bahwa perubahan Anda benar-benar berfungsi.

Performance Metrics API

Performance Metrics API menyediakan pemantauan real-time terhadap penggunaan memori, performa CPU, dan performa GPU aplikasi Anda. Alat ini memberi Anda data komprehensif dari lapisan compositor dan runtime, sehingga Anda dapat melihat dengan tepat apa yang terjadi di aplikasi Anda.

Tetapkan dasar pengukuran sebelum melakukan perubahan, terapkan pengoptimalan, ukur dampaknya, dan lakukan iterasi. Pendekatan berbasis data ini berarti Anda tahu bahwa Anda benar-benar meningkatkan performa, bukan menebak-nebak.

Sebelum mengaktifkan foveated rendering, waktu render frame GPU Anda mungkin 13 milidetik, yang melebihi anggaran 11 milidetik. Aktifkan foveated rendering, ukur lagi, dan semoga Anda melihatnya turun menjadi 9 md. Itu berarti Anda mendapatkan tambahan waktu 4 md untuk menambahkan lebih banyak detail ke adegan, meningkatkan kualitas visual di bagian lain, atau sekadar memastikan performa yang lebih lancar di berbagai konten.

Tanpa metrik ini, Anda akan melakukan pengoptimalan tanpa arah. Performance Metrics API memberi tahu Anda kebenaran tentang hal yang benar-benar membantu kasus penggunaan spesifik Anda.

Debugger Frame

Frame Debugger adalah alat bawaan Unity untuk memahami secara tepat cara scene Anda dirender, frame demi frame. Alat ini menampilkan urutan panggilan gambar dan memungkinkan Anda menelusurinya untuk memverifikasi bahwa pengoptimalan berfungsi dengan benar.

Ingin mengonfirmasi bahwa SRP Batcher berfungsi? Cari entri 'RenderLoopNewBatcher' di Frame Debugger. Memeriksa apakah GPU Resident Drawer melakukan batching dengan benar? Cari entri 'Hybrid Batch Group'. Konfirmasi visual ini membantu Anda memahami apakah setelan pengoptimalan Anda benar-benar diterapkan.

Lakukan langkah demi langkah pada 50 panggilan gambar pertama adegan Anda. Jika Anda melihat objek serupa digambar satu per satu, bukan dalam batch, berarti pembuatan instance atau batching Anda tidak berfungsi dengan benar. Frame Debugger membuat masalah ini langsung terlihat sehingga Anda dapat mengatasinya.

Pengoptimalan Tambahan

Selain pengoptimalan yang telah kami bahas di atas, panduan performa lengkap kami juga membahas beberapa pengoptimalan tambahan lainnya. Berikut ringkasan singkatnya:

  • Setelan URP: Nonaktifkan HDR dan Post Processing untuk XR seluler. Fitur ini memberikan dampak visual minimal dibandingkan dengan biaya performanya pada hardware seluler, sehingga Anda akan mendapatkan peningkatan performa yang terukur dengan perbedaan visual yang hampir tidak terlihat.
  • SRP Batcher: Mengurangi overhead CPU untuk scene dengan banyak material yang menggunakan varian shader yang sama. Dengan meminimalkan perubahan status render di antara panggilan gambar, Anda dapat mengurangi waktu CPU yang dihabiskan untuk rendering secara signifikan.
  • Kecepatan Refresh Layar: Menyesuaikan secara dinamis antara 72 fps dan 90 fps berdasarkan kompleksitas adegan. Turunkan kecepatan frame selama urutan yang kompleks untuk mempertahankan stabilitas, lalu tingkatkan selama momen yang lebih sederhana untuk interaksi yang sangat lancar.
  • Depth/Opaque Textures: Nonaktifkan ini kecuali jika diperlukan secara khusus untuk efek shader. Hal ini menyebabkan operasi penyalinan GPU yang tidak perlu, yang memboroskan performa tanpa memberikan manfaat bagi sebagian besar aplikasi.
  • URP Render Scale: Setelan ini memungkinkan Anda merender pada resolusi yang lebih rendah untuk meningkatkan performa atau meningkatkan skala rendering untuk meningkatkan kualitas visual.

Untuk petunjuk langkah demi langkah tentang pengoptimalan ini dan pengoptimalan lainnya, lihat Panduan Performa Unity lengkap kami untuk Android XR.

Kesimpulan

Performa aplikasi XR Anda bukan sekadar kotak centang teknis. Hal ini membedakan antara pengalaman yang nyaman dan menarik dengan pengalaman yang membuat pengguna merasa mual atau tidak nyaman. Pengoptimalan yang telah kita bahas adalah toolkit Anda untuk mencapai target kecepatan frame yang penting di perangkat XR terbaru.

Berikut adalah roadmap Anda:

  1. Mulai dengan Foveated Rendering dan Subsampling Vulkan. Fitur khusus XR ini memberikan penghematan GPU yang langsung dan terlihat.
  2. Tambahkan GPU Resident Drawer dan Occlusion Culling jika Anda memiliki adegan yang kompleks dengan geometri atau ruang interior yang berulang.
  3. Pantau semuanya dengan Performance Metrics API untuk memastikan perubahan Anda benar-benar membantu
  4. Pelajari pengoptimalan URP tambahan untuk kapasitas performa ekstra

Sangat penting untuk mengukur dan melakukan iterasi secara berkelanjutan. Tidak semua pengoptimalan akan memberikan manfaat yang sama untuk setiap project, jadi gunakan Performance Metrics API untuk mendapatkan gambaran yang jelas tentang apa yang sebenarnya membantu kasus penggunaan spesifik Anda.

Langkah berikutnya: memperluas keterampilan Anda

Siap untuk mempelajari lebih dalam? Lihat referensi berikut:

  • Panduan Performa Unity untuk Android XR - Petunjuk penerapan langkah demi langkah yang lengkap untuk semua fitur yang dibahas di sini.
  • Memulai Unity dan Android XR - Siapkan lingkungan pengembangan Anda dan mulai membangun.
  • Dokumentasi Developer Android XR - Panduan komprehensif untuk semua fitur Android XR
Ditulis oleh:
Lanjutkan membaca