¿Cuál es la definición técnica de "procesamiento por lotes de sprites"?
17
Plataforma y lenguaje agnóstico, ¿cómo se define el procesamiento por lotes de sprites? Parece que hay muchas técnicas diferentes para disminuir la cantidad de trabajo al dibujar, y que a menudo se agrupan con "lotes". Se me ocurre que puede que no haya una respuesta real, pero tal vez alguien aquí haya encontrado algo que yo no.
Técnicamente, el "procesamiento por lotes" consiste en poner múltiples acciones y sus datos en una estructura de datos para que todo se pueda ejecutar de una vez en lugar de hacerlo individualmente.
El mayor cuello de botella de las GPU modernas no es su potencia de trabajo, sino la comunicación entre su juego que se ejecuta en la CPU y la GPU. Cada paquete de datos enviado a la GPU tiene una sobrecarga, pero la sobrecarga de un paquete pequeño es tan grande como la de un paquete grande, por lo que es una gran ganancia cuando envía un paquete grande en lugar de cien más pequeños. Y eso es lo que es el procesamiento por lotes; haciendo un gran paquete de todos esos más pequeños.
El procesamiento por lotes es particularmente útil para los sprites debido a la cantidad ridículamente pequeña de datos por sprite; cuatro vértices y cuatro coordenadas tex. Por lo tanto, la sobrecarga del paquete pequeño es proporcionalmente grande.
+1 por mencionar el problema de latencia; Este es el mismo principio que también se aplica al tráfico de red y E / S de disco: en el caso general, muy pocos lotes grandes superan a muchos lotes pequeños.
Maximus Minimus
9
El procesamiento por lotes de sprites es el método de enviar múltiples sprites a la GPU con una sola llamada de sorteo.
Ninguna de las otras respuestas señala el punto real de hacer esto: minimizar los cambios de estado y los envíos de comandos de GPU. Si tiene 100 sprites que dibujo, cada uno con su propia textura, el hardware solo puede procesar un sprite a la vez. Las docenas o incluso miles de núcleos de sombreado apenas se utilizan, y la GPU pasa demasiado tiempo configurando su estado de representación para los interruptores de textura.
Si coloca todas sus imágenes de sprites en un atlas, puede minimizar los cambios de estado necesarios para dibujar. El controlador incluso puede combinar automáticamente las solicitudes de extracción de sprites en un solo lote para que el hardware se pueda utilizar por completo, pero esto no está garantizado ni es probable.
Si usa un atlas de sprites y luego crea un solo VBO con todos sus quads de sprites rellenados, y realiza una sola solicitud de sorteo con esos datos, tiene la garantía de que el hardware se utiliza por completo y todos sus sprites se representan en paralelo.
El procesamiento por lotes de sprites está haciendo exactamente eso: poner tantos sprites como sea posible en un solo VBO usando un atlas único que se envía a la GPU con una sola llamada de sorteo, maximizando el uso de GPU.
Hay otras formas de realizar lotes de sprites (como instancias de hardware, usar sombreadores de geometría, etc.), y otros beneficios de hacerlo, pero lo esencial es que el procesamiento de lotes significa dibujar múltiples objetos por llamada de dibujo.
-1: Minimizar los cambios de estado no es "el punto" del procesamiento por lotes. Es solo un requisito que viene de la forma en que está estructurado OpenGL. (Es el punto de los atlas de texturas, pero no se les pidió). La pregunta específicamente pide una definición de "Plataforma y lenguaje agnósticamente".
API-Beast
Entonces, el método de dibujar todo en un backbuffer primero resuelve este problema, ¿cómo? ¿No se siguen manipulando los datos de uno en uno en una sola imagen en la memoria y luego se envían al búfer frontal? Creo que mi comprensión debe ser un poco defectuosa.
Bloodyaugust
44
Sr. Bestia: no tiene nada que ver con OpenGL ni con ninguna plataforma o lenguaje. Es cómo funciona el hardware en sí, en todas las plataformas y todas las API de gráficos que utilizan cualquier idioma.
Sean Middleditch
6
No es un término técnico bien definido. El procesamiento por lotes es básicamente cualquier sistema en el que realiza múltiples operaciones como un conjunto en lugar de individualmente, y a menudo esto se hace porque es más eficiente hacerlo. Las ganancias de eficiencia generalmente provienen de la posibilidad de reutilizar parte o la totalidad del contexto que requiere la operación.
Por lo tanto, el procesamiento por lotes de sprites es simplemente cualquier sistema que le permite dibujar múltiples sprites a la vez y, con suerte, obtener algo de eficiencia. Por lo general, el beneficio es que su lote de sprites usa la misma textura, por lo que puede dibujar todos los sprites en el lote sin cambiar la textura, que es una operación relativamente lenta.
El procesamiento por lotes de sprites es el método de enviar múltiples sprites a la GPU con una sola llamada de sorteo.
Ninguna de las otras respuestas señala el punto real de hacer esto: minimizar los cambios de estado y los envíos de comandos de GPU. Si tiene 100 sprites que dibujo, cada uno con su propia textura, el hardware solo puede procesar un sprite a la vez. Las docenas o incluso miles de núcleos de sombreado apenas se utilizan, y la GPU pasa demasiado tiempo configurando su estado de representación para los interruptores de textura.
Si coloca todas sus imágenes de sprites en un atlas, puede minimizar los cambios de estado necesarios para dibujar. El controlador incluso puede combinar automáticamente las solicitudes de extracción de sprites en un solo lote para que el hardware se pueda utilizar por completo, pero esto no está garantizado ni es probable.
Si usa un atlas de sprites y luego crea un solo VBO con todos sus quads de sprites rellenados, y realiza una sola solicitud de sorteo con esos datos, tiene la garantía de que el hardware se utiliza por completo y todos sus sprites se representan en paralelo.
El procesamiento por lotes de sprites está haciendo exactamente eso: poner tantos sprites como sea posible en un solo VBO usando un atlas único que se envía a la GPU con una sola llamada de sorteo, maximizando el uso de GPU.
Hay otras formas de realizar lotes de sprites (como instancias de hardware, usar sombreadores de geometría, etc.), y otros beneficios de hacerlo, pero lo esencial es que el procesamiento de lotes significa dibujar múltiples objetos por llamada de dibujo.
fuente
No es un término técnico bien definido. El procesamiento por lotes es básicamente cualquier sistema en el que realiza múltiples operaciones como un conjunto en lugar de individualmente, y a menudo esto se hace porque es más eficiente hacerlo. Las ganancias de eficiencia generalmente provienen de la posibilidad de reutilizar parte o la totalidad del contexto que requiere la operación.
Por lo tanto, el procesamiento por lotes de sprites es simplemente cualquier sistema que le permite dibujar múltiples sprites a la vez y, con suerte, obtener algo de eficiencia. Por lo general, el beneficio es que su lote de sprites usa la misma textura, por lo que puede dibujar todos los sprites en el lote sin cambiar la textura, que es una operación relativamente lenta.
fuente