Systèmes pour des IA non-combattantes GDC19 - En Bref
Exploiter les systèmes de décisions des IA pour améliorer l'immersion et les situations émergentes dans le contexte du jeu.
Parmi la pléthore de jeux commerciaux qui arrivent sur le marché, une tendance est claire : ce que l’on voit le plus, c’est du combat. La conception d’IA est bien souvent tournée vers le comportement des ennemis qui feront fasse aux joueurs et joueuses. Cette conférence fait un pas de côté en explorant des utilisations d’IA hors situation de combat. Beaucoup de conférences sur ce sujet proviennent de développeurs sur la série “Les Sims”. Et malheureusement, le ‘gameplay’ des Sims est bien particulier, et peut difficilement se mélanger avec différents genres. C’est pourquoi je vous conseille de lire cette publication en vous concentrant, non pas sur l’application des exemples, depuis “Les Sims” à votre jeu, mais sur la compréhension des systèmes à l’aide des exemples, pour imaginer de nouvelles façons d’améliorer les comportements non-combattants, si vous faites un jeu qui diversifie les approches.
Source
GDC2019 | 18 - 22 mars 2019
David “Rez” Graham : Programmeur IA sur la série “Les Sims“ ; A majoritairement travaillé sur de nombreux systèmes hors combat : simulations, figurants, etc.
Sommaire
Introduction
Dans “Pillars of Eternity”(2015), les personnages non-joueurs (PNJ) figurants ne réagissent pas aux combats qui se déroulent parfois juste à côté d’eux. Ils vont simplement jouer leur animation ‘idle’. Pourtant, le jeu a un système de réputation poussé pour le personnage joueur, joueuse (PJ). Par exemple, on peut être considéré “bienveillant” par les PNJ d’un lieu particulier, car on les a aidés par le passé. Et si les PNJ aux alentours, voyant qu’on se fait attaquer, réagissaient pour aider quelqu’un de “bienveillant” en difficulté ? Ne serait-ce pas cool ?!1
On pourrait se demander pourquoi on ne met pas en place ce genre d’interaction plus souvent dans les jeux. David “Rez” répond par une anecdote : un jour, un producteur lui a posé la question : “Pourquoi est-ce que les IA dans “The Sims 4”(2014) sont plus coûteuses en temps de production que celles de “Battlefield 4”(2014) ?”
Parce que mes personnages [sur les “Sims 4”] sont présent à l’écran sur un temps long, et doivent bien rendre, car les joueurs et joueuses les regardes constamment. Alors que sur “Battlefield“, ils [les personnages] ne sont présent que pour quelques secondes [le temps d’être tiré dessus].
- David “Rez” Graham
C’est une des principales leçons à retenir. Si vous voulez des personnages figurants riches et profonds, vous devez vous préparer à en payer le prix.
Cette contrepartie est le principal obstacle qui ralentit l’évolution d’AI non-combattantes dans les jeux. Après tout, le plus efficace est de dépenser le temps de production sur le cœur du jeu (l’activité que les joueurs et joueuses feront le plus souvent) pour rentabiliser la valeur ajoutée que l’ont créée. C’est pourquoi je crois que les innovations dans ce domaine viendront des jeux qui n’incorporent pas de combat dans leur cœur de jeu.
La suite de cette conférence présente une myriade de différentes techniques, et comment elles sont assemblées pour former des PNJ figurants. L’important n’est pas de simuler la réalité2, de créer des comportements complexes. Le but est de créer des situations immersives et intéressantes à jouer.
‘Utility AI’
Dans la poursuite de comportements nuancés chez ses PNJ, David “Rez” se tourne vers l’utilisation de systèmes utilitaires. Aussi appelés ‘utility systems’ ou ‘utility AI’.
L’’utility AI’ est un processus de prise de décision, qui évalue différentes actions à disposition du PNJ, fondé sur leur utilité dans l’instant présent.
Basiquement, chaque action a un score d’utilité attribué, qui évolue en fonction des circonstances et de paramètres desdites actions. Et, le système choisit l’une des actions avec le plus haut score comme étant la plus bénéfique à effectuer pour le PNJ. Cela permet de créer des réactions dynamiques, non limité par des protocoles linéaires.
Le conférencier ne rentre pas dans les détails du système. Si vous voulez creuser le sujet, je vous mets des références3 à disposition (exclusivement en anglais).
Ce système peut être utilisé pour donner des comportements émergeant, qui vont offrir cet aspect magique d’un récit qui s’adapte aux actions des joueurs et joueuses.
1. Statistiques et besoins
Attacher des statistiques aux PNJ permet d’avoir de multiples éléments qui vont influencer les calculs d’utilité, comme : leurs compétences, leurs relations, etc.
Ou des jauges à remplir, qui se traduisent par des besoins, comme : la faim, l’hygiène, la socialisation, la sécurité d’une ville, le bonheur des habitants, etc. Qui changent l’objectif que souhaite atteindre le système de décision.
Toutes ces valeurs qui peuvent changer ou décliner, peuvent s’attacher à des personnes, des objets ou des concepts.
2. Étiquettes
Un système d’étiquettes (ou ‘Tags’) peuvent également diriger les décisions.
Par exemple, être un “glouton” ou “rat de bibliothèque” permet d’avoir un score plus élevé sur les actions “lecture” ou “manger“. Cela ne veut pas dire qu’elles seront choisies par défaut, mais qu’elles auront tendance à être choisi plus souvent.
C’est ce genre d’impulsion qui permet de donner une direction et du caractère aux PNJ. On peut aussi penser aux ‘buffs’ de combat, qui sont similaires.
3. Aléatoire
Le conférencier pense qu’il est important d’ajouter de l’aléatoire dans la sélection des meilleures actions, déduit par le système utilitaire, car cela permet d’éviter un résultat trop déterministe, et donc prévisible. Et donne l’opportunité à des coïncidences bienvenues.
Exemple
Dans “Les Sims 4”(2014) : “Il envoie son Sims se lier d’amitié avec quelqu’un. Étant un rat de bibliothèque, le Sims parle de livres. Plus tard, le Sims invite son nouvel ami chez lui et va lire sur le canapé. Son ami se met à côté de lui et va également lire.” En tant que joueur, il a trouvé cela super que les deux Sims aient choisi de lire des livres ensemble après avoir (probablement) discuté d’une saga qu’ils adorent tous les deux.
Évidemment, cette anecdote est le fruit du narratif que s’est construit le conférencier fasse à une série d’évènements. Ce qui est réellement arrivé : le Sims en a eu marre de socialiser et a voulu satisfaire son besoin en “amusement”. L’IA a calculé les actions qui peuvent satisfaire ce besoin et il avait 50% de chance de choisir de lire. Son ami avait seulement 25% de chance de lire, mais l’aspect aléatoire a permis à cet évènement d’advenir.
4. Relations
Si nous avons un ensemble de personnages, ce que nous voulons faire c’est créer un écosystème d’entités qui existent dans ce monde. Ces personnages savent ce qu’ils ressentent à propos de quelqu’un, pas nécessairement l’inverse.
Par exemple : si vous ne m’aimez pas trop, mais moi, je vous adore ; je risque de vous suivre partout comme un chiot. Si on s’adore tous les deux, on va vouloir se parler. Si on se déteste tous les deux, on peut très bien imaginer vouloir se confronter l’un l’autre plutôt que de s’éviter. Cela peut entrainer des situations intéressantes. Tout comme avoir conscience de la propriété d’un objet : ma chaise, ma guitare, etc.
Dans l’exemple précédent, peu importe si l’ami Sims eu choisi de lire ou non, il aurait probablement essayé de s’assoir à côté de mon Sims pour son activité, car ils sont amis.
Assemblage
Ce que nous essayons de faire, c’est relier toutes ces différentes pièces ensemble pour créer quelque chose de plus que la somme de ses parties. Aménager un terrain fertile pour des comportements émergents.
1. Niveau de détails
En créant une simulation étendue, il faut prendre en compte le niveau de détail que l’on traite moment après moment.
Une façon de faire est de faire de la planification statistique. Si l’on utilise des courbes d’utilités ou de mesures, on peut observer une tendance des comportements (dans le temps) des personnages ou éléments, et l’utiliser.
Par exemple, si une ville est en déclin, que les joueurs et joueuses décident s’en éloigner jusqu’à ce qu’elle soit en faible niveau de détail, alors cette ville va probablement continuer de décliner. On peut prédire et utiliser cette tendance pour actualiser l’état du monde et récupérer ces informations au moment de re-simuler la ville à niveau de détail poussé, quand les joueurs et joueuses seront de nouveau proches.
Autre exemple, dans les Sims : Si un Sims est en faible niveau de détail, alors son modèle 3D n’est pas affiché. Et, lorsque l’on a besoin de le faire apparaître, la simulation récupère les informations d’activités du Sims, lié à l’heure de la journée, pour actualiser ses vêtements, lieu et activité sur le moment. Des ajustements peuvent être apportés manuellement entre ces étapes pour avoir quelque chose de plus personnalisé.
2. Outils
N’importe quelle application de calculatrice graphique, pour visualiser les courbes d’utilités et les superposer les une aux autres afin de prévisualiser leurs interactions. Cela permet également d’itérer en amont, de changer les valeurs dans le projet.
Le niveau supérieur est d’utiliser un tableur. On peut faire des simulations entières sur un tableur et utiliser le générateur de nombre aléatoire pour éprouver nos formules. Sur “Les Sims 4”(2014), David “Rez” a construit son modèle pour simuler comment choisir les Sims appropriés quand l’un d’eux veut organiser une soirée. Après avoir fait son tableur, il l’a partagé avec l’équipe de designs qui ont pu ajuster et itérer sur des variables jusqu’à avoir ce qu’ils désiraient, avant de renvoyer le tableur à David “Rez” pour l’intégration.
Les prototypes sont un bon moyen de tester des petites simulations, indépendantes du jeu, pour répondre à une question bien précise.
Mon meilleur conseil concernant les prototypes est de le jeter complètement une fois terminé. […] Seulement 1 personne sur ~200 [présent dans la salle de conférence] a eu une expérience positive en emmenant un prototype jusqu’en production.
- David “Rez” Graham
Emploi du temps
1. Structure
Maintenant, nous allons nous pencher sur le système d’emploi du temps. Nous humains suivons un emploi du temps, on a tendance à répéter les mêmes activités sur les mêmes tranches horaires, au jour le jour, ou semaine par semaine, ou mois par mois. Les Sims, en général, suivent un semainier. Les Sims soldats stellaires suivent un programme journalier, car c’est un vaisseau militaire.
L’architecture de base consiste en un agent, qui possède un certain nombre d’emplois du temps, qui ont un certain nombre entrées, emballées autour d’un système de temps.

