Speciale Havok Engine

Fisica al confine con la realtà!

Speciale Havok Engine
Articolo a cura di

Una nuova stella

Havok rappresenta quella che si definisce una vera rivoluzione, o se meglio preferite, una svolta, che cambiò per sempre il nostro modo di giocare.
Per chi fosse completamente all’oscuro di questo evento ed a cui il nome citato in apertura non evochi a memoria assolutamente niente, possiamo riassumere brevemente il concetto in poche semplice parole: Havok è il tocco di realismo nei videogiochi.
La sua prima comparsa fu nei lontani primi mesi del 2004, insieme ad un capolavoro che porta il nome di The Fall of Max Payne, e dal quel momento la storia dei videogiochi è stata riscritta, e questa volta seguendo le leggi della fisica.
Perché di fatto, l’Havok altro non è che un programma che simula il comportamento di corpi, inteso nel suo senso più ampio, all’interno di un videogioco; data tale definizione così limitativa e poco corretta nei confronti del responsabile delle meraviglie che hanno accompagnato titoli di prima classe, quali Half Life 2, Painkiller, Age of Empire 3 e tanti altri, passiamo a descrivere questo complesso programma più nel dettaglio.
Innanzitutto, la definizione corretta di Havok non è tanto di "programma", quanto di codice modulare adattabile ad altri programmi attraverso l’uso di piattaforme di sviluppo comuni, che in caso videoludico sono rappresentante dalle vetuste Direct X e dalle abusate API di Microsoft ( Application Program Interface, ovvero un insieme di protocolli, routines e strumenti per facilitare lo sviluppo di programmi ).
Il sistema Havok rientra quindi in quella categoria di programmi definiti Middleware, ovvero software il cui codice viene inserito in quello di altre applicazioni, col fine di migliorare o integrare questi ultimi.
La ragione per cui nacque l’Havok è piuttosto evidente: sempre più sviluppatori di videogiochi cercano di raggiungere lo standard attuale posto dalle punte di diamante del genere, per evitare di risultare obsoleti o, ancora peggio, noiosi e poco appetibili per i videogiocatori; è risaputo che la soluzione di programmare ex novo una qualche componente del gioco, come un motore grafico o quello fisico, richiede enormi costi e tempi di lavorazione lunghissimi, che spesso le software house più piccole non possono affrontare: la soluzione risiede così nell’acquistare soluzioni già realizzate da altri ( Quake Engine docet ) per poi semplicemente apportarvi delle modifiche per migliorarlo o comunque adattarlo al gioco in via di sviluppo. Questo spiega quindi il successo di motori grafici quale l’ Unreal Engine o quelli di Quake 3 Arena, che hanno visto la loro applicazioni in moltissimi giochi, non solo prodotti da Epic o da ID, ma da moltissime altre case che hanno acquistato il codice dai loro sviluppatori.
Ecco quindi spiegata sia la nascita dell’ Havok, sia il successo che è riuscito ad ottenere in brevissimo tempo: una volta provata l’inebriante esperienza di veder reagire gli oggetti circostanti in maniera realistica durante le nostre partite a Max Payne 2, i videogiocatori hanno letteralmente imposto alle software house di integrare un motore fisico degno in ogni loro futuro titolo.

Tradizioni dure a morire

