Devo dare ad ogni personaggio il proprio VBO o devo raggrupparli in un singolo VBO?


10

Sto realizzando un gioco 3D in prima persona. Devo dare a ogni personaggio il proprio VBO o devo raggruppare tutti i personaggi in un singolo VBO? Quali sono i pro / contro?


Questa è una domanda duplicata. Di cosa, non sono troppo sicuro, ma è un imbecille.
DeadMG

È simile a questo , ma non credo che sia un duplicato di per sé, per cominciare, questo è Open-GL (non sono sicuro se ci siano differenze specifiche), mentre l'altra domanda riguarda i deformabili in DirectX11 (quindi presumibilmente usando la tassellatura, che cambia le cose).
Thomas Russell,

Risposte:


11

Questa è davvero una scelta tra prestazioni e flessibilità, ma elencherò le mie opinioni al riguardo.

Un singolo VBO

I lati positivi sono:

  • Basta un richiamo per disegnare la tua scena. Questo aumenta le prestazioni. Sebbene l'applicazione possa richiedere più chiamate di disegno, è comunque possibile avere un singolo VBO e lasciare che il conteggio e l'offset decidano il disegno.
  • Non richiede cambiamenti di stato tra i tuoi oggetti. Questo aumenta le prestazioni.

e i lati negativi sono:

  • Difficile da gestire, anche se questo dipende da come si scrive il codice, se è progettato correttamente, ecc.
  • Dicendo difficile da gestire intendo cose come aggiornare il VBO, impostare l'offset corretto per ogni oggetto ecc.

VBO individuale: s

I lati positivi sono:

  • Facile da implementare.
  • Più facile da gestire dall'inizio.

e i lati negativi sono:

  • Molti cambiamenti di stato. Questo riduce le prestazioni.
  • Molte chiamate di pareggio. Ridurrà le prestazioni.

Sommario

Ti consiglierei di profilare la tua applicazione; ottieni il tuo vero collo di bottiglia nei dati che puoi vedere. L'ottimizzazione prematura può essere mostrata (in questo caso) come non necessaria. Tuttavia, detto questo, se scoprissi una reale perdita di prestazioni nella tua applicazione, dato il singolo scenario VBO: s , puoi iniziare a implementare un singolo VBO.

Tuttavia, fintanto che non è necessario (il numero di oggetti è basso, non molti cambiamenti di stato in generale, ecc.) Consiglierei di andare con i singoli VBO: se non vedi che non funzionerà.

modificare

Ho dimenticato di menzionare che sarebbe andato bene con più call call. La cosa più importante nei periodi critici in termini di prestazioni è mantenere al minimo i cambiamenti di stato. Puoi semplicemente impostare il numero di indici da elaborare e un offset per ogni richiamo di estrazione, e questo va bene. Tuttavia, mantieni i cambiamenti di stato il più bassi possibile e fai il minor numero di chiamate possibili, questo è il grande saluto di questa risposta, o almeno quello che ho cercato di dire.


Se stai solo effettuando 1 chiamata di sorteggio, ciò ti rovina per i cambiamenti di stato per mesh (non per vertice) (uniformi ecc.). Forza anche un tutto o nessuno per disegnare tutto. Sicuro di poterlo scomporre in modo che ci siano solo 1 VBO chiamate multiple draw, ma cosa succede se si desidera aggiungere una nuova mesh?
deceleratedcaviar

1
@Daniel: una nuova mesh dovrebbe essere semplicemente aggiornata / aggiunta nel VBO. Ho dimenticato di menzionare che sarebbe andato bene con più call call. La cosa più importante nei periodi critici in termini di prestazioni è mantenere al minimo i cambiamenti di stato. Puoi semplicemente impostare il numero di indici da elaborare e un offset per ogni richiamo di estrazione, e questo va bene. Tuttavia, mantieni i cambiamenti di stato il più bassi possibile e fai il minor numero di chiamate possibili, questo è il grande saluto di questa risposta, o almeno quello che ho cercato di dire. :-)
Wroclai,

Batch, batch, batch nel 2005 sono giunti alla conclusione che puoi permetterti tra 10k e 25k batch su una CPU da 1 GHz prima di essere completamente legato alla CPU elaborando le chiamate di disegno da solo. Dal momento che ciò si traduce in poche centinaia di lotti per frame a 60Hz, non è essenziale scianare tutto in un singolo VB, ma sicuramente aiuta se si raggruppano geometrie con caratteristiche simili (durata, frequenza di aggiornamento, attributi) nello stesso VB.
Lars Viklund,

1
Penso che dovresti anche tenere conto dell'abbattimento del frustum.
Tara,
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.