Haruskah saya memberikan masing-masing karakter VBO sendiri atau saya harus batch mereka menjadi VBO tunggal?
10
Saya membuat game orang pertama 3D. Haruskah saya memberikan masing-masing karakter VBO sendiri atau saya harus batch semua karakter menjadi VBO tunggal? Apa pro / kontra?
Ini adalah pertanyaan rangkap. Tentang apa, saya tidak terlalu yakin, tetapi itu adalah penipuan.
DeadMG
Ini mirip dengan ini , tapi saya tidak percaya itu adalah duplikat per-se, untuk awalnya, ini adalah Open-GL (saya tidak yakin apakah ada perbedaan spesifik), sedangkan pertanyaan lain adalah tentang deformables di DirectX11 (dengan demikian mungkin menggunakan tessellation, yang mengubah banyak hal).
Thomas Russell
Jawaban:
11
Ini benar-benar pilihan antara kinerja dan fleksibilitas, tetapi saya akan mencantumkan pendapat saya tentang hal itu.
Satu VBO tunggal
Sisi positifnya adalah:
Hanya satu panggilan undian untuk menggambar adegan Anda. Ini meningkatkan kinerja. Meskipun aplikasi Anda mungkin memerlukan beberapa panggilan undian, Anda masih dapat memiliki satu VBO dan membiarkan hitungan dan mengimbangi menentukan gambar Anda.
Tidak memerlukan perubahan status di antara objek Anda. Ini meningkat kinerja.
dan sisi negatifnya adalah:
Sulit dikelola, meskipun ini tergantung pada bagaimana Anda menulis kode Anda, apakah itu dirancang dengan benar dll.
Dengan mengatakan sulit untuk mengelola, saya maksudkan hal-hal seperti memperbarui VBO, mengatur offset yang benar untuk setiap objek dll.
VBO individu: s
Sisi positifnya adalah:
Mudah diimplementasikan.
Lebih mudah dikelola sejak awal.
dan sisi negatifnya adalah:
Banyak perubahan status. Ini menurunkan kinerja.
Banyak panggilan telepon. Ini akan menurunkan kinerja.
Ringkasan
Saya merekomendasikan Anda untuk membuat profil aplikasi Anda; dapatkan hambatan nyata Anda dalam data yang bisa Anda lihat. Optimalisasi prematur dapat ditunjukkan (dalam hal ini) sebagai tidak perlu. Namun, demikian dikatakan, jika Anda akan menemukan kehilangan kinerja yang nyata dalam aplikasi Anda, mengingat masing - masing VBO: s skenario , Anda dapat mulai menerapkan VBO tunggal.
Namun, selama itu tidak diperlukan (jumlah objek rendah, tidak banyak perubahan negara secara keseluruhan, dll) Saya akan merekomendasikan untuk pergi dengan VBO individu: kecuali Anda melihat itu tidak akan berhasil.
Edit
Saya lupa menyebutkan bahwa itu akan baik-baik saja dengan beberapa panggilan undian. Hal yang paling penting dalam saat-saat kritis kinerja adalah untuk menjaga kondisi perubahan minimal. Anda cukup mengatur jumlah indeks untuk diproses dan offset untuk setiap panggilan undian, dan ini tidak masalah. Tapi bagaimanapun, tetap perubahan negara serendah mungkin dan membuat sedikitnya panggilan imbang mungkin, itu besar halo dari jawaban ini, atau setidaknya apa yang saya mencoba untuk mengatakan.
Jika Anda hanya melakukan 1 kali draw draw, itu akan mengacaukan Anda untuk per mesh (bukan per vertex) perubahan status (seragam dll). Juga memaksa semua atau tidak sama sekali untuk menggambar semuanya. Tentu Anda dapat memecahnya sehingga hanya ada 1 panggilan VBO multiple draw, tetapi bagaimana jika Anda ingin menambahkan jala baru?
decaviatedcaviar
1
@Aniel: Jala baru harus diperbarui / ditambahkan ke VBO. Saya lupa menyebutkan bahwa itu akan baik-baik saja dengan beberapa panggilan undian. Hal yang paling penting dalam saat-saat kritis kinerja adalah untuk menjaga kondisi perubahan minimal. Anda cukup mengatur jumlah indeks untuk diproses dan offset untuk setiap panggilan undian, dan ini tidak masalah. Tapi bagaimanapun, tetap perubahan negara serendah mungkin dan membuat sedikitnya panggilan imbang mungkin, itu besar halo dari jawaban ini, atau setidaknya apa yang saya mencoba untuk mengatakan. :-)
Wroclai
Batch, batch, batch pada tahun 2005 sampai pada kesimpulan bahwa Anda dapat membeli antara batch 10k dan 25k pada CPU 1 GHz sebelum Anda benar-benar terikat dengan CPU dengan memproses panggilan draw saja. Seperti yang diterjemahkan ke dalam beberapa ratus batch per 60Hz frame, memilih semuanya menjadi VB tunggal tidak penting, tetapi pasti membantu jika Anda menggabungkan geometri yang memiliki karakteristik yang sama (masa pakai, tingkat pembaruan, atribut) ke dalam VB yang sama.
Lars Viklund
1
Saya pikir Anda juga harus mempertimbangkan pemusnahan frustrasi.
Jawaban:
Ini benar-benar pilihan antara kinerja dan fleksibilitas, tetapi saya akan mencantumkan pendapat saya tentang hal itu.
Satu VBO tunggal
Sisi positifnya adalah:
dan sisi negatifnya adalah:
VBO individu: s
Sisi positifnya adalah:
dan sisi negatifnya adalah:
Ringkasan
Saya merekomendasikan Anda untuk membuat profil aplikasi Anda; dapatkan hambatan nyata Anda dalam data yang bisa Anda lihat. Optimalisasi prematur dapat ditunjukkan (dalam hal ini) sebagai tidak perlu. Namun, demikian dikatakan, jika Anda akan menemukan kehilangan kinerja yang nyata dalam aplikasi Anda, mengingat masing - masing VBO: s skenario , Anda dapat mulai menerapkan VBO tunggal.
Namun, selama itu tidak diperlukan (jumlah objek rendah, tidak banyak perubahan negara secara keseluruhan, dll) Saya akan merekomendasikan untuk pergi dengan VBO individu: kecuali Anda melihat itu tidak akan berhasil.
Edit
Saya lupa menyebutkan bahwa itu akan baik-baik saja dengan beberapa panggilan undian. Hal yang paling penting dalam saat-saat kritis kinerja adalah untuk menjaga kondisi perubahan minimal. Anda cukup mengatur jumlah indeks untuk diproses dan offset untuk setiap panggilan undian, dan ini tidak masalah. Tapi bagaimanapun, tetap perubahan negara serendah mungkin dan membuat sedikitnya panggilan imbang mungkin, itu besar halo dari jawaban ini, atau setidaknya apa yang saya mencoba untuk mengatakan.
sumber