Come funziona la tassellatura hardware?


34

Vorrei solo che qualcuno spiegasse in termini relativamente chiari come funziona la tassellatura hardware considerando che è la nuova parola d'ordine con DX11.

Grazie.

Risposte:


42

Ti darò la versione "semplice" e lascia che qualcun altro ti inserisca nei dettagli se sei interessato :).

Esistono fondamentalmente due modi per modellare oggetti 3D. Il primo è uno di cui non si vede molto nei giochi e prevede l'utilizzo di curve precise e matematicamente definite per definire la forma di un oggetto. Usando questo metodo, il livello di dettaglio è (praticamente parlando) "infinito". Prendi un cilindro per esempio. Un cilindro può essere definito in termini matematici molto semplici: tutto ciò che devi veramente sapere è il raggio alle estremità e la lunghezza del cilindro. In termini di geometria, questa informazione è tutto ciò di cui abbiamo bisogno per rendere il cilindro in una scena 3D. Inoltre, possiamo facilmente ridimensionare il cilindro per renderlo più grande o più piccolo; tutto ciò che dobbiamo fare è mantenere il rapporto tra la lunghezza e il raggio. Possiamo usare le stesse formule per rappresentare la geometria, ma con parametri diversi. Possiamo rappresentare un toro ("ciambella" forma) anche facilmente: dobbiamo semplicemente conoscere il raggio interno e il raggio esterno. Da ciò, possiamo calcolare il diametro (e quindi il raggio) del corpo della ciambella (la "torta") sottraendo il raggio interno dal raggio esterno. Il corpo circolare si avvolge lungo l'arco definito dal raggio interno. Questo tipo di definizione 3D è utile perché è relativamente semplice (risultante in un piccolo file di modello) e non esiste un limite significativo al livello di dettaglio. L'aspetto negativo è che l'hardware video di oggi non è progettato per elaborare in modo efficiente questi tipi di modelli (se non del tutto). Il corpo circolare si avvolge lungo l'arco definito dal raggio interno. Questo tipo di definizione 3D è utile perché è relativamente semplice (risultante in un piccolo file di modello) e non esiste un limite significativo al livello di dettaglio. L'aspetto negativo è che l'hardware video di oggi non è progettato per elaborare in modo efficiente questi tipi di modelli (se non del tutto). Il corpo circolare si avvolge lungo l'arco definito dal raggio interno. Questo tipo di definizione 3D è utile perché è relativamente semplice (risultante in un piccolo file modello) e non esiste un limite significativo al livello di dettaglio. L'aspetto negativo è che l'hardware video di oggi non è progettato per elaborare in modo efficiente questi tipi di modelli (se non del tutto).

L'altro modo è combinare una geometria semplice per approssimare la forma che vogliamo rappresentare. Lo facciamo con un processo chiamato tessellation . Potremmo tessellare un cilindro scomponendolo in forme più primitive: due cerchi e una serie di lunghi rettangoli, che avvolgono il bordo esterno. I cerchi possono essere ulteriormente suddivisi in molti piccoli triangoli, così come i rettangoli lungo il bordo. Il risultato finale è un modello composto solo da triangoli:

Immagine del cilindro triangolato

Oppure, per il toro:

Immagine di Triangular Torus

La buona notizia è che l'hardware video è ottimizzato per gestire questo tipo di geometria. Le GPU di oggi non hanno problemi a sfornare tonnellate e tonnellate di triangoli ogni secondo. Tuttavia, c'è un ovvio problema: stiamo provando a rappresentare le superfici curve usando forme che hanno bordi piatti. Affinché il nostro cilindro assomigli ad un cilindro (al contrario di un cubo), vogliamo scomporlo in a saccodi piccoli triangoli. Bene, quanti ne vogliamo? Dipende. Che tipo di hardware verrà utilizzato per il rendering della scena? L'hardware più veloce può rendere i triangoli più velocemente dell'hardware più lento, producendo frame rate più veloci. Ci sono altri fattori da considerare, come quanti altri oggetti saranno presenti nella scena e quanto saranno complessi? Nei giochi, in genere ci sono molti oggetti in una determinata scena. Inoltre, gli oggetti possono viaggiare attraverso scene diverse, ognuna con diversi livelli di complessità visiva. È difficile capire il livello di dettaglio da usare quando tesselliamo i nostri modelli.

