Apakah Objek Game yang terletak di luar tampilan kamera mengonsumsi sumber daya komputer / seluler di Unity?

11

Dalam kesatuan, mari kita anggap bahwa saya memiliki beberapa Objek Game dalam adegan saya yang tidak terlihat oleh kamera dan tidak ditampilkan saat game sedang berjalan.

Apakah Obyek Game ini akan menghabiskan sumber daya komputer / seluler saat game berjalan?

Di mana saya dapat menemukan detail tentang penggunaan seperti ini?

Gissipi_453
sumber

Jawaban:

13

Yang Anda inginkan adalah profiler memori, Yang memang dimiliki Unity. Di sini: http://docs.unity3d.com/Manual/ProfilerMemory.html

Tapi anggapan Anda sebagian besar benar, jika sebuah gameObject tidak terlihat oleh kamera itu tidak ditarik, dan menggunakan lebih sedikit sumber daya, tetapi masih harus mengkonsumsi beberapa. GameObject masih ada di memori, termasuk semua tekstur, skrip model, dll. Ia juga masih menghabiskan waktu CPU melalui metode Pembaruan dan Pembaruan Tetap (dan berbagai lainnya yang dijelaskan di sini ).

Tetapi biasanya perlambatan utama adalah gambar, sejumlah kecil waktu CPU digunakan untuk menentukan bahwa objek berada di luar frustum kamera (batas), tetapi tidak ada gambar yang dilakukan.

Reuben Crimp
sumber
5

Saya pikir Anda juga harus tahu tentang Frustrum Culling, atau menyembunyikan penghapusan permukaan: http://en.wikipedia.org/wiki/Hidden_surface_determination

Ini adalah bagian penting dari mengoptimalkan permainan, karena meskipun objek Anda tidak berada di dalam frustrum pada frame tertentu (yaitu terlihat), beberapa panggilan draw (shaders) masih diluncurkan untuk mereka, sehingga menurunkan kinerja.

Claudiu Apostol
sumber
2
@ Gissipi_453, saat meneliti sepanjang garis ini, juga meneliti pohon quad dan oct-tree (penyortiran data spasial)
Jon
3

Jawaban singkatnya adalah "ya"; apa pun yang siap digunakan dalam gim Anda menghabiskan memori.

Hal lain yang perlu dipertimbangkan adalah biaya untuk frame-rate Anda:

5 objek, dengan 5 tekstur terpisah, yang ditarik secara terpisah memerlukan perubahan-keadaan di antara keduanya. Anda mungkin dapat menghemat sebagian memori dengan membongkar tekstur yang tidak digunakan.

Dengan memuat semua tekstur yang terpisah ke dalam tekstur atlas tunggal, jejak memori menjadi tetap dan Anda tidak dapat lagi membongkar tekstur satu per satu. Setelah dibuat, Anda hanya perlu mengikat atlas sekali untuk menggambar semua objek Anda.

Contoh lain adalah vertex dan buffer indeks sederhana. Jika banyak titik yang sering berganti antara terlihat dan tidak, lebih cepat meninggalkan titik "basi" di buffer vertex dan hanya mengunggah buffer indeks baru.

Ada banyak waktu lain di mana peningkatan biaya memori di muka lebih baik daripada banyak perubahan negara.

Jika Anda memutar kamera Anda, Anda pasti tidak akan menghancurkan benda-benda itu kecuali Anda tahu, bahwa kamera tidak akan memutar kembali untuk memeriksa objek itu. "- Katu

Menggunakan scroller samping sebagai contoh, jika Anda hanya dapat bergerak ke kanan (peta hanya menggulir ke kiri), objek apa pun yang menggulir dari sisi kiri layar dapat dibongkar secara permanen karena Anda tidak akan pernah menggunakannya lagi. Selain itu, konten untuk objek dapat dimuat permintaan tepat sebelum objek bergulir ke tampilan dari kanan.

Jon
sumber
1

Banyak jawaban terutama mempertimbangkan aspek grafis dari pertanyaan Anda.

Faktanya adalah mereka akan mengambil berbagai sumber daya, dan seberapa mahal mereka dibandingkan dengan menggambar objek tidak tetap. Ini tidak biasa karena beberapa jawaban tersirat untuk komponen Anda membuat operasi lebih mahal daripada menggambar, tetapi Anda dapat meminimalkan berapa banyak sumber daya yang mereka gunakan. Juga perlu diingat bahwa GameObject membutuhkan sedikit memori, dan begitu juga komponen-komponennya. Komponen mungkin juga melakukan hal-hal yang menghabiskan sedikit memori.

