Qual é a definição técnica de "lote de sprites?"

17

Plataforma e idioma de forma independente, como é definido o lote de sprites? Parece que existem muitas técnicas diferentes para diminuir a quantidade de trabalho ao desenhar e que elas geralmente são agrupadas com "lotes". Ocorre-me que pode não haver uma resposta real, mas talvez alguém aqui tenha encontrado algo que não encontrei.

Bloodyaugust
fonte

Respostas:

14

Tecnicamente, o "lote" está colocando várias ações e seus dados em uma estrutura de dados para que tudo possa ser executado ao mesmo tempo, e não individualmente.

O maior gargalo das GPUs modernas não é o poder de trabalho, mas a comunicação entre o jogo em execução na CPU e na GPU. Cada pacote de dados enviado para a GPU possui uma sobrecarga, mas a sobrecarga de um pacote pequeno é tão grande quanto a de um pacote grande; portanto, é um grande ganho quando você envia um pacote grande em vez de cem menores. E é isso que é o lote; fazendo um grande pacote com todos os menores.

Os lotes são particularmente úteis para sprites devido à quantidade ridiculamente pequena de dados por sprite; quatro vértices e quatro cordas de tex. Portanto, a sobrecarga do pacote pequeno é proporcionalmente grande.

API-Beast
fonte
1
+1 por mencionar o problema de latência; esse é o mesmo princípio que também se aplica ao tráfego de rede e E / S de disco - no caso geral, poucos lotes grandes superam muitos lotes pequenos.
Maximus Minimus
9

O lote de sprites é o método de enviar vários sprites para a GPU com uma única chamada de desenho.

Nenhuma das outras respostas aponta o ponto real de fazer isso: minimizar as alterações de estado e os envios de comandos da GPU. Se você tiver 100 sprites que eu desenho, cada um com sua própria textura, o hardware pode processar apenas um sprite por vez. As dezenas ou mesmo milhares de núcleos de shader acabam sendo pouco utilizados, e a GPU gasta muito tempo configurando seu estado de renderização para comutadores de textura.

Se você colocar todas as suas imagens de sprite em um atlas, poderá minimizar as alterações de estado necessárias para desenhar. O driver pode até combinar automaticamente solicitações de desenho de sprite em um único lote para que o hardware possa ser totalmente utilizado, mas isso não é garantido ou provável.

Se você usar um atlas de sprite e criar um único VBO com todos os seus quads de sprites preenchidos, e fazer uma solicitação de empate com esses dados, você garante que o hardware é totalmente utilizado e todos os seus sprites são renderizados em paralelo.

O lote de Sprite, então, está fazendo exatamente isso: colocar o máximo possível de seus sprites em um único VBO usando um único atlas que é enviado à GPU com uma única chamada de empate, maximizando o uso da GPU.

Existem outras maneiras de fazer lotes de sprites (como instanciamento de hardware, uso de sombreadores de geometria, etc.) e outros benefícios, mas a essência disso é que o lote significa desenhar vários objetos por chamada de desenho.

Sean Middleditch
fonte
-1: minimizar as alterações de estado não é "o ponto" do lote. É apenas um requisito que vem da maneira como o OpenGL está estruturado. (É o ponto dos atlas de textura, mas não foram solicitados.) A pergunta solicita especificamente uma definição de "Plataforma e linguagem agnosticamente".
API-Beast
Portanto, o método de desenhar tudo em um backbuffer resolve primeiro esse problema, como? Os dados ainda não estão sendo manipulados, um de cada vez, para uma única imagem na memória e depois enviados para o buffer frontal? Eu acho que meu entendimento deve ser um pouco falho.
Bloodyaugust
4
Sr. Besta: não tem nada a ver com o OpenGL ou qualquer plataforma ou idioma. É como o próprio hardware realmente funciona, em todas as plataformas e APIs gráficas, usando qualquer idioma.
26812 Sean Middleditch
6

Não é um termo técnico bem definido. Lote é basicamente qualquer sistema em que você executa várias operações como um conjunto, e não individualmente, e geralmente isso é feito porque é mais eficiente. Os ganhos de eficiência geralmente vêm da capacidade de reutilizar parte ou todo o contexto exigido pela operação.

Portanto, o lote de sprites é apenas qualquer sistema que permite desenhar vários sprites de uma só vez e, com sorte, obter alguma eficiência com isso. Geralmente, o benefício é que todo o lote de sprites está usando a mesma textura, para que você possa desenhar todos os sprites do lote sem alterar a textura, o que é uma operação relativamente lenta.

Kylotan
fonte