Come di consueto, si alternano Sotto la Scocca nati da conversazioni private o da notizie del momento ad altri presi dal pubblico. Questa volta tocca alla fisica ed alle interazioni ambientali, che tanto hanno stupito molti giocatori nell’ultimo Zelda, ma che sono in grado di aggiungere molto al gameplay da molti anni oramai, pensiamo al famoso Half-Life 2 e la sua Gravity Gun.
Per capire come funziona un motore fisico, bisogna prima capire come funziona la fisica del mondo reale. Quindi si, la migliore risposta a questa domanda è da ricercare nei libri di scuola, di fisica e matematica. Prendiamo la seconda legge di Newton, che viene spesso espressa come F=ma. A parole si può dire in tanti modo diversi, a me piace: l’accelerazione di un oggetto è direttamente proporzionale alla forza risultante agente su di esso ed inversamente proporzionale alla sua massa. Applicare questa formula in un videogioco è relativamente semplice. Basta assegnare ad un oggetto una massa, calcolare quali sono le forze risultati agenti su di esso ed in base al risultato, farlo accelerare in una direzione. A quel punto, basta calcolare la sua velocità e posizione e spostarlo nello spazio, disegnandolo nelle sue coordinate spaziali aggiornate.

Si tratta di assegnare i parametri necessari a tutti gli oggetti che voglio attivi e far eseguire i calcoli. La complessità di un motore fisico dipende in generale dall’accuratezza del calcolo e dal numero oggetti. Al modello basilare possiamo aggiungere la gravità, il calcolo delle collisioni, il calcolo del momento per le rotazioni, il ragdoll, effetti particellari e via dicendo. Più completo è un sistema fisico e più posso farlo “funzionare da solo”. Si parte in genere dalle equazioni classiche di Eulero, ma spesso per questioni di precisione si passa a modelli matematici più complessi, che sfruttano ad esempio i modelli di Runge-Kutta. Se c’è bisogno di molta potenza si cerca di trovare soluzioni ancora diverse. Precalcolare simulazioni fisiche complesse e renderle in game come momenti scriptati è una possibile soluzione. Altrimenti si cercano diversi modi di implementare la matematica, cercando un bilanciamento tra precisione e performance.
Con il tempo, diversi sistemi hanno avuto la necessità di intersecarsi per poter migliorare sia l’immersione del giocatore che il gameplay. Un esempio di sicuro è Star Wars the Force Unleashed, che combina un motore fisico come l’Havok con sistemi di animazioni procedurali di Euphoria per poter giocare liberamente con la telecinesi suoi nemici. Altri giochi che combinano così tanti elementi fisici e procedurali sono GTA V, May Payne 3 o il recente Zelda Breath of the Wild. I già citati Havok ed Euphoria si uniscono ai codici PhysX o DMM e tanti altri come programmi middleware, che offrono motori fisici da integrare nei propri progetti, senza dover creare tutto da 0.

Bisogna sempre ricordare però che il modello fisico di un videogioco non deve seguire per forza la realtà, ma può essere alterato a piacimento per creare uno specifico feel o un gameplay particolare. Un esempio direi abbastanza famoso è il salto di Mario. Un personaggio che salta è una simulazione fisica, si parla del classico moto del proiettile: alla pressione del tasto A, viene assegnata una velocità a Mario angolata di un certo numero di gradi e negli istanti di tempo successivi la sua posizione viene aggiornata. Quindi viene disegnato nella nuova posizione. Nel primo Super Mario la gravità non agisce subito sull’idraulico (oramai ex), ma il suo effetto si fa sentire subito dopo aver raggiunto il picco del salto. Non c’è nulla di realistico in ciò, ma è fondamentale per creare un feeling unico del personaggio.
Molte delle semplificazioni e trucchi usati in un gioco sono in genere sfruttati per migliorare la controllabilità del gameplay, per rendere più semplice il lavoro di costruzione del gioco, per ridurre consumo di risorse o anche per rendere un gioco più realistico. Un esempio possono essere i ragdoll di Halo 2. Il sistema ragdoll calcola i movimenti dello scheletro di un nemico dopo la sua morte, così da simularne la reazione al colpo dell’arma ed all’ambiente circostante. Una scarsa precisione può portare a momenti troppo buffi che possono rovinare l’atmosfera del gioco. Allo stesso tempo troppa precisione potrebbe richiedere un uso eccessivo del processore. In Halo 2 quindi sono state registrate numerose animazioni di morte, che venivano attivate se lo permetteva l’ambiente. In questo modo si manteneva il tono e le morti erano anche più realistiche.

Possiamo individuare in generale due usi per la simulazione fisica: gameplay ed estetica. Il primo uso è quello legato alla gestione delle collisioni ed all’interazione del mondo con le entità delle IA. Per questo è un processo generalmente gestito dalla CPU, che diventa il fattore limitante per la complessità fisica del mondo. Nel secondo caso, si parla invece di effetti particellari, simulazione detriti o effetti di fluidi avanzati. Il loro impatto sul gameplay è generalmente nullo, si tratta di un semplice orpello estetico, spesso composto da migliaia di piccole particelle da gestire in parallelo. Le GPU sono perfette per questo genere di lavoro. Cercare purtroppo di far gestire fisica importante per l’IA e la logica di gioco alla GPU creerebbe molti problemi di sincronizzazione tra i componenti, causando perdita di performance generali del sistema. Questi sono un po’ i limiti intorno ai quali lavorare.
Per quel che riguarda l’interazione ambientale, il problema principale non è tanto di disponibilità tecnologica, ma la richiesta di uno sforzo in fase di progettazione dell’intero gioco. In Ocarina of Time era già possibile prendere un bastone di legno, dargli fuoco, ed usarlo per accendere torce e bruciare ragnatele. Si tratta in genere di assegnare variabili di stato agli oggetti e modificarle in tempo reale seguendo delle regole. Tecnologie di propagazione del fuoco un po’ più complesse apparvero in Alone in the Dark del 2008 o in Far Cry 2. Ora prendete questa singola feature ed iniziate ad aggiungerne altre. Dalla semplice “acqua spegne il fuoco” a “particelle infiammabili esplodono se raggiunte da fiamme”. Bisogna creare un sistema di regole molto robusto, in grado di interagire senza problemi o bug e che possa interfacciarsi con gli altri sistemi di gioco.

Insomma, il motore fisico, come ogni elemento di un gioco, deve servire il gameplay e la visione del progetto. Oramai è una parte integrante di ogni singolo gioco. Dal movimento del pallone ai piedi dei giocatori di FIFA, alla simulazione della deportanza nei giochi di guida, al semplice salto di Mario. Un meccanismo che non cerca per forza il realismo spinto, ma che più di tutti si basa sulla matematica della realtà fisica che ci circonda. Si, il pallone di Fifa è simulato tenendo conto del coefficiente di resistenza aereodinamico. Come sempre per dubbi, domande o curiosità, sfruttate i commenti.