F.E.A.R è stato, e forse è ancora uno dei punti più alti in termini di qualità dell’intelligenza artificiale di un videogioco, ma se già nel 2005 eravamo a questo livello, perché l’IA non pare essere progredita nei giochi - almeno mediamente - quanto lo ha fatto ad esempio la grafica?
Non esiste una risposta univoca a questa domanda, ma in questo articolo cercheremo di analizzare l'IA di alcuni titoli, provando a capire almeno alcune delle motivazioni che rendono ancora oggi l’intelligenza artificiale uno degli aspetti più complicati da creare e gestire per una software house.
Uno dei primi esempi di IA in un “videogioco” compare nel 1951 con Nimrod, un computer dalle modeste dimensioni di 3.7x2.7 metri in grado di sfruttare la propria potenza di calcolo per sconfiggere avversari umani a “Nim”, un gioco di strategia matematica che è stato risolto per tutte le sue combinazioni iniziali. Com’è ovvio che sia sono proprio la potenza di calcolo di un computer e la possibilità di “risolvere” matematicamente un problema, gli elementi che danno un sostanziale vantaggio all’intelligenza artificiale nell’ambito dei videogiochi.
Se da una parte abbiamo giochi strategici a turni dove un computer può “facilmente” dominare, basti pensare a Deep Blue per gli scacchi, dall’altra con il progredire dell’industria del videogioco ci troviamo di fronte a titoli che non sembrano prestarsi bene al "classico" modello di intelligenza artificiale, basti pensare al già citato F.E.A.R dove il numero di situazioni possibili è praticamente infinito. Come fa in questo caso un’IA a vincere sempre? La risposta giusta è che l’IA in un videogioco non vuole vincere sempre, ma vuole offrire un livello di sfida “giusto” al giocatore
Se volessimo un’IA che batte sempre il giocatore ci basterebbe sfruttare un po’ di machine learning per lasciare che il programma impari come giocare simulando un altissimo numero di partite in un tempo relativamente breve. Un esempio di ciò è OpenAI Five, un team di bot in grado di giocare in maniera più che competitiva al MOBA DOTA 2. Nel caso di OpenAI Five troviamo però già dei limiti imposti dai programmatori, come ad esempio tempi di reazione limitati per essere comparabili a quelli di un giocatore umano.
Il segreto di una buona IA non è quindi nello sfruttamento brutale e insensato del proprio potenziale, ma in un bilanciamento che riesca a renderla quanto più simile possibile ad un avversario umano. Per F.E.A.R i programmatori hanno sfruttato principalmente tre tipologie di intelligenze artificiali, le prime due sono particolarmente utilizzate nell'ambito dei videogiochi, trattasi di FSM e A*.
Finite-State Machines
Una Finite-State Machine, detta in italiano “automa a stati finiti” è un tipo di automa che lavora con un pre-determinato numero di stati, e che può trovarsi in un certo momento in uno di essi, cambiando a seconda delle condizioni al contorno. Nella realtà siamo circondati da automi a stati finiti, basti pensare ad esempio ad un carrello della spesa, esso - in particolare il suo lucchetto - può avere due stati: con una moneta inserita e sbloccato, senza una moneta inserita e bloccato. All’interno dei videogiochi le FSM sono presenti in maniera massiccia, aumentando il numero di stati e le condizioni per i quali la macchina passa da uno stato ad un altro, si può creare un sistema molto complesso, che se ben strutturato potrebbe far sembrare al giocatore di avere a che fare con qualcosa di “reale”.
Tra i principali vantaggi di questo modello di automa abbiamo la sua semplicità di implementazione, tra gli svantaggi però abbiamo che FSM di grande complessità diventano molto difficili da gestire (almeno a livello concettuale). Per programmare un'IA tramite FSM dobbiamo avere cura di capire quali sono tutti gli stati nei quali vogliamo che il nostro oggetto possa trovarsi, altra cosa fondamentale è scegliere bene gli "switch" che facciano passare la macchina da uno stato all'altro. Se da una parte il concetto è molto semplice, dall'altra esso si traduce in un numero molto alto di stati intercambiabili che vanno gestiti in maniera precisa.
Un cambio di stato mal gestito è facilmente notabile: basti pensare a NPC che passano dall'aver visto un potenziale intruso al chiaccherare di tutt'altro nel giro di pochi istanti.
A* algorithm
Altro fondamentale algoritmo (e non solo per i videogiochi) che viene utilizzato nelle IA è l’A-star search algorithm, un modello matematico di scelta di percorso che riesce a trovare un “sentiero” tra due punti sia efficace facendoci arrivare alla fine del percorso, ma anche efficiente, ovvero che riesca a farci spostare tramite il percorso più breve.
L’algoritmo A-star funziona essendo un modello matematico “informato”, che non si limita a prendere in considerazione solamente il primo tratto di percorso per muoversi tra un punto e l’altro, ma che “pondera” anche gli step successivi calcolando la somma dei costi necessari a muoverci. È facile intuire che il percorso migliore (quello più breve) tra due punti, deve tenere conto di ogni tratto percorso stesso: suddividendo il mondo di gioco in "nodi", l'algoritmo di pathfinding cerca il percorso migliore possibile valutando vari step, in modo da non incorrere in errori che gli facciano considerare migliore un percorso più lungo che ha come unico vantaggio quello di avere un tratto iniziale più breve.
Come nasce e si sviluppa l'IA di F.E.A.R.
Come dichiarano gli sviluppatori alla GDC del 2006, “Ci piacerebbe darci una pacca sulle spalle da soli e parlare di quanto sono intelligenti le nostre I.A., ma la verità è che l’unica cosa che fanno sono andare in giro e fare partire delle animazioni!”.
La complessità dell’IA di F.E.A.R arriva dunque da un’altra parte, ed in particolare dal decidere quando passare da uno stato all’altro. Gli sviluppatori di F.E.A.R scelgono quindi di affiancare all’automa a stati finiti un sistema di planning: con planning si intende semplicemente una serie di azioni che hanno lo scopo di portare ad un determinato obiettivo.
Il sistema di F.E.A.R utilizza un algoritmo di planning molto simile allo STRIPS Planning, sviluppato dall’Università di Stanford nel 1970. All’IA vengono presentati uno “stato del mondo” ed un obiettivo: a seconda delle condizioni “del mondo” l’IA sceglie quindi la strada più logica per raggiungere il proprio obiettivo. Nel caso di questo gioco l’obiettivo è quello di eliminare un pericolo (il giocatore), per farlo l’IA può sparare, ma solo se la sua arma è carica, se è scarica allora può usare un attacco ravvicinato, ma deve essere in prossimità del suo nemico ecc. Ecco come con un sistema di condizioni e un obiettivo, prende forma la diabolica IA di F.E.A.R
Tramite una serie di obiettivi ben studiati (uccidere il giocatore, preservare la propria vita, mettersi in copertura ecc.) e una serie di azioni (attacca, muoviti, ricarica) l’IA di F.E.A.R si sviluppa attraverso una serie di layer che le permettono di essere incredibilmente complessa, ma anche facilmente gestibile.
Per creare un nuovo tipo di nemico gli sviluppatori non devono fare altro che mettere assieme azioni ed obiettivi esistenti. Tra gli incredibili pregi dell’IA di F.E.A.R c’è anche il Dynamic Problem Solving: l’IA è in grado di utilizzare la conoscenza acquisita nel perseguire un obiettivo per risolvere un problema. In poche parole se una strategia non funziona, si cambia strategia.
Come se ciò non bastasse, il sistema di Monolith è in grado di eseguire azioni di squadra e far comunicare il team di nemici in maniera realistica, creando di fatto una delle IA più interessanti e complesse che i videogiocatori si sono mai ritrovati ad affrontare.
Se siete pratici con l’inglese e volete approfondire il discorso, trovate la relazione completa presentata alla GDC del 2006 a questo indirizzo.
Hivemind, Alien: Isolation e la sua doppia IA
Alien: Isolation è un survival horror del 2014 basato sulla saga di Alien che ci mette negli sfortunati panni di Amanda Ripley, figlia della protagonista della pellicola cinematografica di Ridley Scott. Lodato per la sua atmosfera claustrofobica, il titolo sviluppato da Creative Assembly risulta molto interessante anche sotto il punto di vista dell’intelligenza artificiale, ed in particolare di quella dello Xenomorfo che ci tampina durante il gioco.
Come spiega Andy Bray di CA durante la nucl.ai conference, non ha senso che il giocatore sia sempre spaventato e si senta sempre impotente: bisogna trovare un bilanciamento nel sistema. Questo ci riporta al discorso iniziale: il segreto di una buona IA non è nella “forza bruta”, ma nell’essere quanto più simile possibile a qualcosa che il giocatore possa percepire come vero.
Lo xenomorfo di Isolation diventa quindi un pericolo sempre presente, in grado di creare problemi in ogni momento del gioco. Se infatti un evento scriptato (ovvero preparato ad-hoc) può funzionare la prima volta, già durante la seconda partita perde di effetto, qualcosa che il giocatore non può prevedere è qualcosa che lo rende spaventato, e come da tradizione per la saga di Alien, crea una forte e costante tensione.
Creative Assembly decide quindi di creare due intelligenze artificiali distinte che collaborano tra loro: quella dell’Alien stesso e una conosciuta come “Direttore”.
Il direttore è un tipo di intelligenza che i programmatori stessi definiscono “macro-IA”, e che si occupa di suggerire all’Alien stesso quali sono le mosse da fare. Il direttore conosce infatti in ogni momento la posizione del giocatore, ed è in grado di dire allo xenomorfo quale sia la zona giusta nella quale cercare. Attenzione però: l’IA non è in grado di barare dicendo allo Xenomorfo il punto esatto in cui ci troviamo, ma può solo - come già detto - suggerire una zona. Il giocatore è quindi padrone del suo destino, lo Xenomorfo è sì intelligente, ed è sì in grado di trovarlo sempre, ma il giocatore è ancora più intelligente (si spera!) ed ha sempre la possibilità di salvarsi, anche se per il rotto della cuffia.
L’IA direttrice però non può limitiarsi a suggerire una zona “valida” allo Xenomorfo, ma deve anche capire quando è il momento giusto di "attivare" il mostro. Un sistema conosciuto come “menace gauge”, che potremmo brutalmente tradurre come “indicatore della minaccia” permette all’IA di capire quando è il momento di ritirarsi. I tre elementi che fanno riempire l’indicatore della minaccia sono: la distanza in metri tra il mostro e il giocatore, la line of sight tra il giocatore e il mostro (in sostanza se siamo in grado di vedere lo Xenomorfo o meno) e l’effettiva possibilità del mostro di raggiungerci tramite un percorso valido.
Quando l’indicatore della minaccia per un motivo o per l’altro si riempie troppo, la nostra macro-IA fa ritirare lo Xenomorfo, in modo da dare al giocatore un po’ di respiro. È proprio così che funziona infatti il sistema di CA: al giocatore vengono dati costantemente picchi di tensione intervallati da momenti di relativa calma, che vengono sfruttati per procedere con la storia. Minimizzare gli errori, pianificare gli spostamenti ed evitare di sbattere pentole e coperchi mentre giriamo per la stazione spaziale ci permette di massimizzare il “downtime” dello Xenomorfo, ma non c’è modo di evitare che prima o poi riesca ad arrivare a qualche passo da noi. A quel punto meglio nascondersi e trattenere il fiato.
Se il direttore da una pacca sulla spalla allo Xenomorfo e gli dice “prova un po’ a cercare in quella zona”, il lavoro sporco deve proprio farlo il mostro di H. R. Giger, cercando di stanare il giocatore nascosto nell’ennesimo armadietto.
Il comportamento del mostro è dettato da un’IA con schema ad albero classico, composta da un centinaio di nodi che ne gestiscono ogni aspetto: dai movimenti effettuati alle zone in cui cercarci. All’inizio del gioco alcuni di essi sono bloccati, e vengono aperti solamente in determinate condizioni: a volte esse sono dettate direttamente dal gioco, mentre altre volte vengono “create” dal giocatore stesso. Un esempio tipico è lo Xenomorfo che vi cerca se nascosti in un armadietto: le prime volte che ci nasconderemo lì saremo relativamente al sicuro, ma se abuseremo di questa tecnica il nodo che permette al mostro di cercarci all’interno degli armadietti verrà sbloccato.
Grazie a questo “trucco” si avrà la sensazione che lo Xenomorfo, con il tempo, impari e si adatti al nostro stile di gioco. Vista la non banale difficoltà del titolo, Creative Assembly ha deciso di evitare che l’IA possa migliorare tramite eventi che conducono alla morte del giocatore: Isolation è un titolo creato per farci sudare sette camice ed è scontato si possa morire più e più volte (soprattutto la prima volta che si gioca), se l’intelligenza artificiale diventasse più forte dopo ogni nostro fallimento, probabilmente completare il titolo ci richiederebbe uno sforzo disumano.
Lo Xenomorfo è dotato di sensi specifici, ed è in grado di percepire con precisione variabile i rumori generati dal giocatore: passi, spari e addirittura - se abbastanza vicino - il sensore di movimento usato per individuarlo. Oltre ad avere - letteralmente - un paio d’occhi sul retro della testa (tuttavia poco sensibili) per evitare di farsi fregare troppo facilmente, il mitico mostro esibisce pattern di movimento non ottimali. Cosa significa questo? Che una volta arrivato in una zona di interesse comincerà a cercarci, tornando a volte suoi suoi passi e muovendosi in maniera molto più realistica di quanto non lo farebbe un’IA programmata semplicemente per esplorare ogni punto tramite il percorso più rapido possibile… Ricordate l’algoritmo A*, no?
Tra le curiosità più interessanti che riguardano la gestione dell’intelligenza artificiale troviamo le seguenti:
- Lo Xenomorfo possiede ben 4 diversi “coni di visione”, ovvero l’area entro la quale è in grado di vedere il giocatore, e che lavorano assieme per rendere il mostro immune da eventuali punti ciechi nel suo campo visivo;
- A seconda della difficoltà di gioco i sensi del mostro sono notevolmente migliorati, oltre a questo la durata della modalità “backstage” (quando lo Xenomorfo si trova nei condotti di ventilazione) è drasticamente ridotta;
- Se la creatura percepisce un suono “interessante”, come ad esempio uno sparo, entra in modalità stalk, che disattiva ogni possibilità di farlo tornare nei condotti di ventilazione. La modalità stalk crea un’area di interesse attorno al giocatore, via via sempre più piccola ad ogni successivo innesco della modalità stessa;
- Sempre parlando della modalità stalking, l’area di interesse non è sempre circolare, ma può anche avere la forma di una “ciambella” creando una sorta di area di grazia nella quale lo Xenomorfo non esibirà interesse. Tipicamente attorno al punto che vogliamo raggiungere per proseguire con la storia;
- Un'IA di tipo "direttrice" era già stata usata in Left 4 Dead;
I nodi che gestiscono il comportamento dello Xenomorfo permettono quindi di dare vita ad una creatura intelligente, in grado di simulare un comportamento incredibilmente realistico, e dare vita ad un’esperienza di gioco incredibilmente intensa, senza ricorrere allo scripting. Alien: Isolation riesce ad essere diverso ogni volta che lo si gioca di nuovo, e risulta uno degli sforzi più interessanti nel campo dell’IA dei videogiochi degli ultimi anni.
You've got a friend in me: The Lamb of Columbia
2013, il terzo capitolo della saga di BioShock arriva sugli scaffali: il titolo è un enorme successo di pubblico e critica. Lasciata alle spalle (o no?) la buona vecchia Rapture dei primi due capitoli, ci ritroviamo sulla città volante di Columbia, luogo in cui facciamo la conoscenza della co-protagonista del titolo: Elizabeth.
Se avete ancora gli incubi per tutti i problemi causati da Ashley in Resident Evil 4, e in generale da tutti i personaggi non giocanti ai quali dobbiamo fare da scorta, non preoccupatevi: l’intelligenza artificiale di Elizabeth è sicuramente un passo in avanti nella giusta direzione.
Ad occuparsi della creazione di Elizabeth è stato un vero e proprio team nel team all’interno di 2K Games. Uno dei problemi principali degli NPC che seguono il giocatore, deriva solitamente dalla frustrazione che lo stesso prova nel constatarne la stupidità: incastrati nei muri, dispersi in qualche corridoio o ancor peggio pronti ad allertare per errore qualche nemico. In BioShock: Infinite Elizabeth deve risultare un personaggio non solamente “utile”, ma anche uno al quale il giocatore sia in grado di affezionarsi e di empatizzare.
Come catturare la scena?
Il primo principio sul quale il team fa affidamento è del tutto teatrale: Elizabeth deve essere (quasi) sempre al centro della scena, in modo tale che il giocatore possa osservarla in ogni momento, senza però sentirsi obbligato ad rallentare per farlo. Per fare ciò tra il punto zero (il giocatore) ed il proprio obiettivo corrente (facile da stabilire vista la linearità del titolo) viene creata una zona all’interno della quale la protagonista è libera di muoversi e di interagire con gli elementi presenti nel mondo.
Mano a mano che il giocatore si avvicina al proprio obiettivo, la zona libera si restringe, rendendo di fatto impossibile ad Elizabeth creare un’eccessiva distrazione o rallentare troppo l’azione.
Il team colloca poi in maniera sistematica nel mondo di gioco dei “punti di interesse”, sostanzialmente dei trigger che permettono ad Elizabeth di interagire con oggetti, osservare elementi di gioco o compiere azioni particolari. Alcune di queste azioni possono essere ripetute svariate volte, altre invece hanno un conteggio fisso in modo da non diventare ridondanti, altri ancora sono definitivi momenti d’oro e vengono attivati una ed una sola volta nell’intera partita.
Il combattimento
Durante il combattimento la regola del “catturare la scena” va infranta: non vogliamo che Liz sia al centro dell’attenzione, o ancor peggio nella nostra linea di fuoco. Gli sviluppatori decidono quindi di muovere Elizabeth in una posizione sicura, riuscendo però a renderla comunque partecipe dello scontro tramite alcune particolari meccaniche.
Se da una parte il giocatore non deve - come specificato dal gioco - preoccuparsi di Liz durante il combattimento, dall’altra è proprio la co-protagonista a preoccuparsi del giocatore quando ingaggia una battaglia: capiterà spesso infatti che durante uno scontro Elizabeth ci lanci oggetti utili (armi e munizioni ad esempio), in modo da rendere la nostra vita un po’ più semplice.
Liz è un NPC che in battaglia cerca di non darci fastidio, ma di aiutarci, stando fondamentalmente “fuori dalle scatole” fino a quando non può rivelarsi veramente utile, la verità però è che pur essendo molto ben realizzata, quella di Elizabeth non è una vera e propria intelligenza artificiale, ma una serie di script ponderati per creare una co-protagonista presente, ma non invadente.
BioShock: Infinite non investe in maniera particolare sull’IA della co-protagonista, quanto nella gestione della sua presenza rispetto al giocatore: sempre nel punto giusto quando deve, mai nel posto sbagliato durante un combattimento. Ovviamente il sistema di “punti di interesse” realizzato dal team potrebbe essere - almeno concettualmente - assimilabile a quello di una macchina a stati finiti, dove l’input viene dato dalla presenza del punto di interesse, e l’output da un’animazione (disgusto per il fumo di sigaretta, interesse per un quadro, paura per aver visto qualcosa di pericoloso ecc.), ma nonostante ciò la vera impresa di 2K in questo caso è l’aver realizzato un personaggio con il quale è facile empatizzare e che quasi mai genera frustrazione, con una spesa in termini di IA praticamente nulla.
Conclusioni
Abbiamo analizzato tre sistemi di IA diversi, realizzati in diversi periodi, ma dobbiamo ancora rispondere alla domanda iniziale: perché l’IA è uno degli elementi che sembra fare più fatica a migliorare nei videogiochi?
La verità è che se elementi quali la grafica vengono spinti in maniera brutale dalla potenza di calcolo pura (sarebbe relativamente facile far girare un gioco fotorealistico, avendo abbastanza potenza di calcolo), un elemento complesso come l’IA è sempre vincolato all’esperienza di chi la realizza: non è possibile creare una buona intelligenza artificiale senza avere una profonda conoscenza del titolo al quale si sta lavorando, mentre è più semplice realizzare delle texture in alta risoluzione, pur non sapendo nulla del gameplay di un gioco.
Il tempo necessario per creare un’IA complessa come quella di Alien: Isolation è ben sfruttato solamente se il titolo ne fa poi buon uso. Come abbiamo visto la semplicità di BioShock: Infinite ha pagato bene tanto quanto lo hanno fatto la complessità di F.E.A.R e Isolation.