Berita Produk

Mengoptimalkan Performa untuk Android XR dengan Unity

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

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

Minggu ini, Samsung meluncurkan Galaxy XR, yang dibuat berkolaborasi dengan Google dan Qualcomm. Ini adalah saat yang tepat bagi developer, dan kami ingin membantu Anda mendapatkan performa terbaik dari aplikasi XR.

Performa yang buruk dalam game dan aplikasi di perangkat non-XR dapat membuat pengguna frustrasi. Namun, di dunia XR, performa bukan hanya opsional, tetapi juga mendasar bagi kesuksesan aplikasi Anda. Jika Anda melewatkan target kecepatan frame di XR, hal ini dapat menyebabkan masalah yang jauh lebih serius seperti mabuk gerak.

Dalam panduan ini, kami akan memandu Anda melalui 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 bagaimana fitur tersebut bekerja sama untuk membantu Anda mencapai target kecepatan frame.

Berikut target yang kami tetapkan: 

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

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

Fitur Performa Khusus XR

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

Foveated Rendering

Foveated rendering adalah pengoptimalan yang memiliki dua mode. Mode pertama adalah mode statis yang merender bagian tengah layar pada resolusi yang lebih tinggi, dan secara progresif menurunkan resolusi semakin jauh Anda melihat.

Mode kedua adalah mode pelacakan mata yang secara khusus merender area yang Anda lihat dengan detail lengkap, sekaligus mengurangi kualitas yang ditampilkan di periferal Anda. Mode ini pada dasarnya meniru cara kerja penglihatan manusia, yaitu kita hanya melihat detail halus di area tertentu yang kita fokuskan.

Foveated rendering secara signifikan mengurangi beban kerja GPU tanpa mengorbankan kualitas gambar yang dirasakan pengguna. Keunggulan foveated rendering adalah pengguna tidak akan melihat penurunan kualitas dalam penglihatan periferal mereka, tetapi GPU Anda pasti akan melihat 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 semuanya dalam 'field of view'. 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.

Vulkan Subsampling

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

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

Misalnya, dalam game simulator penerbangan tempat pengguna berfokus pada instrumen dan kontrol, menggabungkan foveated rendering dengan Vulkan Subsampling berarti kontrol mendetail dirender dengan tajam, tetapi struktur kokpit periferal menggunakan lebih sedikit resource. Tambahan 0,5 md mungkin tidak terdengar banyak, tetapi hal ini dapat membuat perbedaan antara memiliki ruang untuk elemen interaktif tambahan atau menghilangkan frame selama momen yang 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. Fitur ini sangat efektif untuk adegan kompleks dengan geometri berulang atau oklusi yang signifikan.

GPU Resident Drawer

GPU Resident Drawer otomatis menggunakan instancing GPU untuk mengurangi panggilan gambar dan mengosongkan waktu pemrosesan CPU. Jadi, bukan CPU yang memberi tahu GPU tentang setiap objek satu per satu, tetapi 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 adegan hutan dengan 200 pohon menggunakan mesh dasar yang sama. Tanpa GPU Resident Drawer, Anda memiliki 200 panggilan gambar yang menggunakan GPU, sehingga mengosongkan CPU. Jika Anda mengaktifkan fitur ini, GPU akan membuat instance pohon tersebut secara cerdas, yang akan menguranginya menjadi hanya 5-10 panggilan gambar. Dengan demikian, Anda akan menghemat GPU secara besar-besaran yang kemudian dapat diinvestasikan dalam logika gameplay atau perhitungan fisika.

GPU Occlusion Culling

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

Fitur ini sangat berguna di ruang interior dengan beberapa ruangan, lingkungan padat, atau adegan arsitektur tempat dinding, lantai, dan objek secara alami menghalangi tampilan.

Sebagai contoh, misalkan Anda sedang membangun pengalaman rumah multi-ruangan. Saat pengguna berada di ruang keluarga, mengapa harus membuang siklus GPU untuk merender dapur yang sepenuhnya tersembunyi di balik dinding? GPU Occlusion Culling otomatis melewati rendering objek tersembunyi tersebut, sehingga Anda mendapatkan lebih banyak anggaran performa untuk hal yang sebenarnya terlihat.

Memantau Performa Anda

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

Performance Metrics API

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

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

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

Tanpa metrik ini, Anda mengoptimalkan tanpa mengetahui hasilnya. Performance Metrics API memberi tahu Anda kebenaran tentang apa yang sebenarnya membantu kasus penggunaan spesifik Anda.

Frame Debugger

Frame Debugger adalah alat bawaan Unity untuk memahami dengan tepat bagaimana adegan Anda dirender, frame demi frame. Alat ini menampilkan urutan panggilan gambar dan memungkinkan Anda menelusurinya untuk memverifikasi bahwa pengoptimalan Anda 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 benar-benar berlaku.

Telusuri 50 panggilan gambar pertama dari adegan Anda. Jika Anda melihat objek serupa digambar satu per satu, bukan di-batch, hal ini menunjukkan bahwa instancing atau batching Anda tidak berfungsi dengan benar. Frame Debugger membuat masalah ini langsung terlihat sehingga Anda dapat mengatasinya.

Pengoptimalan Tambahan

Selain pengoptimalan yang telah kita 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 adegan dengan banyak materi menggunakan varian shader yang sama. Dengan meminimalkan perubahan status render antara panggilan gambar, Anda dapat mengurangi waktu CPU yang digunakan untuk rendering secara signifikan.
  • Kecepatan Refresh Layar: Sesuaikan 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.
  • Tekstur Kedalaman/Buram: Nonaktifkan tekstur ini kecuali jika diperlukan secara khusus untuk efek shader. Tekstur ini menyebabkan operasi penyalinan GPU yang tidak perlu yang membuang performa tanpa memberikan manfaat bagi sebagian besar aplikasi.
  • Skala Render URP: Setelan ini memungkinkan Anda merender pada resolusi yang lebih rendah untuk mendapatkan manfaat performa atau meningkatkan skala rendering untuk meningkatkan kualitas visual.

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

Kesimpulan

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

Berikut roadmap Anda:

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

Anda harus mengukur secara terus-menerus dan melakukan iterasi. 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 lengkap untuk semua fitur yang dibahas di sini.
  • Mulai Menggunakan Unity dan Android XR - Siapkan lingkungan pengembangan dan mulai membangun.
  • Dokumentasi Developer Android XR - Panduan komprehensif untuk semua fitur Android XR
Ditulis oleh:

Lanjutkan membaca