Geometry Engine nelle GPU Gaming: utilità e funzionamento

Motore di geometria nelle GPU di gioco

La grafica tridimensionale è con noi da due decenni e con essa anche le GPU incaricate di generarli e inviarli allo schermo dei nostri monitor. Oggi sono pezzi estremamente complessi che si compongono di vari elementi, alcuni nuovi, altri sono stati dentro da anni. Quello che tratteremo in questo articolo è il motore di geometria.

Con l'avanzare della grafica in tempo reale, anche le GPU e con essa i nuovi problemi sembrano essere risolti o quelli vecchi vengono ingranditi. Ciò significa che le vecchie soluzioni non sono più efficienti e se ne devono creare di nuove. La nuova generazione di grafica non sarà basata solo sul Ray Tracing, ma su un notevole aumento della geometria della scena. È qui che entra in gioco il Geometry Engine, un tassello essenziale da migliorare GPU efficienza in questo nuovo paradigma.

Un po' di storia per chiarire la confusione

il

Storicamente, il motore di geometria o motore di geometria si riferiva all'hardware incaricato di eseguire i processi di manipolazione della geometria della scena che si verificano prima della rasterizzazione. Cioè, prima che i triangoli che compongono la scena tridimensionale siano stati convertiti in frammenti di pixel.

Il primo Geometry Engine è nato da un'idea di Jim Clark nei primi anni '1980 e fu l'inizio della leggendaria Silicon Graphics. Grazie a questa innovazione, è stato possibile spostare la manipolazione della scena 3D da minicomputer a workstation che erano una frazione delle dimensioni e del costo dei primi.

Non è stato fino alla fine degli anni '90 che i giochi 3D hanno iniziato a diventare popolari, ma le prime schede 3D non avevano un Geometry Engine e facevano affidamento su CPU potere di calcolare la geometria della scena. Non è stato fino al lancio su PC del primo NVIDIA GeForce che il GE era completamente integrato in un chip grafico. Essere soprannominato T&L dal marketing di NVIDIA.

Nel corso degli anni e con l'arrivo degli Shader, il Geometry Engine come componente hardware è stato completamente sostituito e ora sono le Shader Unit a occuparsene. Questo cambiamento si è verificato da DirectX 10, quando il motore di geometria come hardware è scomparso da NVIDIA e AMD GPU, anche se recentemente il suo significato è stato assunto da un nuovo tipo di unità inclusa nelle architetture più avanzate e di questo parleremo in questo articolo.

L'assemblatore primitivo

Vertici Primitivas Fragmentos

Gli elementi in una scena di gioco tridimensionale vengono renderizzati utilizzando triangoli per comporre i diversi elementi della scena, che sono costituiti da vertici. Ora, il primo stadio della pipeline grafica dopo che il processore dei comandi ha letto l'elenco delle schermate è il Vertex Shader e il suo nome è dovuto al fatto che ciò che fa è lavorare con i vertici e non lo fa con primitive o triangoli quindi indipendenti .

È un'unità chiamata Primitive Assembler che si occupa di unire questi vertici, non solo per creare triangoli, ma per ricostruire i diversi modelli che compongono la scena unendo insieme i loro diversi vertici. Il Primitive Assembler è una parte di funzione fissa in tutte le GPU che eseguono questa funzione automaticamente senza la necessità di partecipazione al codice nell'elenco delle schermate. Chiaro e semplice, tutto ciò che viene eseguito sullo stage Vertex Shader all'interno della pipeline 3D viene inviato al Primitive Assembler e da lì al processo successivo nello stage.

Tassellazione

Nel caso in cui nella GPU sia presente un'unità di tassellazione, che è responsabile della suddivisione dei vertici, il Primitive Assembler viene eseguito subito dopo il processo di tassellatura, poiché la nuova configurazione dei vertici richiede calcoli di unione diversi dai vertici che costituiranno il diversi elementi della scena.

Il Clipper e la rimozione della geometria superflua

Motore di eliminazione della geometria

In una scena tridimensionale ci sono molte primitive grafiche o triangoli nella scena. Tuttavia, non tutte sono visibili al giocatore in ogni frame e quindi è necessario scartare in ogni frame tutta la geometria non visibile prima della fase di rasterizzazione. Poiché ogni vertice che non viene visto, ma che non viene scartato, verrà successivamente rasterizzato, strutturato e anche se in seguito verrà scartato perché c'è un altro pixel con priorità più alta durante il disegno.

