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 melalui kolaborasi dengan Google dan Qualcomm. Ini adalah saat yang tepat 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 hanya opsional, tetapi mendasar 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 kerjanya bersama-sama untuk membantu Anda mencapai target kecepatan frame.

Berikut yang kami harapkan: 

  • Minimum: 72 fps (bagian dari pedoman kualitas permainan 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. Yang pertama adalah mode statis yang merender bagian tengah layar dengan resolusi yang lebih tinggi, dan menurunkan resolusi secara progresif semakin jauh Anda melihat.

Yang kedua adalah mode pelacakan mata yang secara khusus merender area yang Anda lihat dalam detail penuh, sekaligus mengurangi kualitas yang ditampilkan di periferal Anda. Pada dasarnya, fitur ini meniru cara kerja penglihatan manusia, di mana 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 rendering foveated 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 rendering foveated, Anda akan kesulitan mempertahankan 90 fps saat mencoba merender semua yang ada dalam 'bidang pandang'. Dengan rendering foveated, Anda dapat mempertahankan detail poli 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 kosong untuk menambahkan lebih banyak detail ke adegan.

Subsampling Vulkan

Subsampling Vulkan adalah sahabat terbaik rendering foveated. Meskipun foveated rendering memutuskan apa yang akan dirender pada tingkat kualitas yang berbeda, Subsampling Vulkan menangani cara merender tingkat kualitas yang berbeda secara efisien menggunakan Peta Kepadatan Fragmen.

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

Misalnya, dalam game simulator penerbangan di mana pengguna berfokus pada instrumen dan kontrol, menggabungkan rendering foveated dengan Subsampling Vulkan berarti kontrol yang mendetail dirender dengan tajam, tetapi struktur kokpit periferal menggunakan lebih sedikit resource. Tambahan 0,5 md itu mungkin tidak terlihat signifikan, tetapi perbedaan ini dapat menentukan apakah ada ruang untuk elemen interaktif tambahan atau apakah frame akan terhenti selama momen intens.

Fitur GPU untuk Adegan Kompleks

Selain Foveated Rendering dan Vulkan Subsampling, ada beberapa fitur GPU yang mengurangi tekanan yang tidak perlu melalui instancing dan penghapusan yang cerdas. Teknik ini sangat efektif untuk adegan kompleks dengan geometri berulang atau oklusi yang signifikan.

Panel Residen GPU

GPU Resident Drawer otomatis menggunakan instancing 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 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 menggunakan mesh dasar yang sama. Tanpa GPU Resident Drawer, Anda memiliki 200 panggilan gambar yang menghabiskan GPU, sehingga membebaskan CPU. Saat Anda mengaktifkan fitur ini, GPU akan membuat instance pohon tersebut secara cerdas, yang akan menguranginya menjadi hanya 5-10 panggilan gambar. Dengan begitu, Anda dapat menghemat GPU secara signifikan dan menggunakannya untuk 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 membuang-buang GPU untuk hal-hal yang tidak dapat dilihat pengguna.

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

Misalnya, Anda sedang membangun pengalaman rumah multi-ruang. Saat pengguna berada di ruang keluarga, mengapa membuang siklus GPU untuk merender dapur yang sangat detail dan tersembunyi di balik dinding? GPU Occlusion Culling otomatis melewati rendering objek tersembunyi tersebut, sehingga memberi Anda lebih banyak anggaran performa untuk objek yang benar-benar terlihat.

Memantau Performa Anda

Tidak cukup hanya menggunakan fitur ini. 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 atas penggunaan memori, performa CPU, dan performa GPU aplikasi Anda. Anda akan mendapatkan data komprehensif dari lapisan compositor dan runtime, sehingga Anda dapat melihat dengan tepat apa yang terjadi di aplikasi Anda.

Tentukan 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 rendering foveated, waktu frame GPU Anda mungkin 13 md, yang melebihi anggaran 11 md. Aktifkan rendering foveated, ukur lagi, dan semoga Anda melihatnya turun menjadi 9 md. Dengan demikian, Anda mendapatkan ruang kosong 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 secara persis cara adegan Anda dirender, frame demi frame. Bagian ini menunjukkan urutan panggilan gambar dan memungkinkan Anda menelusurinya untuk memverifikasi bahwa pengoptimalan Anda berfungsi dengan benar.

Ingin mengonfirmasi bahwa Batcher SRP 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.

Langkah-langkah melalui 50 panggilan gambar pertama adegan Anda. Jika Anda melihat objek serupa digambar satu per satu, bukan dikelompokkan, artinya 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 kami bahas di atas, panduan performa lengkap kami juga membahas beberapa pengoptimalan tambahan lainnya. Berikut ringkasan singkatnya:

  • Setelan URP: Nonaktifkan HDR dan Pemrosesan Pasca 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 di antara panggilan gambar, Anda dapat mengurangi waktu CPU yang digunakan untuk rendering secara signifikan.
  • Kecepatan Refresh Layar: Menyesuaikan secara dinamis antara 72 fps dan 90 fps berdasarkan kompleksitas adegan. Turunkan kecepatan frame selama adegan yang kompleks untuk menjaga stabilitas, lalu tingkatkan selama momen yang lebih sederhana untuk interaksi yang sangat lancar.
  • Kedalaman/Tekstur Buram: Nonaktifkan opsi ini kecuali jika diperlukan secara khusus untuk efek shader. Hal ini menyebabkan operasi penyalinan GPU yang tidak perlu yang membuang-buang performa tanpa memberikan manfaat bagi sebagian besar aplikasi.
  • Skala Render URP: Setelan ini memungkinkan Anda melakukan rendering pada resolusi yang lebih rendah untuk mendapatkan manfaat performa atau meningkatkan skala rendering untuk meningkatkan kualitas visual.

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

Kesimpulan

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

Berikut 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 kompleks dengan geometri berulang atau ruang interior.
  3. Pantau semuanya dengan Performance Metrics API untuk memastikan perubahan Anda benar-benar membantu
  4. Menjelajahi pengoptimalan URP tambahan untuk ruang performa ekstra

Pengukuran dan iterasi berkelanjutan sangat penting. 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.
  • 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