Doom3 - FarCry
Pag. 2 - Doom 3: tecnologia (1)
Questo titolo è legato alla storia della computer grafica per via del nome del capo progetto che ha portato alla creazione del gioco: stiamo parlando del celeberrimo John Carmack, creatore del primo motore di rendering su base OpenGL più usato negli scorsi anni, lo stesso alla base di QuakeIII Arena. Sempre confermando l'uso delle librerie grafiche OpenGL, John Carmack ha quindi rilasciato il 3 Agosto dello scorso anno (si dice dopo circa 4 anni di intenso lavoro), un motore grafico ricco di effetti che seguono strade diverse da quello che gli ultimi pixel shader ci hanno fatto vedere. Questo aspetto deve essere tenuto bene in considerazione al momento in cui si vanno a valutare i risultati prestazionali di Doom 3. L'OGSL (OpenGL Shader Language) ha visto la sua comparsa solo nello scorso anno, quando ormai lo sviluppo di Doom 3 era al termine, infatti i pochi effetti in stile shader di questo gioco sono stati scritti in ASM per consentirne la portabilità nel motore grafico.
La trama del gioco è basata sulle avventure di un marine che viene inviato su Marte, in era futura, al fine di risolvere una situazione ricca di strani fenomeni e tutte le persone che lo incontrano lo invitano ad andare via finchè in tempo. Il gioco procede con collusioni con mostri e zombie in scene molto scure e tetre. Chi si aspettava in Doom 3 di vedere paesaggi aperti in cui poter interagire è rimasto ampiamente deluso. Doom 3 fa degli spazi stretti e molto chiusi il suo principale ambiente di gioco, cose che lo rendono un titolo molto vicino a un film horror in cui ci si sente molto protagonisti. Non sarà raro, infatti, ricorrere alla torcia portatile vista la quasi assenza di luce, o essere aggrediti da un mostro subito dopo aver superato una porta, o aver paura di perdersi in percorsi chiusi che sembrano un labirinto. Questi sono gli elementi su cui si basa Doom 3.
Tornando alle caratteristiche tecnologiche del motore di rendering, vediamo quella che è la prima e più importante caratteristica del titolo: l'illuminazione dinamica. Il motivo per cui la sceneggiatura del gioco è fondata su ambienti stretti e chiusi è anche legata a questa scelta. Per fare in modo che una luce generi ombra in maniera attiva (cioè elaborata dalla GPU in tempo reale) è necessario che lo spazio a disposizione sia piccolo e che vi siano molti oggetti che generino ombre e zone scure. Lo stile horror viene quindi valorizzato dal desiderio di adoperare l'illuminazione dinamica in maniera parsimoniosa al fine di bilanciare il carico sulla scheda video.
Doom 3 fà anche uso di lightmap, quelle texture che vengono pre-renderizzate dalla casa madre e poi semplicemente sovrapposte a quelle principali in modo da creare zone di ombra (basti pensare ad Unreal Tournament per avere un'idea di quello di cui stiamo parlando). In questo modo si va a snellire il carico della GPU ma l'ombra generata è di tipo passivo, cioè non ha interazioni con l'ambiente esterno. Doom 3, invece, aggiunge a queste un uso massiccio dell'illuminazione dinamica: una lampada che oscilla appesa al soffitto (se ne trovano di diverse durante il procedere del gioco) crea ombre dinamiche che si muovono (per esempio sul pavimento) su un'intera superficie e se lanciassimo un oggetto nella zona del cono di luce, vedremmo generarsi anche la sua ombra.
Il carico di lavoro, in questi casi, è sicuramente degno di nota e a tal proposito Carmack e il suo team hanno ideato un motore di rendering che, mettendo da parte la gestione di ombre morbide, permettesse di godere di un ambiente di gioco quanto più realistico possibile. Questo è l'approccio delle "volume shadow" basato sull'utilizzo dello stencil buffer della scheda video. Anche il titolo X2 - The Threat utilizza in maniera massiccia lo stencil buffer ma in Doom 3 questo è stato portato al limite in quanto le ombre sono le principali protagoniste di questo gioco. In generale si prevede una prima passata di scrittura dei dati di profondità nello z-buffer, poi si disegna la luce ambientale e, quindi, una passata di rendering al fine di disegnare il cono d'ombra di ogni singola fonte luminosa. Questo significa che là dove non arriva luce vi deve essere la sola luce ambientale a dare un "tocco di luminosità". John Carmack ha deciso di cambiare approccio ed andare a renderizzare la scena partendo direttamente dallo z-buffer, così facendo, però, tutte le zone su cui non arriva l'azione diretta di una fonte luminosa sono nere ed, inoltre, ci si affida a queste al fine di generare qualsiasi fonte di luce all'interno della scena: nessuna luce ambientale attiva (solo passiva tramite le lightmap), ma solo luci dirette attive.