Les entrées de multiples emplois du temps peuvent se superposer (segment 1000 de l’image). L’espace blanc (segment 1400-1600) est considéré comme vide et le comportement dans ce cas-là dépendra de ce qu’on a défini.
Les entrées ont leur unité de début et de fin, ainsi qu’un ensemble de tâches. Ces tâches vont dépendre de votre jeu. Elles peuvent être aussi simples que marcher et lancer une animation à destination, ou elles pourraient être complexes.
2. Décisions
Aléatoire
Pour la sélection d’un choix parmi les entrées disponibles. Dans le cas d’une IA figurant, l’utilisation d’un échantillonnage aléatoire uniforme ou pondéré (respectivement ‘URS’ et ‘WRS’ en anglais) suffit probablement. Mais, David “Rez” préfère utiliser les courbes d’utilités (‘Utility Curve’) pour influencer le choix de toutes sortes d’IA.
Ensemble
Une tâche est égale à l’union de l’ensemble des tâches parmi toutes les entrées de tous les emplois du temps, sur la période de temps concernée. Sur cette image, en période 1000, on considère 3 entrées différentes, et 2 entrées en période 1300.
Priorités
On peut donner des priorités à certains emplois du temps. Dans cet exemple, sur la période 0800, on ignore l’emploi du temps 3 (prioritaire) car l’entrée est vide, pour choisir parmi les entrées de l’emploi du temps 1 ou 2. Sur la période 1300, l’emploi du temps 3 s’applique et on ignore le 1 et 2 entièrement.
Cela permet d’avoir des emplois du temps qui se superposent et se remplacent. Exemple : voici votre emploi du temps par défaut. C’est ce que vous faites habituellement, mais vous êtes un traître de la rébellion, donc pendant cette période particulière, vous partez en espionnage.
L’énumération du nombre de priorités d’un programme doit rester petit. Pas plus de 2 ou 3 priorités, sinon on se retrouve comme dans les Sims avec 13 niveaux de priorités et cela devient ingérable à long terme.
Espace vide
Dans les Sims, il est défini comme le temps libre où l’IA peut faire ce qu’elle désire en fonction de ses besoins. Pour certains projets, cela pourrait être considéré comme un état d’erreur. Il faut définir ce qui arrive quand vos IA ne sont pas dans un emploi du temps, car si vous les concevez pour être sans arrêt dedans, vous aurez forcément des bogues liés à cette restriction.
3. Actualisation
De quelle façon allons-nous planifier les actualisations des IA ? Nous ne voulons pas demander une actualisation pour chaque personnage du monde, chaque emploi du temps, chaque entrée. Le jeu exploserait.
L’avantage des emplois du temps, c’est d’avoir des moments distincts qui nous importent de surveiller pour actualiser un changement de tâche.
En code, cela se traduit par un ‘Manager’ qui stockent une liste de rappels, organisés par priorité et durée les séparant du temps en cours, qui déclenchent l’actualisation de certains éléments établie sur cette liste de rappels. Quand un emploi du temps est ajouté ou retiré, on ajoute ou retire les rappels de la liste.
Voici la fin de cette publication. Comme je le disais en tout début, il est difficile de s’imaginer pouvoir tout mettre en place sur nos projets à la vue des coûts de développement. Mais, on peut certainement récupérer une astuce ou deux pour améliorer un tant soit peu nos comportements d’IA non-combattantes.
Merci pour votre lecture !
Remerciements à Thomas pour la relecture.
Erwan Le Breton explore en profondeur une idée similaire, dans sa conférence “Du storytelling à l’adaptive narrative | GCF 2021”[FR] [Vidéo] sur l’utilisation d’étiquettes pour une réaction dynamique des PNJ.
Une autre conférence sur “Les Sims 4”(2014) prenait l’exemple des urinoirs : si on inculque aux Sims la convention de laisser un espacement d’un urinoir libre entre deux personnes, leur comportement est réaliste, mais n’est plus intéressant du point de vue des joueurs et joueuses pour créer une narration étonnante. “Emergent Storytelling Techniques in The Sims | GDC18” [EN] [Vidéo]
Ressources textuelles [EN] : “Utility system” - Wikipedia ; ”AI Made Easy with Utility AI” - Morgan Walkup ; ”Introducing Utility AI for Game Devs: Practical Guide” - Toxigon
Ressources vidéos [EN] : ”The Genius AI Behind The Sims” - GMTK ; ”How Utility AI Helps NPCs Decide What To Do Next | AI 101” - AI and Games