Breve storia del 3D Texturing nei videogiochi
Ryan Benno è un Senior Environment Artist e ha creato una discussione su Twitter per parlare brevemente della storia delle textures nei videogiochi 3D. Abbiamo deciso di tradurre, riadattare, e condividere questa breve storia anche in Italiano.
Se ne è stata fatta di strada dai tempi in cui si iniziò ad usare il 3D nelle prime console; ma ancora oggi, per creare textures nei videogiochi, si utilizzano pratiche che risalgono a quei giorni.
Iniziamo dalle basi, distinguendo Rendering in tempo reale (Real-time rendering) e prerender: due meccaniche solitamente usate per scopi diversi. Il Rendering in tempo reale viene usato dalla maggior parte dei giochi 3D; comporta che la vostra macchina si prenda in carico di calcolare e disegnare l’immagine, frame dopo frame. La possibilità del giocatore di interagire con le immagini nel gioco necessita di Rendering in tempo reale. Tutto ciò che è statico invece (ad esempio gli sfondi nella scena) può essere renderizzato in anticipo.
Meccaniche diverse che portano anche ad un diverso risultato in termini di qualità dell’immagine. Qui sotto la differenza tra uno sfondo (statico) e un personaggio (in tempo reale) in un gioco del 1999.
Usare prerender ci permette di fare un uso massiccio di grafiche di migliore qualità, che necessiterebbero altrimenti di diverse ore o persino giorni per essere renderizzate in un singolo frame. E un gioco, gira tra i 30 e 60 frames al secondo. Questa soluzione è stata molto usata nei primissimi giochi 3D.
Sulle console a 16bit, ad esempio, abbiamo Star Fox come uno dei primi esempi di 3D Render in tempo reale, mentre Donkey Kong Country utilizzava computer grafica pre-renderizzata (convertita poi in sprites dalla palette colori molto semplificata). Dovrà passare molto tempo prima che sia possibile raggiungere un risultato simile a quest’ultimo in tempo reale.
Con l’avvento delle prime “vere” consoles 3D come N64 o la Playstation, possiamo vedere i limiti del Render in tempo reale. Non era possibile usare luci per evocare ombre sulla scena, non vi era nessuna risposta “fisica” dai materiali, il bump mapping era assente, e ci si doveva limitare a geometrie semplici e textures in bassa risoluzione. Gli artisti hanno quindi dovuto trovare soluzioni per aggirare questi limiti.
Una soluzione fu quella di disegnare le informazioni della fonte di luce (ombre, highlights, profondità) direttamente sulle textures. Esse venivano disegnate sui vertici di uno o più triangoli. Non essendoci poi un modo di evocare (castare) una vera ombra a partire da una fonte di luce, l’ombra di un personaggio era anch’essa, solitamente, una semplice texture scura che seguiva il modello 3D.
Era teoricamente possibile ottenere delle ombre dai modelli 3D, ma queste erano comunque estremamente semplici e prive di reali informazioni sulla fonte luminosa. Se guardiamo a giochi come Zelda, Ocarina Of Time o Crash Bandicoot, questi utilizzavano moltissime informazioni disegnate manualmente nelle textures, o utilizzavano la tecnica dei triangoli per disegnare aree luminose, scure, o colorate nelle geometrie delle superfici.
Durante quegli anni è stato fatto molto lavoro creativo per superare i limiti tecnici. Alcune di quelle soluzioni, come quella di disegnare la luce nelle textures, vengono adottate anche oggi. Ma man mano che la potenza delle macchine aumenta, più migliora la capacità di calcolo per il rendering in tempo reale, e questi artifici vengono da meno.
La generazione successiva di consoles come Playstation 2, Xbox e Gamecube, proverà a fornire delle soluzioni in questa direzione. Il primo obiettivo fu infatti quello di cercare di migliorare notevolmente la risoluzione delle textures. Ma la più grande rivoluzione per la grafica dei videogiochi fu l’utilizzo di ombre renderizzate in tempo reale. La svolta avvenne verso il 2001 con giochi come Silent Hill 2.
Contemporaneamente, ogni gioco in quella generazione sviluppa textures dal maggior numero di pixel, si poteva ora aggiungere molto più dettaglio nelle superfici. Ma questo dettaglio restava comunque limitato al colore: non vi era ancora nessuna reale risposta fisica dei materiali all’illuminazione (riflessione, rifrazione, ecc…).
C’era un’altra ragione per cui il disegnare informazioni luminose nelle textures era ancora una pratica comune. Se nelle scene pre-renderizzate non era un problema riuscire a creare tessuti, vetro, capelli e pelle che sembrassero credibili, in tempo reale questo era ancora impossibile. Un qualche risultato si ottenne solo verso la fine della generazione, e solo su Xbox.
Specular Mapping e Normal Mapping sono due tecniche che vennero usate in giochi come Halo 2 o Doom 3. Lo Specular Mapping permette alle superfici di reagire alla luce similmente a come dovrebbero nel mondo reale (i metalli sono lucici, i muri opachi, ecc…). Il Normal Mapping permetteva di aggiungere dettaglio addizionale in superfici create da pochi poligoni.
Il Normal Mapping è una tecnica usata per simulare la complessità di un rilievo senza doverlo modellare in dettaglio. Permette alle superfici di reagire alla luce restituendoci più dettaglio rispetto a quello effettivamente usato nel modello poligonale. Con l’introduzione di questa tecnica, moltissimi artisti cambiarono il modo di lavorare: serviva ora molto meno tempo a creare un oggetto.
Se prima le textures erano disegnate a mano, estrapolate da fotografie in Photoshop, o una combinazione delle due, Con la Xbox 360 e la Playstation 3 questo modo di lavorare sparì, mentre la qualità degli oggetti aumentava di moltissimo grazie ad una risoluzione ancora maggiore.
Ci fu anche un netto miglioramento nella resa dei materiali, grazie alla tecnica del precomputed shading, un altra rivoluzione per moltissimi artisti. I materiali potevano ora essere molto più complessi.
Un ulteriore aiuto all’illuminazione delle scene arrivò anche dall’Ambient Occlusion, che permetteva di ricreare ombre indirette dalle luci in scena. Anche in questo caso però l’effetto era troppo dispendioso in tempo e risorse per poterlo renderizzare in tempo reale, quindi gli artisti aggiunsero nuovamente l’effetto alle loro textures.
Anche al giorno d’oggi l’Ambient Occlusion non è al 100% renderizzabile in tempo reale e si continua a usare textures con l’effetto “disegnato” sopra, ma rispetto a 10 anni fa ci sono stati molti passi avanti con l’uso del SSAO (Screen Space Ambient Occlusion) o il DFAO (Distance Field Ambient Occlusion). Ci siamo quasi!
Per riassumere, nella generazione delle Playstation 3 e Xbox 360 abbiamo conquistato, insieme ad una maggiore risoluzione, anche un modo per creare delle textures realistiche calcolandone le ombre in tempo reale. All’occasione si poteva comunque ancora disegnarne a mano i dettagli.
Tutto quasi perfetto. Anche se i modelli erano ancora in bassa risoluzione e c’erano un sacco di problemi coi nuovi shader. Un altro problema avveniva a livello di Specular Mapping. In quegli anni si usava solo una mappa per definire quanto “blillante” fosse un oggetto, e questo era ovviamente limitante perché i materiali non sembravano ancora realistici. Alcuni artisti allora iniziarono a separare la mappatura in due tipi differenti: uno per il tipo di materiale (legno, oro, cemento…) e uno per lo “stato” del materiale (nuovo, graffiato, macchiato…). Questo coincise anche con un nuovo tipo di shading, il PBR (Physically Based Rendering).
Questo ci porta ai giorni nostri. La tecnica del PBR venne resa popolare dalla Pixar e divenne uno standard su moltissimi giochi, creando di fatto il modo di rendere credibili materiali generati in Computer Graphic, e soprattutto in tempo reale.
In aggiunta, l’industria iniziò ad usare in modo massiccio processi come il Tone Mapping o il Color Grading, o per capirci meglio gli effetti di filtro. Qualcosa che nelle generazioni precedenti sarebbe costata anni per il fatto di dover ridisegnare ogni texture.
Per concludere, qui un esempio sul tipo di textures con cui era necessario lavorare agli albori dei videogiochi 3D, e la loro resa finale, paragonate alle textures contemporanee. Pretty cool, right?
Traduzione e riadattamento by The Casual Gamer. I Tweet originali della storia sono disponibili sul profilo ufficiale di Ryan Benno, ringrazio anche The Rookies, da dove abbiamo inizialmente trovato questa breve storia.
Davvero molto interessante e approfondito.