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 semuanya dirancang untuk membantu Anda mempelajari, membuat, dan menyiapkan aplikasi untuk Android XR.  

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

Meskipun performa yang buruk dalam game dan aplikasi di perangkat non-XR dapat membuat pengguna frustrasi, 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 workload 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 membuat 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 scene.

Vulkan Subsampling

Vulkan Subsampling adalah fitur yang paling cocok untuk 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 memberikan performa tambahan sebesar 0,5 md. Fitur ini juga membantu menghaluskan tepi bergerigi dalam penglihatan periferal, 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 terlalu signifikan, tetapi hal ini dapat membuat perbedaan antara memiliki ruang untuk elemen interaktif tambahan atau menghilangkan frame selama momen yang intens.

Fitur GPU untuk Scene yang 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 scene yang 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 scene besar dengan mesh berulang, seperti pohon di hutan, furnitur di gedung perkantoran, atau properti yang tersebar di seluruh lingkungan.

Bayangkan scene hutan dengan 200 pohon menggunakan mesh dasar yang sama. Tanpa GPU Resident Drawer, Anda akan memiliki 200 panggilan gambar yang menghabiskan GPU, sehingga mengosongkan CPU. Jika Anda mengaktifkan fitur ini, GPU akan membuat instance pohon tersebut secara cerdas, yang akan mengurangi panggilan gambar menjadi hanya 5-10. 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-buang GPU untuk hal-hal yang tidak dapat dilihat pengguna.

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

Sebagai contoh, misalkan Anda sedang membuat pengalaman rumah dengan beberapa 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 memiliki lebih banyak anggaran performa untuk hal yang benar-benar terlihat.

Memantau Performa Anda

Anda tidak cukup hanya menggunakan fitur ini. 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. Dengan pendekatan berbasis data ini, Anda tahu bahwa Anda benar-benar meningkatkan performa, bukan menebak-nebak.

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 scene, meningkatkan kualitas visual di tempat lain, atau sekadar memastikan performa yang lebih lancar di berbagai konten.

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

Frame Debugger

Frame Debugger adalah alat bawaan Unity untuk memahami dengan tepat bagaimana scene 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. Ingin 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 diterapkan.

Telusuri 50 panggilan gambar pertama dari scene 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 scene 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 scene. 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 dan 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. Hal ini membedakan 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 yang 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 scene yang 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 terus mengukur 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 hal yang benar-benar 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.
  • 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