Menyortir objek sebelum rendering

10

Saya mencoba menerapkan grafik adegan dan di semua artikel yang saya temui ada pembicaraan tentang penyortiran objek. Jadi, Anda akan mengurutkan objek Anda dengan "bahan" misalnya. Sekarang sampai saya duduk dan mulai menerapkannya, saya agak menganggap ini sebagai hal yang wajar, karena itu masuk akal. Tapi sekarang saya bertanya-tanya, apa sebenarnya penyortiran berubah?

Di mesin saya, saya memiliki manajer untuk UBO, saya menggunakannya untuk menyimpan data yang akan dibagikan antar program, pada saat itu hanya melibatkan waktu, kamera dan matriks dan lampu proyeksi (saya tidak khawatir tentang pengelolaan lampu yang mempengaruhi yang menolak ATM).

Sekarang untuk setiap model saya harus mengubah model ke seragam matriks dunia, tidak ada penyortiran yang akan mengubah itu. Jadi apakah lompatan dari mengubah matriks ini ke juga menetapkan bahan untuk setiap objek yang buruk?

Saya samar-samar ingat membaca di suatu tempat bahwa setiap kali Anda mengubah sesuatu di dalam pipa, itu harus memerah dan itu dapat menyebabkan masalah kinerja. Tapi untuk setiap panggilan gambar saya membuat model ke matriks dunia, jadi apa artinya membuat khawatir tentang hal ini?

BTW apakah ada informasi tentang apakah mengganti seragam dan memanggil glBufferSubData lebih (atau kurang) mahal.

dreta
sumber
3
Jawaban cepat, ya lompatan dari mengubah matriks ke juga pengaturan bahan pada setiap objek adalah yang buruk. Pada titik ini saya menyarankan untuk melakukan perjalanan samping untuk mencari tahu tentang alat pengukur kinerja OpenGL untuk platform Anda sebelum melanjutkan. Dengan alat perf Anda dapat dengan mudah mengukur teknik yang berbeda dan mencari tahu apa yang paling cocok untuk kebutuhan renderer Anda. Ditambah alat-alat itu akan bertahan sepanjang karier Anda ke depan sementara penyaji yang satu ini ... tidak terlalu banyak ;-)
Patrick Hughes
@ Patrickrick luar biasa, terima kasih, saya pasti akan memeriksanya
dreta

Jawaban:

4

Anda pasti ingin menyortir untuk mengumpulkan bahan. Jika Anda bisa, Anda juga bisa menggunakan instancing untuk menggabungkan geometri (misalnya Jika Anda memiliki nomor X objek yang sama).

Masih ada nilai dalam menyortir berdasarkan kedalaman juga. Anda harus mengurutkan kembali ke depan untuk objek transparan (mengabaikan beberapa teknik canggih yang menghilangkan kebutuhan itu, dalam keadaan terbatas).

Ada juga nilai dalam menyortir objek buram dari depan ke belakang, karena memungkinkan awal-Z untuk sangat mengurangi fragmen shader di atas layar adegan Anda.

Sean Middleditch
sumber
3
Memesan objek buram / transparan tidak mudah untuk situasi yang kompleks (sampai-sampai menjadi mustahil tanpa aturan sewenang-wenang). Anda juga dapat mengelompokkan berdasarkan tekstur untuk tujuan yang sama mengurangi panggilan gl.
Darkwings
Diperlukan pemesanan berdasarkan tekstur untuk mengelompokkan panggilan dan mengurangi panggilan draw. Penyortiran tidak ada hubungannya dengan mengurangi panggilan undian. Penyortiran berkaitan dengan mendapatkan rendering yang benar (untuk objek transparan) atau untuk meminimalkan overhead prosesor fragmen (untuk objek buram). Menjadi "kompleks" adalah masalah, ya, tapi itulah yang dibayar oleh programmer pemrogram grafis untuk membuat game benar-benar dapat dimainkan pada perangkat keras komoditas. Efisiensi perangkat keras antara objek buram yang diurutkan dan tidak disortir saja bisa sangat besar.
Sean Middleditch
opengl.org/wiki/Transparency_Sorting Itulah yang saya maksud dengan 'aturan arbitrer'. Tidak ada penyortiran 'benar' objektif untuk kasus kompleks. Tentang 'pengurutan' dan 'pengurutan' OP dengan jelas menyatakan 'pengurutan berdasarkan bahan' (terlepas dari transparansi), dan maksud saya sama untuk tekstur karena keduanya menargetkan dampak kinerja.
Darkwings
Sejujurnya, saya belum pernah melihat masalah seperti itu bermain di game nyata. Contoh-contoh itu tidak benar-benar mencerminkan bagaimana seseorang benar-benar melakukan sesuatu, di mana objek transparan umumnya berukuran kasar, dan memiliki batas tabrakan yang "kotak", yang keduanya mencegah tumpang tindih gila. Dalam kedua kasus tersebut, fakta bahwa "sulit" tidak mengubah kebutuhannya. Tentu saja saya juga menunjukkan bahwa batching by material itu penting, dan menyebutkan contoh untuk menentang pernyataan "no sorting can help", jadi saya tidak yakin apakah ada sesuatu yang konkrit yang Anda temukan salah dalam jawaban saya.
Sean Middleditch
Lihat, sebuah komentar tidak berarti saya menemukan sesuatu yang salah dalam jawaban Anda, dan saya tidak pernah mengatakan 'tidak ada penyortiran yang bisa membantu'. Saya telah menyatakan bahwa ada kasus di mana tidak ada solusi yang objektif objektif, jadi jelas solusi harus ditemukan menggunakan aturan arbitrer. Itu adalah 2 pernyataan yang sangat berbeda.
Darkwings
3

Menyortir objek murni berdasarkan kedalaman memiliki nilai yang sangat besar, terutama pada arsitektur penguraian bining atau ubin.

Urutkan padatan dari depan ke belakang, transparansi dari belakang ke depan.

Saat melakukan rendering, hal-hal yang paling dekat dengan kamera dan solid akan di-render terlebih dahulu, dan hal lain yang menempati ruang yang sama akan ditolak oleh pemeriksaan buffer-z awal.

Jika arsitektur grafis memiliki semacam buffer z hirarki atau resolusi rendah, geometri dapat dimusnahkan bahkan sebelum apa pun diberikan.

Jari Komppa
sumber