Bagikan melalui


Memahami performa untuk realitas campuran

Artikel ini adalah pengantar untuk memahami signifikansi performa untuk aplikasi Mixed Reality Anda. Pengalaman pengguna dapat sangat terdegradasi jika aplikasi Anda tidak berjalan pada kecepatan bingkai yang optimal. Hologram akan tampak tidak stabil dan pelacakan kepala lingkungan akan tidak akurat, yang menyebabkan pengalaman yang buruk bagi pengguna. Performa harus dianggap sebagai fitur kelas satu untuk pengembangan realitas campuran dan bukan tugas poles.

Nilai framerate berkinerja untuk setiap platform target tercantum di bawah ini.

Platform Laju Bingkai Target
HoloLens 60 FPS
PC Windows Mixed Reality Ultra 90 FPS
PC Windows Mixed Reality 60 FPS

Kerangka kerja di bawah ini menguraikan praktik terbaik untuk mencapai kecepatan bingkai target. Untuk tips mengukur dan meningkatkan framerate di lingkungan Unity, kami sarankan Anda membaca rekomendasi performa untuk artikel Unity

Memahami hambatan performa

Jika aplikasi Anda memiliki framerate yang kurang baik, langkah pertama adalah menganalisis dan memahami di mana aplikasi Anda secara komputasi intensif. Ada dua prosesor utama yang bertanggung jawab atas pekerjaan untuk merender adegan Anda: CPU dan GPU, masing-masing menangani berbagai aspek aplikasi Mixed Reality Anda. Tiga tempat utama di mana penyempitan dapat terjadi adalah:

  1. Utas Aplikasi - CPU - Bertanggung jawab atas logika aplikasi Anda, termasuk memproses input, animasi, fisika, dan logika aplikasi lainnya.
  2. Render Thread - CPU ke GPU - Bertanggung jawab untuk mengirimkan panggilan gambar Anda ke GPU. Saat aplikasi Anda ingin merender objek seperti kubus atau model, utas ini mengirimkan permintaan ke GPU untuk melakukan operasi.
  3. GPU - Paling umum menangani alur grafis aplikasi Anda untuk mengubah data 3D (model, tekstur, dan sebagainya) menjadi piksel. Ini pada akhirnya menghasilkan gambar 2D untuk dikirimkan ke layar perangkat Anda.

Masa Pakai Bingkai

Umumnya, aplikasi HoloLens akan terikat GPU, tetapi tidak selalu. Gunakan alat dan teknik di bawah ini untuk memahami di mana aplikasi khusus Anda terhambat.

Cara menganalisis aplikasi Anda

Ada banyak alat yang memungkinkan Anda memahami profil performa dan potensi hambatan dalam aplikasi realitas campuran Anda.

Di bawah ini adalah beberapa alat umum untuk membantu Anda mengumpulkan informasi pembuatan profil mendalam untuk aplikasi Anda:

Cara membuat profil di lingkungan apa pun

Salah satu cara untuk menentukan apakah aplikasi Anda terikat GPU atau CPU adalah dengan menurunkan resolusi output target render. Dengan mengurangi jumlah piksel yang akan dihitung, Anda akan mengurangi beban GPU. Perangkat akan dirender ke tekstur yang lebih kecil, lalu up-sample untuk menampilkan gambar akhir Anda.

Setelah menurunkan resolusi penyajian, jika:

  1. Kecepatan bingkai aplikasi meningkat, maka Kemungkinan Anda Terikat GPU
  2. Framerate aplikasi tidak berubah, maka Kemungkinan Anda Terikat CPU

Catatan

Unity menyediakan kemampuan untuk dengan mudah memodifikasi resolusi target render aplikasi Anda saat runtime melalui properti XRSettings.renderViewportScale . Gambar akhir yang disajikan pada perangkat memiliki resolusi tetap. Platform ini akan mengambil sampel output resolusi yang lebih rendah untuk membangun gambar resolusi yang lebih tinggi untuk penyajian pada layar.

UnityEngine.XR.XRSettings.renderScale = 0.7f;

Cara meningkatkan aplikasi Anda

Rekomendasi performa CPU

Umumnya, sebagian besar pekerjaan dalam aplikasi realitas campuran pada CPU melibatkan melakukan "simulasi" adegan dan memproses logika aplikasi Anda. Area berikut ditargetkan untuk pengoptimalan:

  • Animasi
  • Fisika
  • Alokasi memori
  • Algoritma kompleks (yaitu kinematika terbalik, pencarian jalur)

Rekomendasi performa GPU

Memahami bandwidth vs. tingkat pengisian

