Ordinamento degli oggetti prima del rendering


10

Sto cercando di implementare un grafico di scena e in tutti gli articoli che ho incontrato si parla dell'ordinamento degli oggetti. Quindi, ad esempio, ordineresti i tuoi oggetti per "materiale". Ora, finché non mi sono seduto e ho iniziato a implementarlo, ho dato per scontato questo, perché aveva senso. Ma ora mi chiedo cosa cambia effettivamente l'ordinamento?

Nel mio motore, ho un manager per gli UBO, li uso per archiviare i dati che verranno condivisi tra i programmi, al momento che coinvolge solo il tempo, le matrici e le luci della fotocamera e della proiezione (non mi preoccupo di gestire quali luci influenzano quali oggetti ATM).

Ora per ogni modello devo cambiare il modello in uniforme mondiale, nessun ordinamento lo cambierà. Quindi il salto dal cambiare questa matrice all'impostazione di un materiale per ogni oggetto è così cattivo?

Ricordo vagamente di aver letto da qualche parte che ogni volta che cambi qualcosa nella pipeline, deve essere svuotato e ciò può causare problemi di prestazioni. Ma per ogni call di disegno sto comunque impostando un modello sulla matrice mondiale, quindi che senso ha mai preoccuparsi di questo?

A proposito, ci sono informazioni sul fatto che cambiare una divisa e chiamare glBufferSubData sia più (o meno) costoso.


3
Risposta rapida, sì, il passaggio dal cambiare una matrice all'impostazione dei materiali su ciascun oggetto è così negativo. A questo punto suggerirei di fare un giro laterale per scoprire gli strumenti di misurazione delle prestazioni OpenGL per la tua piattaforma prima di continuare. Con gli strumenti perf puoi facilmente misurare diverse tecniche e scoprire cosa funziona meglio per le esigenze del tuo renderer. Inoltre quegli strumenti ti dureranno per tutta la tua carriera mentre questo renderizzatore ... non così tanto ;-)
Patrick Hughes,

@PatrickHughes fantastico, grazie, controllerò sicuramente quelli
dreta

Risposte:


4

Volete sicuramente ordinare per raggruppare insieme i materiali. Se possibile, è anche possibile utilizzare l'istanziamento per raggruppare insieme la geometria (ad es. Se si dispone del numero X degli stessi oggetti).

C'è anche ancora valore nell'ordinamento per profondità. È necessario ordinare in primo piano per gli oggetti trasparenti (ignorando diverse tecniche avanzate che rimuovono tale necessità, in circostanze limitate).

C'è anche valore nell'ordinare gli oggetti opachi dalla parte anteriore a quella posteriore, poiché ciò consente agli inizi della Z di ridurre notevolmente il frammento di shader ambientale della scena.


3
Ordinare gli oggetti opachi / trasparenti non è facile per situazioni complesse (al punto da essere impossibile senza regole arbitrarie). Puoi anche raggruppare per trama allo stesso scopo di ridurre le chiamate gl.
Darkwings,

L'ordinamento per trama è necessario per raggruppare le chiamate e ridurre le chiamate di estrazione. L'ordinamento non ha nulla a che fare con la riduzione delle chiamate di disegno. L'ordinamento ha a che fare con il corretto rendering (per oggetti trasparenti) o per minimizzare il sovraccarico del processore di frammenti (per oggetti opachi). Essere "complessi" è un problema, sì, ma è quello con cui i programmatori della grafica del motore di gioco vengono pagati per gestire i giochi effettivamente giocabili su hardware di largo consumo. L'efficienza hardware tra oggetti opachi ordinati e non ordinati può essere piuttosto massiccia.
Sean Middleditch,

opengl.org/wiki/Transparency_Sorting Questo è ciò che intendevo per "regole arbitrarie". Non esiste un ordinamento "corretto" oggettivo per casi complessi. A proposito di "ordinamento" e "ordinamento", il PO ha chiaramente dichiarato "ordinamento per materiale" (indipendentemente dalla trasparenza), e io intendevo lo stesso per la trama poiché entrambi gli obiettivi avevano un impatto sulle prestazioni.
Darkwings,

A dire il vero, non ho mai visto una volta questo tipo di problemi entrare in gioco nei giochi reali. Questi esempi non riflettono realmente il modo in cui uno fa effettivamente le cose, in cui gli oggetti trasparenti hanno generalmente dimensioni approssimativamente uniformi e hanno confini di collisione abbastanza "squadrati", entrambi i quali impediscono sovrapposizioni folli. In entrambi i casi, il fatto che "è difficile" non cambia la sua necessità. Ovviamente ho anche sottolineato che il raggruppamento per materiale è importante e ho menzionato l'istanza per contrapporre l'affermazione "nessun ordinamento può aiutare", quindi non sono sicuro che ci sia qualcosa di concreto che hai trovato sbagliato nella mia risposta.
Sean Middleditch,

Guarda, un commento non significa che ho trovato qualcosa di sbagliato nella tua risposta, e non ho mai detto "nessun ordinamento può aiutare". Ho affermato che ci sono casi in cui non esiste una soluzione obiettiva corretta, quindi ovviamente una soluzione deve essere trovata usando regole arbitrarie. Quelle sono 2 affermazioni completamente diverse.
Darkwings,

3

L'ordinamento degli oggetti in base alla profondità ha un valore enorme, soprattutto per le architetture di binning o rendering piastrellate.

Ordina i solidi da davanti a dietro, i lucidi da dietro a davanti.

Durante il rendering, le cose più vicine alla videocamera e al solido vengono visualizzate per prime e qualsiasi altra cosa che occupi lo stesso spazio verrà rifiutata da un controllo iniziale del buffer z.

Se l'architettura grafica ha una sorta di z-buffer gerarchico o a bassa risoluzione, la geometria può essere eliminata anche prima che venga eseguito il rendering.

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.