C'è una cosa di cui non riusciamo a fare a meno di parlare da almeno due anni: l'intelligenza artificiale. Dentro ogni videogioco che si rispetti c'è una parte di intelligenza artificiale, certo! Abbiamo degli NPC che si muovono e che interagiscono con noi, per cui direi che la domanda non si pone nemmeno.
Poi, però, c'è un secondo passaggio che in molti (troppi) fanno: associare il concetto di intelligenza artificiale generale (e generativa, ammesso di chiarire cosa sia veramente) con l'intelligenza artificiale che c'è nei videogiochi. Dopo parecchie discussioni sul tema, ho deciso di scriverne qui; e vi do ufficialmente una pessima notizia.
L’AI dentro un videogioco non ha quasi nulla a che fare con l’intelligenza artificiale di cui oggi tutti parlano.
Ne avevo già scritto su Techprincess tempo fa; oggi vedremo che dal punto di vista dello sviluppatore ci sono ottime ragioni per cui è così.
Brevissima storia dell’intelligenza artificiale
Di intelligenza artificiale si parla da relativamente poco in pubblico, da quando ChatGPT è uscito allo scoperto e l'AI generativa è diventata la condizione necessaria per fondare una startup. In realtà, il concetto è molto vecchio; in informatica se ne parla da circa 70 anni; in matematica da molto di più, già qualche secolo.
Limitiamoci all'informatica. Abbiamo iniziato negli anni '50 con grandi aspettative, ma gli scienziati erano privi degli strumenti concettuali giusti, per cui la cosa si è arenata all'inizio degli anni '70 e abbiamo messo tutto nel cassetto. Anzi, nel congelatore, perché tutti parlano di "primo inverno dell'AI".
Negli anni '80 siamo ripartiti, visto che nel frattempo avevamo scoperto le reti neurali e il machine learning, per cui di nuovo grandi aspettative. Dopo pochi anni, però, abbiamo sbattuto il naso contro un muro molto duro: al mondo non c'era abbastanza capacità di calcolo per fare tutto quello che serviva. Per cui, tutto di nuovo nel congelatore per il "secondo inverno dell'AI”
Siamo ripartiti, per la terza volta (che speriamo sia quella giusta), a metà degli anni 2000 perché sul mercato erano arrivate le GPU che offrono un paradigma di calcolo molto più più performante e i grossi data center iniziavano a essere una realtà.
E da qui, quello che è successo dopo, lo sapete anche voi.
Cosa è l’intelligenza artificiale?
Domanda semplice che trova tante risposte diverse a seconda se lo poniamo a un ingegnere, un filosofo o un informatico. Facendo una mediazione a me piace riassumere un po’ così:
La realizzazione in software di processi con cui un essere senziente percepisce l’ambiente attorno a se e prende delle decisioni.
E, se ci pensiamo bene, questa definizione si adatta anche al nostro caso. In un FPS, per esempio, un NPC osserva l'ambiente per vedere se c'è dell'attività e, in caso affermativo, decide se sparare o meno.
Il problema è che l'intelligenza artificiale classica (chiamiamola così d'ora in poi) cerca sempre di ottenere il miglior risultato possibile, con la massima precisione e nel modo più ottimizzato.
Ebbene, se lo facessimo anche nei videogiochi sarebbe un autentico DISASTRO per due motivi, anche piuttosto banali.
Primo motivo: l’esperienza utente
Questo è un esempio che faccio molto spesso a lezione.
Immaginiamo di voler costruire un'IA per un cecchino. Quanto è difficile costruire un agente che, a chilometri di distanza, con poca luce e vento forte, centra il giocatore in mezzo agli occhi al primo colpo?
Pochissimo!
Si tratta di un calcolo balistico, che è poi un'equazione di secondo grado. Oppure un sistema di due equazioni se vogliamo essere sofisticati.
Chi giocherebbe a questo gioco?
Nessuno!
Siamo onesti. Chi di noi giocherebbe mai a un gioco stealth in cui appena mettiamo fuori la testa per guardarci attorno siamo morti all'istante? (Se state pensando a lui 🐍 ... tranquilli, ne parlo tra un attimo).
Il giocatore non ha bisogno del cecchino perfetto; vuole sentire l’adrenalina quando vede il fucile puntato verso di lui, il fischio del proiettile che sfiora la sua testa e la soddisfazione di aver evitato per un pelo la morte. E poi, muovendosi furtivamente tra le ombre, far perdere le sue tracce.
In altre parole, il cecchino ideale è quello che sbaglia, che fallisce il colpo, che spara in ritardo e alla fine dimentica dove si trovava la sua preda.
Tutte situazioni che un’intelligenza artificiale classica, progettata per essere perfezione, non può riprodurre.
Ne troppo intelligenti, ma neppure troppo stupidi
Come se non fosse già abbastanza complicato creare delle intelligenze artificiali 'stupide', c'è anche bisogno che non siano troppo stupide e che evolvano nel tempo per fare in modo che il giocatore continui a divertirsi.
Progredendo nei livelli, il giocatore diventa inevitabilmente più bravo. Per cui, i nemici e gli amici devono diventare più bravi insieme a lui. Altrimenti il gioco diventerà banale e il giocatore si annoierà. I game designer usano l'espressione “mantenere il giocatore nel flusso”.
Quindi, riassumendo. Gli NPC non possono essere troppo forti, altrimenti il gioco diventa frustrante e il giocatore potrebbe smettere di giocare. Allo stesso modo, non possono essere troppo deboli, perché il gioco rischia di diventare noioso. Inoltre, la percezione di "troppo forte" o "troppo debole" è soggettiva e varia nel tempo, in base all'abilità del giocatore.
Questi sono aspetti che l'intelligenza artificiale classica non è in grado di gestire. Perché non è progettata per modulare dinamicamente le proprie prestazioni. Se un'IA sa eseguire un'azione, la eseguirà sempre al meglio delle sue possibilità.
In qualità di sviluppatori, dobbiamo quindi ideare meccanismi per regolare il livello di sfida offerto dall'IA. Effettuare poi la taratura dipende dal gioco e dal contesto specifico e tipicamente non è un problema di chi sviluppa. Se ne dovrebbe occupare il game designer.
Adesso, però, fermatevi un attimo e pensate a quanti giochi avete abbandonato solo perché gli NPC erano troppo forti o troppo stupidi. Anzi, scriveteli sotto in un commento, così che potremo commentarli insieme.
Intanto vi lascio qui i miei nomi: Dark Souls come troppo difficile (anche se ho paura ci sia una questione di miei riflessi) e Army of Two per gli NPC (anche quelli alleati) troppo stupidi. Menzione speciale per Gears of War 3 perché gli NPC alleati erano troppo forti e mi hanno tolto il gusto del gioco; così tanto che ho smesso di giocare anche il resto della serie.
Il vecchio cecchino
L'esempio del cecchino che non sbaglia mai è calzante per parlare di "The End" (the Ancient Sniper), uno dei personaggi più iconici di Metal Gear Solid 3: Snake Eater.
Senza addentrarci troppo nel personaggio, la situazione è la seguente: Snake si ritrova in una foresta braccato da questo cecchino praticamente infallibile. Ogni minimo movimento può essere fatale. La frustrazione del giocatore è altissima. E, come i vecchi fan sanno molto bene, Hideo Kojima (il designer del gioco) mette spesso alla prova i giocatori in modi imprevedibili.
In questo caso, però, c'era una precisa scelta di design alla base. Kojima voleva rendere il cecchino invincibile per stressare il giocatore e spingerlo a trovare una soluzione alternativa, che non fosse semplicemente sparare. I modi per sconfiggere The End, che io ricordi, sono tre, uno dei quali è davvero geniale. Il gioco è del 2004, quindi è un segreto di pulcinella, ma non ho intenzione lo stesso di fare spoiler 😁!
Secondo motivo: le prestazioni
Gli algoritmi e i metodi classici di intelligenza artificiale hanno un “piccolo” difetto: assumono di avere a disposizione tutto il tempo del mondo e tutta la capacità computazionale di cui hanno bisogno.
Per noi non sarà mai così!
Perché l'AI in un videogioco deve rispondere velocemente; altrimenti l'esperienza utente ne risente. In più, il PC/Console ha anche un sacco di altre cose importanti da fare, per cui la CPU non sarà mai tutta a nostra disposizione.
Generalmente, se lavoriamo in uno studio medio-grande, ci viene assegnato un budget di risorse. Ci vengono dati un tot (pochi) di MB di memoria e al massimo potremo usare una frazione (molto piccola) della CPU.
Quindi? Che si fa?
Buttiamo nel cestino le tecniche avanzate e raffinate di AI e facciamo delle approssimazioni; usiamo delle euristiche. Perché se no non rimarremo mai nel budget che ci è stato assegnato.
Però questo potrebbe non essere davvero un problema, perché ricordatevi sempre una cosa molto importante.
La complessità sta nella testa del giocatore!
Possiamo usare il sistema più semplice del mondo, ma se riusciamo a “ingannare” il giocatore, per cui questo penserà che il comportamento dell'NPC è intelligente... allora l'NPC sarà (abbastanza) intelligente.
Prendiamo un classico: Pac-Man della Namco. Il modo di "ragionare" dei fantasmi è più o meno il seguente: per 20 secondi si dirigono verso la posizione del giocatore e poi per 5 o 7 secondi si muovono totalmente a caso. In più, ognuno di loro va a una velocità leggermente diversa. Personalmente, non la chiamerei neppure intelligenza artificiale. Quando giochiamo, però, non vediamo tutto questo: a noi sembra davvero che i fantasmi abbiano una loro strategia. Per chi ha voglia di scendere nei dettagli, c'è una interessante discussione su gameinternals.com.
Il nostro obiettivo, quindi, diventa quello di costruire un NPC che si comporti in maniera credibile (errori inclusi) rispetto alla percezione del giocatore. Se ci pensate, questo discorso si sposa molto bene anche con la discussione fatta prima sull'esperienza utente. Se usiamo un'euristica avremo un comportamento imperfetto che produrrà anche degli errori, e gli errori sono molto umani.
Le AI possono convivere?
Possiamo, all'occorrenza, usare sistemi di AI classica all'interno dei giochi?
Sì e no. Nel senso che possiamo renderli funzionali ai videogiochi, ma è meglio tenerli esterni. Al momento, viste le risorse e il tempo necessari al calcolo, è preferibile non farli partecipare troppo all'esperienza utente. Ci sono tuttavia alcune sperimentazioni in atto. Vi faccio vedere, ad esempio, il trailer della tesi di laurea di Margherita Orlando, che si è laureata come me lo scorso anno.
Margherita ha realizzato il prototipo di un gioco investigativo in cui i dialoghi con i personaggi non giocanti (NPC) erano generati esternamente da ChatGPT. L'ostacolo principale che abbiamo incontrato è stato, banalmente, il costo. Il gioco usava un numero variabile di crediti e la differenza in base alla versione di ChatGPT era evidente. All'epoca, completare una partita con la penultima versione di ChatGPT richiedeva tra i 30 e i 50 centesimi di euro. Utilizzando l'ultima versione, che offriva dialoghi di qualità nettamente superiore, il consumo saliva a quasi 10 euro.
Personalmente, trovo inquietante l'idea di un futuro in cui la qualità dell'intelligenza artificiale degli NPC, in particolare degli alleati, finisce dietro un paywall.
A proposito, per chi fosse interessato, la tesi è stata un successo e ora Margherita lavora come Quest Designer presso Nacon Studio Milano.
Progettati per essere stupidi
Ed eccoci tornati al sottotitolo.
La mia personale opinione è che progettare un sistema di AI per un videogioco è più difficile che non farlo in ambito tradizionale. Deve sbagliare, ma non deve sbagliare troppo. Bisogna dare l'impressione che si impegni, ma alla fine deve lasciarci vincere. Provateci, e credo che mi darete ragione.
Volete fare una prova? Prendete un sistema di generazione di immagini e chiedetegli di fare l'immagine di una formula sbagliata (tipo la copertina di oggi) e vediamo quanto ci mettete. Perché Gemini, ChatGPT e compagnia briscola, quando vanno in allucinazione fanno un bel casino, ma sono "convinti" di dire la cosa giusta. Ma se gli chiedete di sbagliare apposta … di quello non sono capaci. Perché non sono stati progettati per essere stupidi (e forse è meglio così).
… e il prossimo che vi dice che per programmare videogiochi basta essere bravi con la grafica, mandatelo pure da me!
Per questa settimana è tutto, appuntamento come al solito tra sette giorni. Parleremo nuovamente di profili professionali. E se volete ricevere questa newsletter direttamente in casella, basta usare il pulsante qui sotto.
Happy hacking!