Platform dan bahasa secara agnostik, bagaimana cara menentukan kumpulan sprite? Sepertinya ada banyak teknik yang berbeda untuk mengurangi jumlah pekerjaan saat menggambar, dan bahwa mereka sering disamakan dengan "batching". Terpikir oleh saya bahwa mungkin tidak ada jawaban yang nyata, tetapi mungkin seseorang di sini telah menemukan sesuatu yang tidak saya miliki.
Secara teknis, "batching" adalah menempatkan beberapa tindakan dan data mereka ke dalam satu struktur data sehingga semuanya dapat dieksekusi sekaligus daripada secara individual.
Hambatan terbesar GPU modern bukanlah kekuatan kerja mereka, tetapi komunikasi antara gim Anda yang berjalan pada CPU dan GPU. Setiap paket data yang dikirim ke GPU memiliki overhead, tetapi overhead dari paket kecil sama besarnya dengan paket besar, jadi itu adalah keuntungan besar ketika Anda mengirim satu paket besar daripada seratus yang lebih kecil. Dan itulah yang disebut batching; membuat satu paket besar dari semua yang lebih kecil.
Batching sangat berguna untuk sprite karena jumlah data per sprite yang sangat kecil; empat simpul dan empat tex coords. Jadi overhead paket kecil itu proporsional besar.
+1 untuk menyebutkan masalah latensi; ini adalah prinsip yang sama seperti juga berlaku untuk lalu lintas jaringan dan disk I / O - dalam kasus umum, sangat sedikit batch besar mengalahkan banyak batch kecil.
Maximus Minimus
9
Batch sprite adalah metode pengiriman beberapa sprite ke GPU dengan satu panggilan undian.
Tidak satu pun dari jawaban lain menunjukkan poin sebenarnya dari melakukan ini: meminimalkan perubahan status dan pengiriman perintah GPU. Jika Anda memiliki 100 sprite yang saya gambar, masing-masing dengan teksturnya sendiri, perangkat keras hanya dapat memproses satu sprite pada satu waktu. Lusinan atau bahkan ribuan inti shader akhirnya hampir tidak digunakan, dan GPU menghabiskan terlalu banyak waktu untuk mengkonfigurasi status render-nya untuk sakelar tekstur.
Jika Anda meletakkan semua gambar sprite Anda ke dalam atlas, Anda dapat meminimalkan perubahan kondisi yang diperlukan untuk menggambar. Pengemudi mungkin bahkan dapat secara otomatis menggabungkan permintaan menggambar sprite ke dalam satu batch sehingga perangkat keras dapat dimanfaatkan sepenuhnya, tetapi ini tidak dijamin atau tidak mungkin.
Jika Anda menggunakan sprite atlas dan kemudian membuat VBO tunggal dengan semua paha sprite Anda diisi ke dalamnya, sebuah permintaan undian tunggal dengan data itu, Anda dijamin bahwa perangkat keras sepenuhnya digunakan dan semua sprite Anda disajikan secara paralel.
Batch sprite kemudian melakukan hal yang sama: menempatkan sebanyak mungkin sprite Anda ke dalam VBO menggunakan atlas tunggal yang dikirimkan ke GPU dengan satu kali draw draw, memaksimalkan penggunaan GPU.
Ada cara lain untuk melakukan batching sprite (seperti pemasangan perangkat keras, menggunakan geometri shaders, dll), dan manfaat lain untuk melakukannya, tetapi intinya adalah bahwa batching berarti menggambar beberapa objek per panggilan panggilan.
-1: Meminimalkan perubahan status bukanlah "titik" batching. Ini hanya persyaratan yang datang dari cara OpenGL disusun. (Ini adalah titik atlas tekstur, tetapi itu tidak diminta.) Pertanyaannya secara spesifik menanyakan definisi "Platform dan bahasa secara agnostik".
API-Beast
Jadi metode menggambar semuanya ke backbuffer pertama menyelesaikan masalah ini bagaimana? Bukankah data masih dimanipulasi satu per satu untuk satu gambar dalam memori, dan kemudian didorong ke buffer depan? Saya pikir pemahaman saya harus sedikit cacat.
Bloodyaugust
4
Mr. Beast: tidak ada hubungannya dengan OpenGL atau platform atau bahasa apa pun. Begitulah sebenarnya perangkat keras itu sendiri bekerja, di semua platform dan semua API grafik menggunakan bahasa apa pun.
Sean Middleditch
6
Ini bukan istilah teknis yang didefinisikan dengan ketat. Batching pada dasarnya adalah sistem apa pun di mana Anda melakukan beberapa operasi sebagai set daripada secara individual, dan seringkali ini dilakukan karena lebih efisien untuk melakukannya. Keuntungan efisiensi biasanya berasal dari kemampuan untuk menggunakan kembali sebagian atau seluruh konteks yang diperlukan oleh operasi.
Jadi, batching sprite adalah sembarang sistem yang memungkinkan Anda menggambar beberapa sprite sekaligus dan semoga mendapatkan efisiensi darinya. Biasanya manfaatnya adalah bahwa semua kumpulan sprite Anda menggunakan tekstur yang sama, sehingga Anda dapat menggambar semua sprite dalam kumpulan tanpa mengubah tekstur, yang merupakan operasi yang relatif lambat.
Batch sprite adalah metode pengiriman beberapa sprite ke GPU dengan satu panggilan undian.
Tidak satu pun dari jawaban lain menunjukkan poin sebenarnya dari melakukan ini: meminimalkan perubahan status dan pengiriman perintah GPU. Jika Anda memiliki 100 sprite yang saya gambar, masing-masing dengan teksturnya sendiri, perangkat keras hanya dapat memproses satu sprite pada satu waktu. Lusinan atau bahkan ribuan inti shader akhirnya hampir tidak digunakan, dan GPU menghabiskan terlalu banyak waktu untuk mengkonfigurasi status render-nya untuk sakelar tekstur.
Jika Anda meletakkan semua gambar sprite Anda ke dalam atlas, Anda dapat meminimalkan perubahan kondisi yang diperlukan untuk menggambar. Pengemudi mungkin bahkan dapat secara otomatis menggabungkan permintaan menggambar sprite ke dalam satu batch sehingga perangkat keras dapat dimanfaatkan sepenuhnya, tetapi ini tidak dijamin atau tidak mungkin.
Jika Anda menggunakan sprite atlas dan kemudian membuat VBO tunggal dengan semua paha sprite Anda diisi ke dalamnya, sebuah permintaan undian tunggal dengan data itu, Anda dijamin bahwa perangkat keras sepenuhnya digunakan dan semua sprite Anda disajikan secara paralel.
Batch sprite kemudian melakukan hal yang sama: menempatkan sebanyak mungkin sprite Anda ke dalam VBO menggunakan atlas tunggal yang dikirimkan ke GPU dengan satu kali draw draw, memaksimalkan penggunaan GPU.
Ada cara lain untuk melakukan batching sprite (seperti pemasangan perangkat keras, menggunakan geometri shaders, dll), dan manfaat lain untuk melakukannya, tetapi intinya adalah bahwa batching berarti menggambar beberapa objek per panggilan panggilan.
sumber
Ini bukan istilah teknis yang didefinisikan dengan ketat. Batching pada dasarnya adalah sistem apa pun di mana Anda melakukan beberapa operasi sebagai set daripada secara individual, dan seringkali ini dilakukan karena lebih efisien untuk melakukannya. Keuntungan efisiensi biasanya berasal dari kemampuan untuk menggunakan kembali sebagian atau seluruh konteks yang diperlukan oleh operasi.
Jadi, batching sprite adalah sembarang sistem yang memungkinkan Anda menggambar beberapa sprite sekaligus dan semoga mendapatkan efisiensi darinya. Biasanya manfaatnya adalah bahwa semua kumpulan sprite Anda menggunakan tekstur yang sama, sehingga Anda dapat menggambar semua sprite dalam kumpulan tanpa mengubah tekstur, yang merupakan operasi yang relatif lambat.
sumber