Per comprendere il funzionamento dell’Havok è necessario introdurre il concetto di Ragdoll: dietro questa parola si nasconde un sistema di animazioni procedurali che vanno a sostituire le vecchie animazioni statiche dei personaggi; di per sé un ragdoll è un insieme di corpi rigidi, come ad esempio testa, avambraccio, spalle, ognuno dei quali è collegato ad un “osso” disegnato dai programmatori, uniti insieme da un sistema di vincoli che definisco di quanto questi ossi devono muoversi in relazioni agli altri.
Semplicificando, il ragdoll altro non è che lo scheletro dei modelli multimediali, che tenta di simulare la struttura ossea ( estremamente semplificata ovviamente ) del corpo umano.
Imponendo di conseguenza al giunto testa-collo una rotazione sui tre assi ( sistema assiale XYZ ) non superiore ai 90°, otterremo una serie infinita di animazioni, ma nessuna delle quali farà assumere alla testa una posizione innaturale, e di conseguenza non vedrete mai, durante una partita, una faccia rivolta all’indietro di 180°, poiché violerebbe il limite da noi stabilito.
Ovviamente, una volta realizzato il modello, è necessario provvedere alla sua animazione, durante la quale verranno definite una serie di linee guida in base ai parametri definiti in precedenza, per poi provvedere al calcolo di tutte le possibili pose concesse, quali rotazione, torsione, piegamenti e rimbalzi, assumibili dal modello, a seconda dell’intensità e del tipo delle forze che intervengono a generare l’animazione.
Proprio a questo punto entra in gioco l’Havok: anziché costringere i programmatori a prevedere ogni possibile posizione assumibile da un modello, un sistema fisico avanzato potrebbe semplicemente calcolare in tempo reale migliaia di animazioni diverse, simulando una fisica prossima a quella del nostro mondo, seguendo linee guida generali: la parte relativamente difficile consiste nell’impostare correttamente i giusti limiti per evitare di far assumere al modello ( o parti di esso ) posizioni innaturali, come accadeva purtroppo in titoli quali Raven Shield.

Come se non bastasse...

A complicare la situazione vanno ad aggiungersi, alle migliaia di animazioni possibili, anche leggi fisiche di una certa rilevanza nel nostro mondo, quali la gravità, l’attrito e molte altre ancora: programmare una serie infinita di animazioni, per poi veder un modello fluttuare a mezz’aria causa una mala gestione del coefficiente gravitazione, sarebbe decisamente sconfortante.
L’Havok, sotto questo punto di vista, si struttura in una maniera al quanto singolare: ogni solido gestito dal sistema viene identificato da due importanti fattori legati alla sua superficie, vale a dire l’attrito e l’elasticità: immaginate una fascia di assi di legno che cadono da un certa altezza; queste, causa l’elevatissimo coefficiente di attrito e lo scarso valore di elasticità, tenderanno a rimanere in una struttura poco dispersa, formando di conseguenza una figura chiusa sul pavimento.
Se invece si considerano delle assi di altro materiale, quali ad esempio ( per assurdo ) di ghiaccio, queste tenderanno a scivolare sulla superficie, visto il valore quasi nullo di attrito, generando una figura completamente diversa
La situazione si complica nel caso si voglia prendere in considerazione un’azione semplice, come quello di una pallina che rimbalza contro un muro: in questo caso andrà considerato sia il valore di elasticità, combinato con quello del muro colpito, sommando poi i valori di traiettoria, effetto e velocità; com’è saputo, la traiettoria è influenzata dall’angolo di incidenza e di conseguenza, le reazioni possibili sono milioni, e tutte non sarebbero prevedibili ( e scriptabili ) dai programmatori.
Di conseguenza gli effetti fisici generati da Havok non sono né scriptati né animati in precedenza: ogni azione e conseguente reazione viene calcolata in tempo reale esattamente quando avviene, tenendo conto di una lista lunghissima di fattori, primi tra tutti quelli elencati precedentemente.
Per concludere, portiamo l’esempio di un sistema di azioni e reazione piuttosto complesso: immaginate un corpo che venga scagliato contro una finestra, come era possibile vedere, per esempio, in Half Life 2: in questo caso è necessario combinare perfettamente il sistema fisico del modello durante il volo verso la finestra, sottoporlo quindi alle leggi di gravità, traiettoria e velocità, unendo successivamente l’animazioni delle varie giunture ( previste nel ragdoll ) al momento dell’impatto con i vari coefficienti di rottura, attrito e resistenza, per poi terminare con l’animazione dell’impatto del modello con la superficie e conseguente spostamento secondo le già citate leggi fisiche: questo esempio serve per darvi l’idea di quanto sia complesso programmare oggigiorno un videogioco soddisfacente, e delle centinaia e centinaia di possibili azioni che i programmatori devono prevedere, per evitare spiacevoli sorprese ai giocatori.

