Optimalisasi Persatuan: bagaimana hierarki adegan mencuri Anda

Jadi, Anda telah mengoptimalkan bagian paling jelas dari gim Anda. Namun, ini sebenarnya bukan masalahnya. Anda melewatkan poin rumit, tidak terlalu mencolok: mengoptimalkan hierarki adegan Persatuan.

Dan apa yang salah dengan hierarki? Mari saya tunjukkan sesuatu.

Luncurkan Unity dan buka proyek game Anda. Kemudian jalankan game di perangkat target
dan hubungkan Unity Profiler ke sana. Rekam beberapa bingkai selama bermain game.

Di Unity Profiler, cari penanda profiler jahat berikut:


Tidak menemukan? Terus mencari, saya yakin setidaknya ada satu.

Itu bisa UpdateRendererBoundingVolumes , Physics.SyncColliderTransform atau TransformChangedDispatch .

Mereka akan muncul ketika Anda siap untuk menyerah. Itu akan terjadi saat Anda mengarahkan kursor ke tombol tutup Profiler.

Apakah kamu sudah menemukan? Jika demikian, Anda beruntung. Saya juga menemukannya di salah satu proyek saya sebelumnya dan menemukan cara untuk benar-benar menyingkirkannya. Saya menyadari kejahatan apa yang tersembunyi di dalamnya ...

Ingin mempelajari rahasia kinerja hierarki scene Unity ?

Level 1 Pengembang: Hierarki Adegan Adegan Khas


Saya masih ingat proyek Unity pertama yang saya kerjakan lebih dari sepuluh tahun yang lalu.

Saya masih tidak benar-benar tahu perbedaan antara objek dan komponen game.

Tapi itu tidak masalah, saya masih membuat game.

gambar

Apakah hierarki persatuan kacau seperti itu akrab bagi saya? Sebenarnya ya, karena kadang-kadang jauh lebih buruk. Namun, aneh bahwa lebih sering daripada tidak, hirarki semacam ini dapat ditiadakan. Tetapi Anda akan menderita. Anda harus membayarnya nanti.

Untungnya, sebelum saya mulai mengembangkan game secara profesional, saya belajar untuk menghargai hierarki yang lebih terstruktur.

Struktur kualitas hierarki adegan dapat menjadi teman terbaik Anda. Struktur ini sangat menyederhanakan pengembangan dan kolaborasi.

Tidak harus sempurna, apa pun artinya itu. Cukup baginya untuk menjadi baik. Tapi hati-hati. Ini penting.

Hirarki adegan sampah berbahaya, itu akan menyebabkan masalah bagi Anda, karena sangat kecil kemungkinan Anda akan langsung melihat efek sampingnya.

Hantu yang menakutkan akan menghantui Anda, memperlambat Anda, dan menarik Anda kembali. Terkadang Anda akan melihat ke belakang, tetapi tidak ada yang tertinggal. Karena itu, Anda akan terbiasa bergerak perlahan.

Selama bertahun-tahun, saya telah belajar untuk mendiagnosis efek samping ini. Masalah utama adalah bahwa efek samping dari hirarki kacau tidak begitu mudah dilacak.

Anda akan melihat profiler, tetapi Anda tidak akan tahu apa artinya penanda. Nama-nama mereka seringkali misterius ... rahasia apa yang mereka simpan? Hanya ada satu hal yang harus dipastikan: penanda misterius memberi tahu kita sesuatu yang perlu ditelusuri.

Ketika kami membahas memperbaiki struktur adegan, kami biasanya berarti meningkatkan pemahaman dan menurunkan biaya dukungan. Tetapi semua orang lupa tentang kinerja.

Mari kita menganalisis hierarki adegan yang ditunjukkan di atas. Ini berisi 2.000 bola berputar satu bersarang ke yang lain .

Apa yang akan profiler katakan tentang ini? Ayo lihat.

gambar

Optimalisasi hierarki adegan kesatuan: gambaran umum hierarki profiler

Performa yang sangat buruk untuk prefab sederhana dan skrip rotasi diterapkan pada bola biasa. Seperti yang Anda lihat, Physics.SyncColliderTransform dan UpdateRendererBoundingVolumes mengambil bagian besar dari anggaran waktu bingkai. Tapi mari kita tidak menyelesaikan analisis ini, karena saya sangat ingin tahu tentang kasus ini.

Mari kita lebih dalam.


Rincian Profil Hirarki

Inilah jawaban untuk pertanyaan artikel.

Hirarki yang tidak dioptimalkan menyebabkan dua masalah BESAR di Unity.

  • Hirarki yang dalam mencegah sistem kerja dari bekerja secara efisien secara paralel
  • Hirarki bersarang memicu kemacetan di beberapa subsistem Unity.

Jangan lupa, karena ini berlaku untuk semua jenis objek dinamis , dan terutama untuk antarmuka pengguna.

