Cos'è l'impostazione "Use VBOs"?

Nell'istantanea 14w29b c'è una nuova opzione nel menu "Video Settings" chiamata "Use VBOs":

L'aggiornamento dello snapshot dice che l'abilitazione di "Vertex Buffer Objects" dovrebbe aumentare il vostro FPS dal 5% al 10% in media.

Sto cercando una semplice spiegazione di cosa fanno i VBO visivamente e come funzionano.

Soluzione

La risposta fornita da Flaunting è corretta, ma nel caso qualcuno sia interessato al perché potrebbe essere più efficiente, ecco una spiegazione.

In modalità immediata (penso che questo sia il caso di default in Minecraft) quando si vuole renderizzare, per esempio, un quadrato:

Dovreste emettere i seguenti comandi ogni fotogramma (in pseudo codice)

begin drawing
draw line from (0,0) to (1,0)
draw line from (1,0) to (1,1)
draw line from (1,1) to (0,1)
draw line from (0,1) to (0,0)
end drawing

Per un quadrato, questo non è molto, ma ci potrebbero essere milioni di vertici in una scena, e potrebbero avere più attributi (colore, normali ecc.). Questo è un sacco di dati da inviare alla GPU ogni fotogramma.

Usando VBOS, si dovrebbero caricare tutti i dati dei vertici nella memoria della GPU all'inizio. Il codice pseudo potrebbe assomigliare a questo:

create VBO
load (0,0) into VBO
load (1,0) into VBO
load (1,1) into VBO
load (0,1) into VBO
load (0,0) into VBO

Il codice OpenGL vi restituirà un 'nome' per questo VBO (un intero senza segno non nullo iirc). Potete quindi fare riferimento a questo quando volete disegnare il quadrato. Così ogni fotogramma, avete solo bisogno di emettere un comando di disegno:

draw vertices in VBO

Potresti dover impostare lo stato di disegno in modo che usi coppie di vertici per le linee, ma per ogni VBO aggiuntivo, hai solo bisogno di una chiamata extra di disegno. Infatti, per la geometria statica del livello (probabilmente non applicabile nel caso di minecraft) è possibile combinare tutti questi vertici in un unico massiccio VBO, se si ha abbastanza memoria GPU.

Sono sorpreso che l'accelerazione sia solo del 5-10%. Questo è probabilmente dovuto alla geometria dinamica del livello.

Commentari (6)

VBO sta per Vertex Buffer Object

Dall'articolo di Wikipedia

Un Vertex Buffer Object (VBO) è una funzione OpenGL che fornisce metodi per caricare i dati dei vertici (posizione, vettore normale, colore, ecc.) al dispositivo video per il rendering in modalità non immediata. I VBO offrono sostanziali guadagni di prestazioni rispetto al rendering in modalità immediata principalmente perché i dati risiedono nella memoria del dispositivo video piuttosto che nella memoria di sistema e quindi possono essere resi direttamente dal dispositivo video.

In termini semplici

In minecraft in particolare offre un aumento delle prestazioni del ~10% quando è impostato su ON

Lo fa riducendo il carico di lavoro sulla vostra CPU & RAM e riassegnandolo alla vostra memoria gpu, questo è solo raccomandato se avete una scheda grafica ok o decente

Commentari (13)

Aumenta sostanzialmente la velocità riducendo il carico di lavoro necessario al vostro processore e alla memoria di sistema (RAM). Utilizza invece la memoria della vostra scheda grafica aumentando le prestazioni.

Commentari (0)