Mengoptimalkan panggilan menggambar
Untuk menggambar geometri pada layar, masalah Unity menarik panggilan ke API grafis. Panggilan menarik memberitahu API grafis apa yang harus menarik dan bagaimana menggambarnya. Setiap panggilan menggambar berisi semua informasi API grafis perlu menggambar di layar, seperti informasi tentang tekstur, shadersProgram yang berjalan di GPU. More info
Lihat di Glossary, dan penyangga. Gambar panggilan dapat menjadi intensif sumber daya, tetapi sering persiapan untuk panggilan penarikan lebih intensif sumber daya daripada panggilan penarikan itu sendiri.
Untuk menyiapkan panggilan menggambar, set CPU sumber daya dan perubahan pengaturan internal di GPU. Pengaturan ini secara kolektif disebut state render. Perubahan pada state render, seperti beralih ke bahan yang berbeda, adalah operasi yang paling intensif dari kinerja API grafis.
Karena perubahan render-state adalah intensif sumber daya, penting untuk mengoptimalkannya. Cara utama untuk mengoptimalkan perubahan render-state adalah untuk mengurangi jumlah dari mereka. Ada dua cara untuk melakukan ini:
- Mengurangi jumlah total panggilan. Ketika Anda menurunkan jumlah panggilan penarikan, Anda juga mengurangi jumlah perubahan render-state antara mereka.
- Mengatur panggilan menggambar dengan cara yang mengurangi jumlah perubahan pada state render. Jika API grafis dapat menggunakan state render yang sama untuk melakukan beberapa panggilan penarikan, itu dapat mengambil panggilan kelompok bersama dan tidak perlu melakukan banyak perubahan render-state.
Mengoptimalkan panggilan dan perubahan render-state memiliki sejumlah manfaat untuk aplikasi Anda. Terutama, meningkatkan waktu bingkai, tetapi juga:
- Mengurangi jumlah listrik yang dibutuhkan aplikasi Anda. Untuk perangkat bertenaga baterai, ini mengurangi tingkat pada baterai mana yang habis. Ini juga mengurangi jumlah panas perangkat yang menghasilkan ketika menjalankan aplikasi Anda.
- Meningkatkan kemampuan pengembangan masa depan pada aplikasi Anda. Ketika Anda mengoptimalkan panggilan dan perubahan render-state sebelumnya dan mempertahankannya pada tingkat yang dioptimalkan, Anda dapat menambahkan lebih GameObjectsObjek mendasar dalam adegan Unity, yang dapat mewakili karakter, props, pemandangan, kamera, waypoints, dan banyak lagi. Fungsi GameObject didefinisikan oleh Komponen yang melekat padanya. More info
Lihat di Glossary ke 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 Anda tanpa memproduksi overhead kinerja besar.
Ada beberapa metode yang dapat Anda gunakan di Unity untuk mengoptimalkan dan mengurangi panggilan menggambar dan perubahan render-state. Beberapa metode lebih cocok untuk adegan tertentu daripada yang lain. Metode berikut tersedia dalam Unity:
- GPU instancing: Render beberapa salinan meshGrafik utama primitif Unity. Mesh membuat sebagian besar dunia 3D Anda. Unity mendukung mesh poligon triangulat atau Quadrangulasi. Nurbs, Nurms, permukaan Subdiv harus dikonversi ke poligon. More info
Lihat di Glossary yang sama pada saat yang sama. GPUjahcing berguna untuk menggambar geometri yang muncul beberapa kali di tempat kejadian, misalnya, pohon atau semak.
- Gambar batching panggilan: Gabungkan jala untuk mengurangi panggilan menggambar. Unity menyediakan jenis berikut batching panggilan built-in:
- batching statisTeknik Unity menggunakan untuk menggambar GameObjects di layar yang menggabungkan static (non-moving) GameObjects ke Big Meshes, dan render mereka dengan cara yang lebih cepat. More info
Lihat di Glossarystatic GameObjects terlebih dahulu. Unity mengirim data gabungan ke GPU, tetapi render setiap mesh dalam kombinasi secara individual. Unity masih bisa kusam jala secara individual tetapi setiap panggilan penarikan kurang intensif sumber daya karena keadaan data tidak pernah berubah.
- batching dinamisProses Unity otomatis yang mencoba untuk membuat beberapa jala seolah-olah mereka adalah satu mesh untuk kinerja grafis yang dioptimalkan. Teknik mengubah semua simpul GameObject pada CPU dan kelompok banyak simpul serupa bersama. More info
Lihat di Glossaryposition
dan normal
.
- Manual menggabungkan jala: Secara manual menggabungkan beberapa mesh ke dalam satu mesh, menggunakan fungsi Mesh.CombineMeshes. Unity render mesh gabungan dalam panggilan tunggal menarik bukan satu panggilan menarik per mesh.
- Login Login: Jika Proyek Anda menggunakan Render PipelineRangkaian operasi yang mengambil isi dari Adegan, dan menampilkannya di layar. Unity memungkinkan Anda memilih dari pipa render yang dibangun sebelumnya, atau menulis sendiri. More info
Lihat di Glossary Scriptable (SRP), gunakan SRP Batcher untuk mengurangi waktu CPU Unity perlu mempersiapkan dan mengirimkan panggilan untuk bahan yang menggunakan varian warna yang sama.
Mengoptimalkan prioritas
Anda dapat menggunakan beberapa metode optimasi panggilan di tempat kejadian yang sama tetapi menyadari bahwa Unity memprioritaskan metode optimasi panggilan dalam urutan tertentu. Jika Anda menandai GameObject untuk menggunakan lebih dari satu metode optimasi panggilan, Unity menggunakan metode prioritas tertinggi. Satu-satunya pengecualian untuk ini adalah Login Login. Ketika Anda menggunakan SRP Batcher, Unity juga mendukung batching statis untuk GameObjects yang kompatibel SRP Batcher. Memprioritaskan pengoptimalan panggilan dalam urutan berikut:
- Login Batcher dan batching statis
- GPU instancing
- batching dinamis
Jika Anda menandai GameObject untuk batching statis dan Unity berhasil mengedepankannya, Unity menonaktifkan GPUlawcing untuk GameObject, bahkan jika renderer menggunakan naungan yang tidak tepat. Ketika ini terjadi, jendela InspectorJendela Unity yang menampilkan informasi tentang Pengaturan GameObject yang dipilih saat ini, aset atau proyek, memungkinkan Anda untuk memeriksa dan mengedit nilai. More info
Lihat di Glossary menampilkan pesan peringatan yang menunjukkan bahwa Anda menonaktifkan batching statis. Demikian pula, jika Unity dapat menggunakan GPUlawcing untuk mesh, Unity menonaktifkan batching dinamis untuk mesh itu.