• Aucun résultat trouvé

3.3 Architecture interne du module émotionnel

3.3.1 Conception

Le module émotionnel se base sur un arbre de comportements [126,127]. Un arbre de comportements est un modèle d’intelligence artificielle utilisé dans les jeux vidéo pour modéliser le comportement d’un personnage non-joueur, personnage autonome et non contrôlé par l’utilisateur. Le comportement est défini comme étant toutes les actions que le personnage non-joueur peut effectuer, par exemple ses mouvements

3.3. Architecture interne du module émotionnel

dans l’environnement, sa gestuelle et ses expressions faciales.

Le comportement est implémenté dans un arbre de comportement qui se base sur 3 types de nœud :

— Primitive : Une primitive est soit une condition soit une action à réaliser. Une primitive renvoie au parent une des 3 valeurs suivantes : (1) Succès qui indique que la condition est validée ou bien que la tâche s’est réalisée, (2)

Échec lorsque la condition n’a pas été validée ou bien que l’action a échoué,

(3) En exécution lorsque le traitement n’est pas fini.

— Décorateur : Un décorateur est un nœud spécial qui agit sur un nœud fils pour changer sa valeur de retour (par exemple pour inverser la valeur de retour) ou pour changer sa fréquence d’exécution (par exemple en indiquant le nombre de fois qu’un nœud fils doit être exécuté).

— Composite : Un composite est un nœud qui décrit comment les nœuds fils s’exécutent. Dans l’implémentation de l’arbre comportemental de l’agent vir- tuel nous utilisons 4 types de composite différents (figure 3.5). Les nœuds composites propagent le retour de leurs fils à leurs parents jusqu’à atteindre la racine.

La figure 3.5 montre les types des nœuds utilisés pour construire l’arbre de com- portement de l’agent virtuel. Les nœuds représentés par un cercle sont des nœuds de type composite ; les nœuds représentés par un rectangle sont des actions et les nœuds représentés par un losange sont des conditions. Les nœuds de type décorateur n’ont pas été utilisés dans l’implémentation pour l’agent virtuel d’Amelis et ne figurent pas dans la figure.

Les nœuds composites sont divisés en 4 types : le nœud “Sequence” indique qu’il faut exécuter les fils séquentiellement de la gauche vers la droite et que l’exécution s’arrête quand tous les nœuds fils renvoient la valeur Succès ou bien au premier nœud qui renvoie Échec. Le nœud “Selector” indique que les fils sont exécutés sé- quentiellement de la gauche vers la droite et que l’exécution des fils s’arrête quand tous les nœuds fils renvoient la valeur Échec ou bien au premier nœud qui renvoie la valeur Succès. Le nœud “Random” choisit aléatoirement un de ses fils. Il l’exécute et renvoie sa valeur de retour. Le nœud “Parallel” exécute tous les fils en même temps.

3.3. Architecture interne du module émotionnel

Le nœud “Parallel” renvoie Succès quand tous ses fils renvoient Succès ; il renvoie

Échec quand un de ses fils renvoie Échec sinon il renvoie la valeur En exécution.

figure 3.5 Types de noeuds utilisés dans l’implémentation de l’arbre comportemental de

l’agent virtuel

L’arbre de comportement (figure 3.6) est décomposé en deux branches qui sont exécutées selon la règle du “Selector”, c’est-à-dire qu’il n’y a qu’une seule branche qui peut renvoyer la valeur Succès. Il est évalué toutes les 200 millisecondes pour garantir une exécution proche du temps réel.

figure 3.6 Arbre comportemental de l’agent virtuel

Les évènements reçus du backend sont placés dans une pile et sont évalués par cet arbre pour en déduire les actions à effectuer en garantissant l’ordre.

3.3. Architecture interne du module émotionnel

figure 3.7 Branche gauche de l’arbre comportemental

La première branche (figure 3.7) s’occupe de l’évaluation émotionnelle lors de l’interaction avec l’agent virtuel. Elle définit une exécution en parallèle des nœuds fils. Cette exécution contrôle les lèvres de l’agent virtuel quand il parle et évalue ses émotions pour les transformer en expressions faciales. L’action “Success Action” est une action spéciale permettant de renvoyer la valeur Succès au nœud “Selector” parent dans le but de faire réussir l’exécution exceptionnellement dans le cas où l’agent virtuel n’a pas reçu d’évènement pour faire bouger les lèvres.

La sous branche de droite (figure 3.7) exécute les 4 actions dans l’ordre(1) évaluer les émotions (section 3.3.2), (2) générer les expressions faciales liées à ces émotions, (3) dépiler la pile des évènements et (4) réinitialiser le compteur d’inactivité (action “Reset Timer”). Chaque action doit renvoyer la valeur Succès pour que l’action suivante s’exécute, dans le cas échéant l’exécution s’arrête.

Si la pile des évènements est vide, l’action “Dequeue And Classify” renvoie la va- leur Échec qui arrête l’exécution de cette branche et donc empêche la ré-initialisation du compteur d’inactivité. Par contre les deux actions “Evaluate Affect” et “Express Emotion” s’exécuteront normalement étant donné qu’elles précèdent l’action “De- queue And Classify”.

3.3. Architecture interne du module émotionnel

figure 3.8 Branche droite de l’arbre comportemental

La deuxième branche de l’arbre comportemental (figure 3.8) s’occupe des actions de l’agent virtuel quand il n’y a aucune interaction qui se produit. Elle s’exécute quand l’agent virtuel est inoccupé. L’exécution de cette branche ne se fait que si la première branche (figure 3.7) renvoie la valeur Échec. L’exécution est séquentielle. Elle com- mence par incrémenter la valeur du compteur d’inactivité. Ensuite si la valeur-limite est atteinte (condition “Timer ?”), une action à exécuter est choisie aléatoirement, par exemple “Dance”). Ceci permet à l’agent virtuel de ne jamais rester totalement immobile.