Cara paling sederhana untuk meminimalkan efek dari komponen off-layar adalah sistem yang didasarkan pada OnBecameVisible dan OnBecameInvisible callback.

void OnBecameVisible()
{
    myComplexComponent.enabled = true;
}
void OnBecameInvisble()
{
    myComplexComponent.enabled = false;
}

Tentu saja, itu kegunaannya sangat terbatas karena ada banyak waktu ketika Anda ingin objek di luar layar memengaruhi permainan. Tetapi Anda dapat mengembangkan pola semacam ini untuk sistem berbutir halus yang mampu meminimalkan efek perhitungan Anda yang paling mahal. Bahkan sesuatu yang sederhana seperti mengurangi sesuatu seperti kualitas lintasan yang mengikuti skrip ketika objek di luar layar dapat menghasilkan penghematan besar dalam jangka panjang.

Selali Adobor
sumber
1

Dibutuhkan memori agar tetap hidup dan memperbarui posisinya dan properti lainnya.

Tetapi ia tidak mengkonsumsi sumber daya grafik komputer / seluler karena tidak terlihat.

Jadi ya, ia mengkonsumsi sumber daya memori tetapi tidak sumber daya grafis seperti Obyek Game terlihat.

Yohann V.
sumber
Terima kasih banyak. Ini adalah jawaban yang sangat langsung saya cari.
Gissipi_453
0

Apa pun yang ada dalam program menghabiskan sumber daya; Anda tidak berpikir program berjalan hanya dengan harapan dan impian, bukan?

Pertanyaannya seharusnya adalah berapa banyak sumber daya yang dikonsumsi objek permainan, dan untuk itu saya pikir ini adalah jawaban yang cukup solid: http://answers.unity3d.com/questions/280455/how-much-memory-a-gameobject- konsumsi.html

Singkatnya, mereka mengonsumsi sumber daya yang dapat diabaikan sendiri. Tapi mengapa Anda ingin banyak objek game hanya duduk di game Anda tanpa melakukan apa pun? Pada akhirnya, apa yang Anda benar-benar membuat objek permainan 'lakukan', adalah apa yang akan menyebabkan segala jenis overhead - dan berapa banyak sumber daya yang dibutuhkan sangat banyak berdasarkan kasus per kasus.

kembali benar
sumber
Terima kasih banyak. Jadi haruskah saya menghancurkan objek yang hilang dari pandangan kamera saat game sedang berjalan?
Gissipi_453
1
Saya pikir jawaban ini tidak benar-benar mencoba menjawab pertanyaan Anda sama sekali dan dengan demikian jelas salah. Jika Anda memutar kamera Anda, Anda pasti tidak akan menghancurkan benda-benda itu kecuali Anda tahu, bahwa kamera tidak akan memutar kembali untuk memeriksa objek itu. Dunia permainan ada dan AI bergerak, lampu memengaruhi lingkungan, bahkan jika Anda tidak melihatnya.
Katu
@Atu, itu juga benar. Terima kasih. Kecuali objek tidak perlu dirender sama sekali, saya tidak harus menghancurkannya.
Gissipi_453
@ Katu saya menjawab pertanyaan: "Apakah Obyek Game ini (Objek dalam adegan saya yang tidak terlihat oleh kamera) akan menghabiskan sumber daya komputer / seluler saat game berjalan?" Jawabannya adalah: "Ya. Apa pun yang ada di program menghabiskan sumber daya". Dan saya melanjutkan untuk menjelaskan dampak dari objek game kosong di tempat kejadian dan biaya sumber daya.
mengembalikan true
2
@ Gissipi_453 Untuk menjawab pertanyaan Anda, itu tergantung sepenuhnya pada apa yang sebenarnya dilakukan objek permainan dalam adegan, seberapa sering mereka dibuat / dihapus, dan pertimbangan lainnya. Mengetahui kapan harus mengoptimalkan adalah keterampilan, tetapi aturan praktisnya adalah jangan khawatir tentang hal itu, sampai ada sesuatu yang perlu dikhawatirkan. Overhead objek game tambahan hampir tidak ada, jadi jangan khawatir. Dalam beberapa kasus, jika Anda sering menambahkan / menghapus objek, pengumpulan objek dapat menjadi penyelamat, dan dalam kasus lain Anda dapat melakukan trik lainnya. Itu semua tergantung pada apakah ada dan apa sebenarnya masalahnya.
mengembalikan true