Saat merender bingkai pada GPU, aplikasi terikat oleh bandwidth memori atau tingkat pengisian.

  • Bandwidth memori adalah tingkat bacaan dan penulisan yang dapat dilakukan GPU dari memori
    • Untuk mengidentifikasi batasan bandwidth, kurangi kualitas tekstur dan periksa apakah framerate telah meningkat.
    • Untuk mengidentifikasi batasan tingkat pengisian, turunkan resolusi tampilan dan lihat apakah kecepatan bingkai meningkat.

Catatan

Jika Anda bekerja dengan Unity, lihat rekomendasi performa GPU khusus Unity kami. - Di Unity, gunakan properti XRSettings.renderViewportScale

Bandwidth memori umumnya melibatkan pengoptimalan untuk:

  1. Resolusi tekstur yang lebih rendah
  2. Gunakan lebih sedikit tekstur (normal, spekular, dan sebagainya)

Tingkat pengisian difokuskan pada pengurangan jumlah operasi yang perlu dihitung untuk piksel akhir yang dirender, termasuk:

  1. Jumlah objek yang akan dirender/diproses
  2. Jumlah operasi per shader
  3. Jumlah tahap GPU ke hasil akhir (shader geometri, efek pasca-pemrosesan, dan sebagainya)
  4. Jumlah piksel yang akan dirender (resolusi tampilan)

Mengurangi jumlah poligon

Jumlah poligon yang lebih tinggi menghasilkan lebih banyak operasi untuk GPU, sehingga mengurangi jumlah poligon dalam adegan Anda mengurangi waktu render. Ada faktor lain yang membuat shading geometri mahal, tetapi jumlah poligon adalah metrik paling sederhana untuk menentukan berapa banyak pekerjaan yang diperlukan untuk merender adegan.

Batasi penggalian berlebihan

Overdraw tinggi terjadi ketika beberapa objek dirender tetapi tidak ditampilkan di layar karena disembunyikan oleh objek okluding. Bayangkan melihat dinding yang memiliki benda di belakangnya. Semua geometri akan diproses untuk penyajian, tetapi hanya dinding buram yang perlu dirender, yang menghasilkan operasi yang tidak perlu.

Efek gambar

Shader adalah program kecil yang berjalan pada GPU dan melakukan dua langkah penting dalam penyajian:

  1. Menentukan simpul mana yang harus digambar dan di mana mereka berada di ruang layar (shader Vertex)
    • Shader Vertex dijalankan per puncak untuk setiap jala.
  2. Menentukan warna setiap piksel (shader Piksel)
    • Shader Pixel dijalankan per piksel dan dirender oleh geometri ke tekstur render target.

Biasanya, shader melakukan banyak transformasi dan perhitungan pencahayaan. Meskipun model pencahayaan yang kompleks, bayangan, dan operasi lainnya dapat menghasilkan hasil yang fantastis, mereka juga datang dengan harga. Mengurangi jumlah operasi yang dihitung dalam shader dapat sangat mengurangi pekerjaan yang diperlukan untuk GPU per bingkai.

Rekomendasi pengodelan shader
  • Gunakan pemfilteran bilinear, jika memungkinkan
  • Menyusun ulang ekspresi untuk menggunakan intrinsik MAD untuk melakukan perkalian dan penambahan secara bersamaan
  • Hitung sebanyak mungkin pada CPU dan teruskan konstanta ke bahan
  • Mendukung operasi pemindahan dari shader piksel ke shader vertex
    • Umumnya, jumlah simpul jauh lebih kecil dari jumlah piksel (720p adalah 921.600 piksel, 1080p adalah 2.073.600 piksel, dan sebagainya)

Menghapus tahapan GPU

Efek pasca-pemrosesan bisa mahal dan meningkatkan tingkat pengisian aplikasi Anda, termasuk teknik anti-aliasing seperti MSAA. Pada HoloLens, sebaiknya hindari teknik ini dan tahap shader tambahan seperti geometri, lambung, dan shader komputasi.

Rekomendasi memori

Operasi alokasi dan dealokasi memori yang berlebihan dapat mengakibatkan performa yang tidak konsisten, bingkai beku, dan perilaku merugikan lainnya. Sangat penting untuk memahami pertimbangan memori saat berkembang di Unity, karena manajemen memori dikendalikan oleh pengumpul sampah.

Pengumpulan objek

Pengumpulan objek adalah teknik populer untuk mengurangi biaya alokasi berkelanjutan dan pembatalan alokasi objek. Ini dilakukan dengan mengalokasikan kumpulan besar objek identik dan menggunakan kembali instans yang tidak aktif dan tersedia dari kumpulan ini alih-alih terus-menerus menelurkan dan menghancurkan objek dari waktu ke waktu. Kumpulan objek sangat bagus untuk komponen yang dapat digunakan kembali yang memiliki masa pakai variabel selama aplikasi.

Lihat juga