Nei moderni giochi AAA con ambiente aperto e molti contenuti statici (ad es. Crysis), come viene eseguita l'abbattimento dell'occlusione?


19

Due idee che ho in mente:

1) La scena viene renderizzata in un buffer invisibile, usando modelli a bassa risoluzione e con basso numero di poligoni (o anche usando solo volumi di delimitazione come cubi o sfere). Il buffer viene quindi verificato per sapere cosa è visibile o meno. Prima di eseguire il rendering della scena a bassa risoluzione, è possibile applicare un po 'di abbattimento del frustum, per rimuovere già quanti più oggetti possibile.

2) Uno strumento viene eseguito sulla mappa statica ed eseguirà il ray tracing complesso (e quindi lento) per sapere per alcune posizioni 3d sulla mappa cosa è visibile e cosa non lo è. Tutte queste informazioni vengono quindi archiviate in modo efficiente che può essere utilizzato successivamente in fase di esecuzione (ad es. Un octree). Questa soluzione funzionerebbe solo per mesh statiche (ad es. Costruzione) che non spostano oggetti.


3
Le domande "Come ha fatto il gioco <X> a farlo" sono esplicitamente off-topic come nelle FAQ . Forse modifica questa domanda per chiedere come è possibile effettuare la selezione dell'occlusione, piuttosto che come lo fa qualcun altro ? (Inoltre, fornire le tue risposte nel corpo della domanda ti fa sentire come se stessi chiedendo una discussione o un elenco, piuttosto che una risposta )
Trevor Powell

Risposte:


13

La risposta di Jovan è ottima, ma volevo solo aggiungere che a volte c'è il supporto hardware per porre la domanda "Questa geometria ha effettivamente reso dei pixel?" (la tua idea n. 1) Queste sono chiamate query di occlusione - questo è un buon articolo su Gemme GPU su di loro qui

Questo è abbastanza simile alla tua idea n. 1, tranne per il fatto che non hai bisogno di un buffer invisibile e può essere più efficiente o più semplice del controllo del buffer. L'articolo collegato fa un ottimo lavoro approfondendo il funzionamento delle query di occlusione hardware.

Unreal Engine sfrutta le query di occlusione hardware su piattaforme che lo supportano, oltre ad altre tecniche come la visualizzazione dell'abbattimento del frustum e il pre-calcolo della geometria statica occlusa.


Le query sull'occlusione hardware sono in realtà un po 'più comuni di "a volte" al giorno d'oggi - con la possibile eccezione di alcune GPU mobili possono essere considerate onnipresenti.
Maximus Minimus

non sono molto lenti?
Quonux,

12

1) La scena viene renderizzata in un buffer invisibile, usando modelli a bassa risoluzione e con basso numero di poligoni (o anche usando solo volumi di delimitazione come cubi o sfere). Il buffer viene quindi verificato per sapere cosa è visibile o meno. Prima di eseguire il rendering della scena a bassa risoluzione, è possibile applicare un po 'di abbattimento del frustum, per rimuovere già quanti più oggetti possibile.

Questa tecnica è utilizzata da Killzone ed è dettagliata nella loro presentazione Practical Occlusion Culling su PS3 . Usano anche portali per le aree interne.

Una cosa da tenere a mente sulle grandi mappe esterne è che la semplificazione della mesh è importante quanto l'abbattimento dell'occlusione, quindi viene spesso utilizzata una variazione dei campi di altezza con il clipmapping della geometria. Ecco un buon documento che tratta anche dell'abbattimento. GPU Gems 2 ne ha un'implementazione .


5

Almeno i primi due giochi di Quake hanno utilizzato la strategia 2; Non so se i motori idTech lo usano ancora. Il mondo raggiungibile è diviso in spazi convessi organizzati in una struttura di dati ad albero ("partizione spaziale binaria"), e per ogni nodo nella struttura c'è un vettore di bit che rappresenta quali altri nodi sono visibili da quel nodo ("set potenzialmente visibile").


1
Se hai intenzione di introdurre Quake, potresti anche portare la tecnologia di rendering di Thief;) - nothings.org/gamedev/thief_rendering.html
Jovan
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.