Qual è la definizione tecnica di "batch di sprite?"


17

Piattaforma e linguaggio agnosticamente, come viene definito il batch di sprite? Sembra che ci siano molte tecniche diverse per ridurre la quantità di lavoro durante il disegno e che sono spesso raggruppate con "batch". Mi viene in mente che potrebbe non esserci una vera risposta, ma forse qualcuno qui ha trovato qualcosa che io non ho.

Risposte:


14

Tecnicamente, il "batch" sta mettendo più azioni e i loro dati in una struttura di dati in modo che tutti possano essere eseguiti contemporaneamente anziché individualmente.

Il più grande collo di bottiglia delle GPU moderne non è la loro potenza di lavoro, ma la comunicazione tra il tuo gioco in esecuzione sulla CPU e la GPU. Ogni pacchetto di dati inviato alla GPU ha un overhead, ma l'overhead di un piccolo pacchetto è grande quanto quello di un pacchetto grande, quindi è un grande guadagno quando si invia un pacchetto grande anziché un centinaio di quelli più piccoli. Ed è questo il batching; facendo un grosso pacchetto da tutti quelli più piccoli.

Il batching è particolarmente utile per gli sprite a causa della ridicolmente piccola quantità di dati per sprite; quattro vertici e quattro corde tex. Quindi il sovraccarico del piccolo pacchetto è proporzionalmente grande.


1
+1 per menzionare il problema di latenza; questo è lo stesso principio che si applica anche al traffico di rete e all'I / O del disco - in generale, pochissimi batch di grandi dimensioni superano molti piccoli batch.
Maximus Minimus,

9

Il batch di Sprite è il metodo per inviare più sprite alla GPU con una singola chiamata di disegno.

Nessuna delle altre risposte sottolinea il vero punto di fare questo: minimizzare i cambiamenti di stato e l'invio dei comandi GPU. Se ho 100 sprite che disegno, ognuno con la propria trama, l'hardware può elaborare solo uno sprite alla volta. Le dozzine o persino le migliaia di shader core finiscono per essere utilizzate a malapena e la GPU impiega troppo tempo a configurare il suo stato di rendering per gli switch di trama.

Se metti tutte le tue immagini sprite in un atlante, puoi ridurre al minimo i cambiamenti di stato necessari per disegnare. Il driver potrebbe anche essere in grado di combinare automaticamente le richieste di estrazione sprite in un singolo batch in modo che l'hardware possa essere completamente utilizzato, ma ciò non è garantito o probabile.

Se usi un atlante sprite e poi crei un singolo VBO con tutti i tuoi quaderni di sprite riempiti al suo interno, fai una singola richiesta di disegno con quei dati, sei sicuro che l'hardware è completamente utilizzato e tutti i tuoi sprite sono resi in parallelo.

Lo batch di Sprite sta quindi facendo proprio questo: mettere quanti più sprite possibile in un singolo VBO usando un singolo atlante che viene inviato alla GPU con una singola chiamata di disegno, massimizzando l'utilizzo della GPU.

Esistono altri modi per eseguire il batch di sprite (come istanza hardware, utilizzo di shader di geometria, ecc.) E altri vantaggi nel farlo, ma l'essenza di ciò è che raggruppare significa disegnare più oggetti per ogni chiamata di disegno.


-1: Ridurre al minimo le modifiche allo stato non è "il punto" del batch. È solo un requisito che deriva dal modo in cui OpenGL è strutturato. (È il punto degli atlanti delle trame, ma quelli non sono stati chiesti.) La domanda richiede specificatamente una definizione "Piattaforma e linguaggio agnosticamente".
API-Beast

Quindi il metodo di disegnare tutto su un backbuffer risolve prima questo problema come? I dati non vengono ancora manipolati uno alla volta in una singola immagine in memoria e quindi trasferiti al buffer anteriore? Penso che la mia comprensione debba essere un po 'imperfetta.
Bloodyaugust,

4
Mr. Beast: non ha nulla a che fare con OpenGL o nessuna piattaforma o linguaggio. Ecco come funziona realmente l'hardware stesso, su tutte le piattaforme e tutte le API grafiche che utilizzano qualsiasi lingua.
Sean Middleditch il

6

Non è un termine tecnico strettamente definito. Il batch è fondamentalmente qualsiasi sistema in cui si eseguono più operazioni come un set piuttosto che singolarmente, e spesso ciò avviene perché è più efficiente farlo. Gli incrementi di efficienza di solito derivano dalla possibilità di riutilizzare tutto o parte del contesto richiesto dall'operazione.

Quindi, il batch di sprite è un qualsiasi sistema che ti consente di disegnare più sprite contemporaneamente e speriamo di ottenere un po 'di efficienza da esso. Di solito il vantaggio è che il tuo batch di sprite utilizza tutti la stessa trama, quindi puoi disegnare tutti gli sprite nel batch senza cambiare trama, che è un'operazione relativamente lenta.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.