L’evoluzione di una specie

Dal lontano 1998 sono stati compiuti innumerevoli progressi, sia nel campo della tecnologia a disposizione, sia in campo di pura potenza dell’hardware: i programmatori di Havok mirano principalmente a rendere il loro motore fisico compatibile con tutti i sistemi di giochi attualmente disponibili, ed è per questo che usano come piattaforma di sviluppo di riferimento il sorpassato processore della Playstation 2: se un sistema da loro programmato è in grado di funzionare perfettamente senza appesantire troppo la cpu di questa console, si comporterà egregiamente anche sulle altre piattaforme.
Grazie ai continui successi di critica e specialmente economici, la Havok è riuscita a portare a termine una serie di motori fisici che vedremo impegnati nei giochi di prossima generazione: probabilmente il più diffuso sarà Havok FX™, che sfruttando l’azione combinata degli attuali velocissimi processori e GPU, sarà in grado di estendere la gestione fisica ad effetti quali fumo, liquidi e schegge, portando ad un livello di realismo mai immaginato i nostri titoli del futuro.
Questo, da una parte promette miracoli fisici, ma dall’altra obbligherà i giocatori ( a meno che non si voglia rinunciare a questi effetti ) a munirsi di schede grafiche compatibili con i Shader Model 3.0.
La ragione per cui Havok ha deciso di puntare tutto su quest’ultima versione di shader è essenzialmente dovuta alla sua elevatissima flessibilità e programmabilità, che permette l’impiego sia di interfacce standard, quali DirectX e OpenGL, sia di linguaggi di programmazione dedicate alle Gpu, come HLSL e Cg.
Questo significa quindi che un giocatore dovrà necessariamente munirsi di una Nvidia serie 7X o Ati serie 1X per poter sfruttare al meglio tali risorse, visto che attualmente sono le uniche in grado di calcolare in tempo reale la collisione di circa 1000 corpi solidi, cifra che rappresenterà lo standard dell’ Havok FX™
Oltre all’ FX, i programmatori di Havok hanno quasi portato a termine una tecnologia in grado di sfruttare appieno la potenza dei nuovi processori dual core: questa tecnica, chiamata HydraCore™, verrà inclusa in tutti i sistemi Havok, permettendo ai programmatori di assegnare e rimuovere a piacimento una vasta gamma di operazioni fisiche, come ad esempio la simulazione fisica all’interno di mondi completamente dinamici e distruttibili (tentativo simile, ma molto più limitato, già effettuato dal GeoMod Engine, che animò i mediocri Red Faction) e la possibilità di suddividere le operazioni più pesanti in una serie di sotto compiti a cui vengono attribuite della priorità in base alla situazione corrente: immaginate di colpire un bicchiere pieno d’acqua posto sopra un muro: la priorità di questa azione verrà assegnata al simulazione realistica del movimento del bicchiere, mentre passerà in secondo piano la sua animazione nel caso cada al di là del muro, in quanto non sarà visibile dal giocatore, il che si traduce in una riduzione notevole dei compiti della cpu e gpu.
Oltre a queste due tecnologie, Havok comunque assicura il continuo sviluppo e miglioramento della sua punta di diamante, l’Havok Complete™, giunto alla versione 2.0, che racchiude al suo interno sia il motore fisico, sia l’SDK (Software Development Kit) per le animazioni.

Havok Engine Havok ha completamente rivisto il modo di giocare dal 2004 in avanti, ponendo un nuovo metro di valutazione, oramai divenuto fondamentale: la fisica. L'estrema importanza che oggigiorno ricopre un motore fisico all'interno di un gioco lascia ben sperare che questa florida azienda non deluda nel prossimo futuro. Restiamo in attesa di vedere una demo delle prossime tecnologie con cui ci diletteremo.