Kinerja grafis dan profil
Mengoptimalkan panggilan menggambar
Dasar kinerja grafis
Halaman ini berisi beberapa panduan sederhana untuk mengoptimalkan kinerja rendering dalam aplikasi Anda.
Sebelum Anda mulai: mencari dan memahami masalah
Sebelum Anda melakukan perubahan, Anda harus memberi profil aplikasi Anda untuk mengidentifikasi penyebab masalah. Jika Anda mencoba memecahkan masalah kinerja sebelum Anda memahami penyebabnya, Anda mungkin membuang waktu Anda atau membuat masalah lebih buruk. Selain itu, masalah kinerja yang berkaitan rendering dapat terjadi pada CPU atau GPU. Strategi untuk memperbaiki masalah ini cukup berbeda, sehingga penting untuk memahami di mana masalah Anda sebelum mengambil tindakan.
Artikel berikut di situs Unity Learn adalah pengenalan komprehensif terhadap kinerja grafis, dan berisi informasi tentang mengidentifikasi dan memperbaiki masalah: . Jika Anda belum akrab dengan subjek ini, baca artikel sebelum mengikuti saran di halaman ini.
Mengurangi biaya CPU rendering
Biasanya, kontributor terbesar untuk waktu rendering CPU adalah biaya pengiriman perintah rendering ke GPU. Perintah rendering termasuk panggilan penarikan (kommands untuk menggambar geometri), dan perintah untuk mengubah pengaturan pada GPU sebelum menggambar geometri. Jika ini adalah kasus, pertimbangkan opsi ini:
- Anda dapat mengurangi jumlah benda yang disatukan.
- Pertimbangkan mengurangi jumlah keseluruhan objek di sceneAdegan berisi lingkungan dan menu permainan Anda. Pikirkan setiap file Adegan unik sebagai tingkat yang unik. Di setiap Adegan, Anda menempatkan lingkungan, hambatan, dan dekorasi, pada dasarnya merancang dan membangun permainan Anda dalam potongan-potongan. More info
Lihat di Glossary: misalnya, gunakan skyboxJenis khusus Bahan yang digunakan untuk mewakili langit. Biasanya enam sisi. More info
Lihat di Glossary untuk menciptakan efek geometri jauh.
- Lakukan kusen yang lebih ketat, sehingga Unity menarik objek yang lebih sedikit. Pertimbangkan menggunakan occlusion cullingA yang menonaktifkan rendering objek ketika mereka tidak saat ini dilihat oleh kamera karena mereka dikabur (disebutkan) oleh benda lain. More info
Lihat di Glossary untuk mencegah Unity dari objek menggambar yang tersembunyi di balik benda lain, mengurangi pesawat klip jauh dari KameraKomponen yang menciptakan gambar sudut pandang tertentu di tempat kejadian Anda. Output ditarik ke layar atau ditangkap sebagai tekstur. More info
Lihat di Glossary sehingga benda-benda yang lebih jauh jatuh di luar frustum, atau, untuk pendekatan yang lebih halus, menempatkan benda menjadi lapisan terpisah dan mengatur jarak kull per-layer dengan Kamera.layerCullDistances.
- Anda dapat mengurangi jumlah kali yang menyatukan setiap objek.
- Gunakan pencahayaan dan bayangan yang sesuai. Ini meningkatkan waktu membangun, penggunaan memori runtime dan ruang penyimpanan, tetapi dapat meningkatkan kinerja runtime.lightmapping to “bake” (pre-compute) lighting and shadows where appropriate. This increases build time, runtime memory usage and storage space, but can improve runtime performance.
- Jika aplikasi Anda menggunakan Forward renderingSebuah jalur rendering yang membuat setiap objek dalam satu atau lebih melewati, tergantung pada lampu yang mempengaruhi objek. Lampu sendiri juga diperlakukan berbeda dengan Rendering Maju, tergantung pada pengaturan dan intensitas mereka. More info
Lihat di Glossary, mengurangi jumlah lampu real-time per-piksel yang mempengaruhi benda. Untuk informasi lebih lanjut, lihat Maju rendering jalur.
- Bayangan real-time dapat sangat intensif sumber daya, sehingga menggunakannya dengan mudah dan efisien. Untuk informasi lebih lanjut, lihat Pemecahan masalah bayangan: Performa bayangan.
- Jika aplikasi Anda menggunakan Reflection ProbesKomponen rendering yang menangkap pandangan bulat dari sekitarnya di semua arah, seperti kamera. Gambar yang ditangkap kemudian disimpan sebagai kubus yang dapat digunakan oleh benda dengan bahan reflektif. More info
Lihat di Glossary, pastikan Anda mengoptimalkan penggunaannya. Untuk informasi lebih lanjut, lihat Refleksi kinerja Probe
- Anda dapat mengurangi jumlah pekerjaan yang harus dilakukan Unity untuk mempersiapkan dan mengirim perintah rendering, biasanya dengan mengirimkannya ke GPU dalam lebih efisien “batches”. Ada beberapa cara yang berbeda untuk mencapai ini: untuk informasi lebih lanjut, lihat Mengoptimalkan panggilan menggambar.
Banyak pendekatan ini juga akan mengurangi pekerjaan yang diperlukan di GPU; misalnya, mengurangi jumlah keseluruhan objek yang disatukan render dalam bingkai akan menghasilkan beban kerja yang berkurang untuk CPU dan GPU.
Mengurangi biaya GPU rendering
Ada tiga alasan utama mengapa GPU mungkin gagal menyelesaikan pekerjaannya tepat waktu untuk membuat bingkai.
Jika aplikasi dibatasi oleh tingkat pengisian, GPU mencoba menggambar lebih dari bingkai lebih dari itu dapat menangani. Jika ini adalah kasus, pertimbangkan opsi ini:pixelsUnit terkecil dalam gambar komputer. Ukuran piksel tergantung pada resolusi layar Anda. Pencahayaan pixel dihitung pada setiap piksel layar. More info
Lihat di Glossary per frame than it can handle. If this is the case, consider these options:
- Mengidentifikasi dan mengurangi penarikan dalam aplikasi Anda. Kontributor yang paling umum untuk menarik adalah elemen transparan yang tumpang tindih, seperti UI(User Interface) Memungkinkan pengguna untuk berinteraksi dengan aplikasi Anda. Unity saat ini mendukung tiga sistem UI. More info
Lihat di Glossary, partikel dan spritesObjek grafis 2D. Jika Anda digunakan untuk bekerja di 3D, Sprites pada dasarnya hanya tekstur standar tetapi ada teknik khusus untuk menggabungkan dan mengelola tekstur sprite untuk efisiensi dan kenyamanan selama perkembangan. More info
Lihat di Glossary. Dalam Editor Unity, gunakan Mode penarikan untuk mengidentifikasi daerah di mana ini adalah masalah.
- Mengurangi biaya eksekusi naungan fragmen. Untuk informasi tentang kinerja shaderProgram yang berjalan di GPU. More info
Lihat di Glossary, lihat halaman Kinerja Shader.
- Jika Anda menggunakan naungan bawaan Unity, pilih salah satu dari kategori Mobile atau Unlit. Mereka bekerja pada platform non-mobile serta, tetapi disederhanakan dan versi perkiraan warna yang lebih kompleks.
- Resolusi DinamisPengaturan kamera yang memungkinkan Anda untuk menargetkan render individu skala dinamis, untuk mengurangi beban kerja pada GPU. More info
Lihat di Glossary adalah fitur Unity yang memungkinkan Anda untuk meningkatkan target render individu secara dinamis.
Jika aplikasi dibatasi oleh bandwidth memori, GPU mencoba membaca dan menulis lebih banyak data untuk memori khusus daripada dapat menangani dalam bingkai. Ini biasanya berarti bahwa ada terlalu banyak atau tekstur, atau teksturnya terlalu besar. Jika ini adalah kasus, pertimbangkan opsi ini:
- Diaktifkan mipmaps untuk tekstur yang jarak dari kamera bervariasi pada runtime (misalnya, sebagian besar tekstur yang digunakan dalam adegan 3D). Ini meningkatkan penggunaan memori dan ruang penyimpanan untuk tekstur ini, tetapi dapat meningkatkan kinerja GPU runtime.
- Gunakan format kompresi yang cocok untuk menurunkan ukuran tekstur Anda dalam memori. Ini dapat mengakibatkan waktu beban yang lebih cepat, jejak memori yang lebih kecil, dan meningkatkan kinerja rendering GPU. Tekstur terkompresi hanya menggunakan sebagian kecil dari bandwidth memori yang diperlukan untuk tekstur yang tidak terkompresi.
Jika sebuah keterlambatan dibatasi oleh pemrosesan simpul, ini berarti bahwa GPU mencoba untuk memproses lebih banyak simpul daripada dapat menangani dalam bingkai. Jika ini adalah kasus, pertimbangkan opsi ini:
- Mengurangi biaya eksekusi vertex shadersProgram yang berjalan pada setiap simpul model 3D ketika model sedang diberikan. More info
Lihat di Glossary. Untuk informasi tentang kinerja naungan, lihat halaman Kinerja Shader.
- Optimalkan geometri Anda: jangan gunakan segitiga lebih dari yang diperlukan, dan cobalah untuk menjaga jumlah jahitan pemetaan UV dan tepi keras (doubled-up vertices) serendah mungkin. Untuk informasi lebih lanjut, lihat Membuat model untuk kinerja optimal.
- Gunakan sistem Tingkat DetailTeknik Tingkat Detail (LOD) adalah optimasi yang mengurangi jumlah segitiga yang dimiliki Unity untuk membuat GameObject ketika jaraknya dari kamera meningkat. More info
Lihat di Glossary.
Mengurangi frekuensi rendering
Kadang-kadang, mungkin manfaatkan aplikasi Anda untuk mengurangi tingkat bingkai rendering. Ini tidak mengurangi biaya CPU atau GPU rendering bingkai tunggal, tetapi mengurangi frekuensi dengan Unity mana tidak mempengaruhi frekuensi operasi lain (seperti eksekusi skrip).
Anda dapat mengurangi tingkat bingkai rendering untuk bagian aplikasi Anda, atau untuk seluruh aplikasi. Mengurangi tingkat bingkai rendering untuk mencegah penggunaan daya yang tidak perlu, memperpanjang masa pakai baterai, dan mencegah suhu perangkat dari naik ke titik di mana frekuensi CPU dapat throttled. Ini sangat berguna pada perangkat genggam.
Jika profil mengungkapkan bahwa rendering mengkonsumsi proporsi yang signifikan dari sumber daya untuk aplikasi Anda, pertimbangkan bagian aplikasi Anda mungkin menguntungkan dari ini. Kasus penggunaan umum termasuk menu atau layar jeda, ubah permainan berdasarkan di mana permainan menunggu input, dan aplikasi di mana konten sebagian besar statis, seperti UI otomotif.
Untuk mencegah lag input, Anda dapat sementara mengganti tingkat bingkai rendering selama durasi input sehingga masih terasa responsif.
Untuk menyesuaikan tingkat bingkai rendering, gunakan API OnDemandRendering. API bekerja sangat baik dengan .
Aplikasi VR Catatan: tidak mendukung Pengirim Demand. Tidak rendering setiap bingkai menyebabkan visual untuk keluar dari sinkronisasi dengan gerakan kepala dan mungkin meningkatkan risiko penyakit gerak.
Kinerja grafis dan profil
Mengoptimalkan panggilan menggambar