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, dalam 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 game kami)
  • 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 saat Anda melihat lebih jauh.

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 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 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 yang dilihat pengguna, 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 rendering foveated. Meskipun foveated rendering menentukan apa yang akan dirender pada tingkat kualitas yang berbeda, Subsampling Vulkan menangani cara merender tingkat kualitas yang berbeda secara efisien menggunakan Fragment Density Map.

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

Misalnya, dalam game simulator penerbangan yang mengharuskan pengguna berfokus pada instrumen dan kontrol, menggabungkan rendering foveated 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-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.

Panel Residen GPU

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 scene 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. Ini adalah penghematan GPU yang sangat besar yang kemudian 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 multikamar. Saat pengguna berada di ruang keluarga, mengapa harus membuang siklus GPU untuk merender dapur yang sangat mendetail dan sepenuhnya 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

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 md, yang melebihi anggaran 11 md. Aktifkan foveated rendering, ukur lagi, dan semoga Anda melihatnya turun menjadi 9 md. Artinya, 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 apa yang sebenarnya membantu kasus penggunaan spesifik Anda.

Frame Debugger

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 pengelompokan 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, hal ini menunjukkan bahwa pembuatan instance atau pengelompokan 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 menjaga stabilitas, lalu tingkatkan selama momen yang lebih sederhana untuk interaksi yang sangat lancar.
  • Tekstur Kedalaman/Buram: Nonaktifkan 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 untuk Android XR.

Kesimpulan

Performa aplikasi XR Anda bukan sekadar kotak centang teknis. Hal ini adalah perbedaan 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 Rendering Foveated 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 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 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