Tessellation

Le API OpenGL 3 riescono solo a rincorrere la concorrenza di Microsoft, che però ha già fatto sapere molto sulle DirectX 11. A meno di novità spettacolari, sulle quali è lecito dubitare, è probabile che le API Microsoft diventeranno l'unico riferimento. Vediamo che cosa è lecito aspettarsi, per l'anno prossimo.

Avatar di Tom's Hardware

a cura di Tom's Hardware

Tessellation

La nuova e principale caratteristica delle Direct3D 10 è stata l'apparizione del Geometry Shader, che ha finalmente reso possibile la creazione e la distruzione di vertici direttamente sulla GPU. Le potenzialità di questa nuova unità, però, sono state, in un certo senso, mal interpretate : invece di sfruttarla per espandere massicciamente la geometria, è stata utilizzata per implementare Point Sprites più flessibili, la gestione del Fur Shading o il calcolo della silhouette di un oggetto per algoritmi di ombre volumetriche. Stiamo parlando del processo di Tesseletation, vale a dire dividere un'area in settori, o aree, più piccole, da gestire poi singolarmente, un po' come un mosaico. Questo è uno dei primi passaggi dell'elaborazione grafica 3D, che consiste nel dividere la superficie di un oggetto in molti poligoni, solitamente triangoli o quadrilateri, adatti al tipo di calcolo eseguito, e più facili da gestire. L'area così suddivisa, poi, permette di gestire con più efficacia effetti grafici, luci e ombre. Per la tesselation, però, niente è meglio che un'unità dedicata, introdotta appunto con le DirectX 11. Inizialmente pianificata per le Direct3D 10 (motivo che spiega la sua presenza nelle serie Radeon HD), sembra che Microsoft, ATI e nVidia non siano state in grado di raggiungere un accordo in tempo, ed è quindi sparita dalle specifiche, per tornare invece nelle Direct3D 11. Quindi, la tessellation è la nuova e importante caratteristica delle Direct3D 11 - o almeno la più semplice da vedere per i non specialisti.

Per gestire la tesselation, Microsoft ha introdotto tre nuovi stadi nella sua pipeline di rendering :

Diversamente dagli altri stadi della pipeline, questi usano patch, come elementi minimi, e non i classici triangoli, aumentando il livello di dettagli possibili. La superficie viene divisa in elementi minimi, delimitati da punti, detti "punti di controllo". Questi "scampoli" di superficie, e i punti che li delimitano, sono il punto di partenza per l'elaborazione della superficie. L'Hull Shader usa come input i punti di controllo di una patch, e determina alcuni dei parametri del Tesseletor, come per esempio il TessFactor, che indica grado e dimensione della tesselation. A questo punto il patch originale è ulteriormente diviso, nell'Hull Shader, prima del processo di tesselation vero e proprio, come vedremo più avanti.

Il Tesselator, a sua volta, è un'unità a funzione fissa, sulla quale il programmatore non ha controllo: la tessellation, quindi, è calcolata in maniera indipendente, mentre il programmatore è intervenuto a monte. L'unità invia i punti generati al Domain Shader, che può applicare altre operazioni. Un esempio dovrebbe chiarire meglio: prendiamo il caso del Displacement Mapping, cioè la possibilità di riprodurre in tempo reale le modifiche alla collocazione dei vari punti di una texture. Una funzionalità relativamente recente, nelle schede grafiche da gioco.

Come input al vertex shader, abbiamo i punti di controllo del patch, che il programmatore può manipolare, poiché non sono numerosi in quanto, semplificando, si tratta di una porzione ridottissima, e grezza, della trama finale. Questi punti, trasformati, sono poi passati all'Hull Shader, che determina quante volte deve suddividere, ulteriormente, ogni lato del patch (per esempio, come funzione della dimensione, in pixel, del patch sul display); poi il Tessellator gestisce la tessellation. Fatto questo, si passa alla creazione della geometria, che viene passata al Domain Shader. Questo trasforma i punti generati nello spazio appropriato (i punti che escono dal Tessellator sono all'interno del patch originale), producendo i classici vertici che vengono posizionati come funzioni di una texture, e finalmente eseguire il Displacement Mapping.

Riassumendo, a grandissime linee, ecco quello che succede

  • Il programmatore divide la superficie in porzioni, dette "patch"
  • Ogni patch è delimitata da punti di controllo, che il programmatore può maneggiare
  • I punti di controllo vengono manipolati dal vertex shader
  • L'hull shader esamina i punti di controllo, e determina i parametri della tesselation
  • Si applica la tesselation, nell'unità dedicata
  • Il Domain Shader unisce le informazioni del Tesselator a quelle prodotte dall'Hull Shader, applicando i calcoli all'intera superficie, a partire dal singolo patch.

Il potenziale è enorme. Con la tessellation si può lavorare senza normal map, e implementare il livello di dettaglio direttamente sulla GPU, permettendo un livello di dettaglio molto più elevato di quello attuale (diversi milioni di poligoni, anziché 10000 o poco più, come negli attuali giochi), almeno in teoria. In pratica, il tessellation porta a galla alcuni problemi che hanno impedito a questa tecnica d'imporsi, per molti anni. Può una scheda Direct3D 11 supplire a questi problemi e offrire una versione funzionale? È troppo presto per dirlo, ma in ogni caso non tutti sono convinti, tanto che.iD Software sta lavorando per risolvere lo stesso problema di geometria con un approccio completamente differente, basato sul ray casting con voxels.

👋 Partecipa alla discussione! Scopri le ultime novità che abbiamo riservato per te!

0 Commenti

⚠️ Stai commentando come Ospite. Vuoi accedere?


Questa funzionalità è attualmente in beta, se trovi qualche errore segnalacelo.