Untuk referensi: Saya mengerjakan Threadripper dengan 16 core fisik dan 32 thread. Apakah Anda tahu berapa banyak dari mereka yang bekerja secara efektif dalam proyek ini? Hanya satu.

Tidak perlu dikatakan, kinerja game menderita dari ini. Dan jika Anda mencoba untuk memperbaiki situasi dengan memahami semua nama-nama misterius ini, maka menjadi tua sebelum waktunya.

Apa yang akan dilakukan pengembang level 2 dengan 2.000 objek?

Pengembang Level 2: Hirarki Adegan Dioptimalkan


Pengembang Unity level 2 tahu bahwa transformasi anak dikenakan biaya. Dia juga tahu bahwa harga dalam hal ini adalah milidetik dari waktu CPU. Atau jam kerja ekstra yang dihabiskan oleh pengembang untuk menyelesaikan masalah ini.

Tanyakan pada diri Anda: apakah anggaran waktu CPU cukup untuk membayar hierarki yang sedemikian luas?

Dari area mana gim Anda ambil milidetik ini?

Apakah ini harus mengurangi jumlah partikel yang indah? Atau jumlah monster yang harus dilawan pemain? Saya harap Anda tidak harus melakukan semua ini, tetapi lebih baik ...

Buat hierarki adegan yang efektif dan hancurkan yang suboptimal.

Alasan mengapa kompleks bersarang benda anak mencuri sumber daya permainan itu sederhana: setiap perubahan untuk mengubah memengaruhi anak-anak, dan mungkin orang tua dengan saudara kandung.

Ketika Anda mengubah posisi, rotasi, atau skala suatu objek, Unity menceritakan banyak aspek. Mesin melakukan ini sendiri sehingga Anda dapat fokus pada gim. Ini bagus, tetapi jika Anda tidak mengetahuinya, maka harganya bisa menjadi sangat besar.

Apa solusinya? Buat segala sesuatunya sederhana dan tetap berpegang pada aturan emas dari hierarki scene Unity yang bersih:

  • Total tidak lebih dari 50 anak per objek game
  • Tidak lebih dari 4 level bersarang pada objek game apa pun.

Bukankah itu mudah? Pengembang Level 2 menciptakan hirarki datar adegan persatuan sebanyak mungkin.

Lihatlah gambar di bawah ini. Jumlah objek yang sama, tetapi kali ini disusun menjadi hierarki datar.


Penghematan sangat besar.

Tapi lebih mudah diucapkan daripada dilakukan, bukan? Pemisahan dan penghancuran hubungan antara objek sangat melelahkan, rawan kesalahan dan kerja panjang.

Apa yang akan dilakukan pengembang level 3?

Pengembang Level 3: Alat Hirarki FAP


Pengembang Unity yang baik melakukan tugasnya. Pengembang Unity yang hebat melakukan pekerjaan lebih cepat dan lebih akurat. Tetapi bagaimana dia berhasil? Dengan bantuan alat. Karena satu-satunya hierarki murah adalah hierarki kosong, untuk mengevaluasi permainan, Anda perlu menjawab pertanyaan berikut ...

Seberapa rumit hierarki Anda?

Pertanyaan ini dapat dijawab dengan menganalisis hierarki secara metodis dan memberi mereka peringkat numerik.


Rumus matematika apa yang diperlukan untuk menghitung taksiran ini? Untungnya tidak ada. Saya melakukan segalanya untuk Anda. Saya menulis alat prototipe untuk secara otomatis menganalisis dan mengenali hambatan dalam hierarki Anda berdasarkan aturan emas di atas.

Saya menyebut Alat Hierarki Penentuan Profil Luar Biasa ini. Luncurkan game. Dapatkan momen yang menarik. Buka alat dan biarkan ia melakukan sisanya.


Alat ini akan memberi Anda peringkat integer. Begitu Anda tahu skornya, Anda akan tahu apa yang harus dilakukan ... Atau tidak?

Karena saya memberi Anda tidak hanya alat ini, tetapi juga skrip tambahan yang memungkinkan Anda untuk memperkuat kemampuan Anda untuk menghilangkan masalah dengan hierarki. Saya memberi Anda kekuatan skrip DetachGameObject.cs sederhana.

Sangat jarang menemukan skrip 27 baris, yang memungkinkan peningkatan kinerja dalam waktu singkat. Kerjanya sederhana: selama eksekusi program, ia memindahkan objek game yang berat dan tertanam ke akar hierarki adegan. Karena itu, Anda memanfaatkan hierarki terstruktur pada waktu desain dan mendapatkan keuntungan kinerja luar biasa saat runtime .

Ada kemungkinan besar bahwa Anda dapat melakukan ini untuk sebagian besar hierarki Anda, yang untuk penataan memiliki banyak sarang.

Anda dapat mengunduh alat dan skrip di akhir artikel asli .

Source: https://habr.com/ru/post/id481510/


All Articles