Un altro problema è quello della complessità geometrica: mentre una definizione basata su curve di un cilindro è molto semplice (raggio e lunghezza), una definizione tassellata probabilmente combina centinaia di triangoli, ognuno dei quali deve essere definito in modo indipendente. Di conseguenza, il nostro file modello tassellato sarà molto, molto più grande. Diciamo che abbiamo un modello matematicamente definito di qualcosa di complesso, come una persona. Il nostro file modello può avere una dimensione di soli 24 kb. Bene, una volta che quel modello è tassellato, il file risultante potrebbe essere 24mb (24.000kb). Questa è una bella differenza.

La tassellatura hardware sfrutta gli shader della geometria per eseguire tessellazioni assistite dall'hardware in tempo reale (o quasi in tempo reale). In sostanza, fornisce un meccanismo per prendere un modello 3D definito matematicamente e trasformarlo in un formato tassellato che la scheda video può rendere in modo efficiente. Tradizionalmente, gli sviluppatori di giochi hanno eseguito la tassellatura in studio e hanno spedito i modelli tassellati con il gioco. La tassellatura hardware ci consente di rinviare questo processo fino a quando il gioco è effettivamente in esecuzione sul computer del giocatore. Questo ha alcuni seri vantaggi:

  1. La dimensione del contenuto 3D del gioco diminuisce drasticamente (meno dischi o download più piccoli e meno spazio sul disco rigido richiesto).

  2. Siamo in grado di controllare il livello di dettaglio in tempo reale . Stiamo correndo su una bestia all'avanguardia di una macchina da gioco? In tal caso, possiamo tessellate utilizzando un livello di dettaglio molto elevato. Stiamo correndo su un vecchio laptop con grafica integrata? Nessun problema; possiamo semplicemente ridurre il livello di dettaglio per migliorare le prestazioni.

Quindi è questo il senso. Probabilmente non è preciso al 100%, poiché non sono un programmatore 3D, ma ciò dovrebbe darti un'idea migliore di tutto ciò che riguarda il clamore :).

Saluti,
Mike


Wow ... geniale! La 'panoramica' più lunga che abbia mai letto: P

6
C'è un'altra cosa che determina il livello di tassellatura richiesto: la dimensione dell'oggetto sullo schermo. La tassellatura di runtime consente di avere il livello di dettaglio corretto ovunque, senza creare più versioni di ciascun oggetto.
Adamo,

È un po 'pesante la CPU?
jcora,

@Bane, intendevi intensivo per la GPU? Alla CPU potrebbe importare di meno.
Nate Zaugg,

0

Peccato che non sia il modo in cui la maggior parte degli sviluppatori utilizza la tassellatura ora o nel prossimo futuro. Tutto ciò che usano tess per ora è spostare superfici prevalentemente piane secondo la sua mappa di altezza. Ciò si traduce anche in un bell'aspetto, ma penso ancora che sia un cattivo uso di tecnologia molto più capace.


Gli strumenti e le condutture di produzione devono essere ripensati e ricostruiti (come sono sicuro che tu sappia meglio della maggior parte, @SamHocevar, quindi questo commento non è rivolto a te) e il nuovo hardware deve proliferare in percentuale significativa.
Rob Craig,

@RobCraig Nota che ho appena corretto l'ortografia in quel commento; Non sono l'autore originale.
Sam Hocevar,

@SamHocevar Sì, ho pensato - grazie per il chiarimento, però!
Rob Craig,
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.