Navmesh et AI nodes dans GMod : différences et mise en place
Navmesh ou AI nodes ? Quand ta map GMod a besoin d’un .nav pour les Nextbots ou d’info_node pour les NPC classiques, et comment livrer les deux avec la map.
Le navmesh et les AI nodes sont deux systèmes de navigation distincts du Source Engine. Les Nextbots se déplacent sur le navmesh (un fichier .nav), tandis que les NPC classiques comme npc_combine_s ou npc_zombie utilisent un graphe de nodes construit à partir d’entités info_node (un fichier .ain). Si ta map doit fonctionner avec les deux types de NPC, elle a besoin des deux.
Navmesh et AI nodes en comparaison
| Aspect | Navmesh | AI nodes |
|---|---|---|
| Fichier | maps/<mapname>.nav | maps/graphs/<mapname>.ain |
| Utilisé par | les Nextbots, c’est-à-dire les NPC basés sur base_nextbot | les NPC classiques comme npc_citizen, npc_combine_s, npc_zombie |
| Structure | des zones qui couvrent le sol praticable | des points isolés que le moteur relie entre eux |
| Création | en jeu avec nav_generate | dans Hammer en plaçant des info_node |
| Édition | en jeu avec nav_edit | dans Hammer, puis recompilation |
Les deux systèmes s’ignorent totalement. Un Nextbot ne peut rien faire d’un graphe de nodes, même parfait, et un npc_combine_s ignore complètement le navmesh.
Quand as-tu besoin de quoi
- Uniquement des joueurs, pas de NPC : Techniquement, tu n’as besoin d’aucun des deux systèmes. Beaucoup de serveurs ajoutent des addons de NPC par la suite, donc préparer la map reste payant.
- Combats avec des NPC de Half-Life 2 : Il te faut des AI nodes. Sans eux, les NPC peuvent viser, tirer et parcourir de courtes distances en ligne droite, mais pas planifier un itinéraire pour contourner les obstacles.
- Addons Nextbot : Il te faut un navmesh. Les Nextbots calculent grâce à lui le chemin vers leur cible.
- Maps que tu publies ou vends : Livre les deux. Les acheteurs savent rarement à l’avance quels addons ils utiliseront, et une navigation manquante ne se remarque qu’en conditions réelles.
Placer des AI nodes dans Hammer
- Place des
info_nodesur le sol praticable partout où les NPC doivent pouvoir aller : dans les couloirs, devant et derrière les portes, dans les angles, en haut et en bas des escaliers. - Veille à ce que la liaison soit dégagée. Le moteur ne relie deux nodes que si le chemin entre eux est libre et praticable et s’ils ne sont pas trop éloignés ; le wiki de Valve indique 720 unités au maximum. Rapproche les nodes dans les passages étroits et espace-les davantage dans les zones ouvertes.
- Les NPC volants utilisent
info_node_air. Avecinfo_node_hint, tu marques des emplacements particuliers, comme un abri. - Compile la map et charge-la en jeu. Au premier chargement, le moteur construit le graphe de nodes et l’enregistre sous forme de fichier
.aindans le dossiermaps/graphs. - Vérifie le résultat avec
sv_cheats 1activé : la commande consoleai_nodesaffiche les nodes etai_show_connectles liaisons entre eux, ce qui te permet de repérer les trous dans le réseau.
Place les nodes de façon réfléchie au lieu de couvrir le sol d’une grille dense. Le moteur ne gère qu’un nombre limité de nodes, et un réseau surchargé rallonge la construction du graphe. L’article sur les limites des maps du Source Engine détaille ce genre de plafonds.
Générer et éditer le navmesh
Le navmesh ne se crée pas dans Hammer mais dans le jeu en cours d’exécution.
- Charge la map compilée en solo et active
sv_cheats 1. - Saisis
nav_generate. Le moteur analyse le sol praticable en partant d’un point de spawn et recharge la map une fois terminé. Sur les grandes maps, cela prend un temps non négligeable. - Les zones inaccessibles à pied depuis le spawn restent vides. Place-toi dans une telle zone, vise le sol, saisis
nav_mark_walkableet relancenav_generate. nav_edit 1affiche le mesh et te permet de l’éditer. Il existe des commandes dédiées pour supprimer, diviser, fusionner et relier des zones, par exemplenav_delete,nav_split,nav_mergeetnav_connect.- Enregistre le résultat avec
nav_saveet quitte le mode édition avecnav_edit 0. Le fichier se trouve alors dans le dossiermapssous le nom<mapname>.nav.
Un mesh généré automatiquement est rarement sans défaut. Vérifie en particulier les portes, les escaliers, les passages étroits et les toits, ainsi que les endroits où des zones s’enfoncent dans les murs ou dépassent au-dessus du vide.
Livrer les deux fichiers avec la map
Aucun des deux fichiers n’est créé par la compilation, et aucun n’arrive tout seul dans le BSP. Tu dois les inclure explicitement tous les deux :
maps/<mapname>.navmaps/graphs/<mapname>.ain
Le nom du fichier doit correspondre exactement au nom du BSP. Si tu renommes la map, tu dois aussi renommer les deux fichiers.
L’ordre a son importance. Le moteur reconstruit le graphe de nodes quand le .ain est plus ancien que le BSP ou a été créé pour une autre version de la map. Si tu recompiles la map ou modifies le BSP après coup, par exemple en packant du contenu custom, charge-la encore une fois en jeu, laisse le graphe se reconstruire et livre ce nouveau .ain. Le navmesh n’a besoin d’être modifié que si la géométrie praticable a changé.
L’article sur FastDL et Workshop explique comment les fichiers arrivent sur les serveurs et chez les clients. Le Map Scanner vérifie la structure, les entités et le pakfile d’un BSP. Le .nav et le .ain sont des fichiers à part, ils ont donc leur place sur ta propre checklist avant publication.
Problèmes fréquents
| Symptôme | Cause | Solution |
|---|---|---|
| Les NPC classiques restent sur place et ne font que tirer | Pas d’entités info_node, ou des nodes qui ne sont pas reliés | Place des nodes, vérifie-les avec ai_nodes et ai_show_connect |
| Aucun NPC ne réagit, même quand on lui tire dessus | ai_disabled 1 est actif, dans Sandbox l’option « Disable Thinking » | Désactive l’option |
| Un Nextbot reste sur place ou fonce dans les murs | Pas de fichier .nav, ou la zone n’est pas couverte | nav_generate, précédé de nav_mark_walkable si nécessaire |
| Un Nextbot reste coincé aux portes ou dans les escaliers | Erreurs dans le mesh généré automatiquement | Corrige-le avec nav_edit 1 et nav_save |
| « Node Graph out of Date. Rebuilding... » à chaque lancement de la map | Le moteur considère le .ain comme périmé, ou il manque | Charge la map une fois, livre le nouveau .ain, vérifie les noms de fichiers |
Le message « Node Graph out of Date » n’est pas une erreur en soi. Le moteur reconstruit simplement le graphe, ce qui coûte du temps de chargement. D’après le wiki de Valve, cela peut aussi arriver une fois avec un .ain fraîchement téléchargé, parce que le jeu le considère comme périmé. Le message ne devient un problème que s’il apparaît à chaque lancement.
Questions fréquentes
Chaque map GMod a-t-elle besoin d’un navmesh ?
Non. Un navmesh n’est nécessaire que si des Nextbots doivent fonctionner sur la map. Pour les maps que tu publies, c’est tout de même une bonne idée, car beaucoup de serveurs installent des addons Nextbot par la suite.
Puis-je créer le navmesh dans Hammer ?
Non. Le navmesh est calculé en jeu avec nav_generate et affiné avec nav_edit. Dans Hammer, tu places uniquement les entités info_node pour le graphe de nodes.
Pourquoi « Node Graph out of Date » apparaît-il à chaque lancement de la map ?
Le moteur considère le .ain enregistré comme périmé. Cela arrive par exemple quand le BSP a encore été modifié après la création du graphe. Charge une fois le BSP final en jeu et livre le fichier généré à cette occasion.
Les Nextbots fonctionnent-ils aussi avec les AI nodes ?
Non. Les Nextbots utilisent uniquement le navmesh, et les NPC classiques uniquement le graphe de nodes. Une map qui doit prendre en charge les deux types de NPC a besoin des deux fichiers.