La ragione? Tieni presente che all'interno della tradizionale pipeline 3D, viene eseguito un Vertex Shader per ogni vertice della scena, ma un Pixel Shader per ciascun vertice e il numero di pixel per triangolo è solitamente maggiore di un ordine di grandezza. Ecco perché è importante escludere la geometria che non è visibile nella scena. Per questo vengono utilizzati due algoritmi:

  • Il primo rileva i vertici al di fuori del campo visivo del giocatore e si chiama View Frustum Culling.
  • Il secondo invece elimina quelli che sono all'interno del campo visivo, ma che sono nascosti da altri elementi più grandi e più vicini e si chiama Back Face Culling.

Ora, il processo di Culling può essere eseguito anche tramite una funzione fissa e ciò che fa è eliminare completamente i triangoli e anche gli oggetti non visibili. Ma cosa succede quando un oggetto è parzialmente visibile? Bene, a seconda di come è implementato l'hardware, non lo elimina o elimina completamente l'oggetto.

Che cos'è il motore di geometria in una GPU attuale?

Motore di geometria per ombreggiatura mesh LOD

Spiegati i problemi del Primitive Assembler e del Clipper, dobbiamo parlare di cosa è il Geometry Engine, che altro non è che un nuovo hardware che riunisce le stesse capacità del Primitive Assembler e del Clipper, ma con a Maggiore precisione. Poiché ha la capacità di eliminare la geometria superflua ma a livello di vertice. Ciò significa che se un oggetto è parzialmente fuori schermo o non completamente nascosto, ciò che fa è rimuovere i vertici non visibili e ricostruire solo la parte visibile.

L'altra utilità del Geometry Engine ha a che fare con la creazione nel livello di dettaglio degli oggetti nella scena, dove questi hanno diversi livelli di dettaglio, Levels of Detail o LOD in inglese, a seconda della distanza. Il motore di geometria ha la capacità di rimuovere in modo intelligente i vertici non visibili in base alla distanza e quindi mantenere la forma originale dell'oggetto. Pensalo come una tassellatura al contrario, dove invece di aumentare il numero di vertici per generare dettagli, quello che fai è diminuirli.

Questo è importante anche a fronte del problema dell'over-tessellation, bisogna tener conto che quando i vertici sono tassellati, la GPU non ha la prova della loro reale posizione nello spazio del frame, quindi finisce per verificarsi un problema che è l'eccessiva tassellazione. Che è che la GPU calcola più vertici in oggetti nella distanza che non si vedono, ma i cui dati sono lì. Il Geometry Engine avendo accesso alle informazioni della geometria della scena può facilmente eliminarle. Non dimentichiamo che il Clipper tradizionale rimuove solo ciò che è fuori dall'immagine o nascosto.

Il motore di geometria nella nuova pipeline DX12 Ultimate

DX12 Ultimo

Con DirectX 12 Ultimate, la parte della pipeline 3D prima della rasterizzazione cambia completamente, poiché buona parte delle funzioni passano dall'essere svolte tramite una funzione fissa a farlo nelle unità Shader della GPU. Ad esempio, la tassellatura raggiungerà un punto che cesserà di essere eseguita in un'unità a funzione fissa per passare a dette unità e quindi tale unità scomparirà.

Nel caso del Geometry Engine questo non scomparirà, ma è l'unico che ha accesso alle informazioni su come i vertici sono collegati tra loro. Qualsiasi algoritmo che implichi l'accesso all'elenco della geometria della scena significa dover passare attraverso il Geometry Engine, che è quello che controlla l'elenco dei vertici e le loro relazioni tra loro.

Guardando al futuro, una delle cose che vedremo sarà la creazione di strutture BVH per Ray Tracing dalla GPU, l'hardware che si evolverà per questo compito è il Geometry Engine. Che oggi ha accesso alla cache L2 della GPU, dove vengono archiviate temporaneamente le informazioni dei vertici. La quantità di memoria all'interno della GPU dovrebbe aumentare notevolmente negli anni successivi.