Mapping y Hammer

Navmesh y AI nodes en GMod: diferencias y configuración

¿Navmesh o AI nodes? Cuándo necesita tu mapa de GMod un archivo .nav para Nextbots, cuándo info_node para los NPC clásicos y cómo incluir ambos con el mapa.

El navmesh y los AI nodes son dos sistemas de navegación independientes de Source Engine. Los Nextbots se mueven sobre el navmesh (un archivo .nav), mientras que los NPC clásicos como npc_combine_s o npc_zombie usan un grafo de nodos construido a partir de entities info_node (un archivo .ain). Si tu mapa tiene que funcionar con los dos tipos de NPC, necesita los dos.

AspectoNavmeshAI nodes
Archivomaps/<mapname>.navmaps/graphs/<mapname>.ain
Lo usanLos Nextbots, es decir, los NPC basados en base_nextbotLos NPC clásicos como npc_citizen, npc_combine_s, npc_zombie
EstructuraÁreas que cubren el suelo transitablePuntos sueltos que el motor enlaza entre sí
Se creaEn el juego con nav_generateEn Hammer, colocando info_node
EdiciónEn el juego con nav_editEn Hammer, y después hay que recompilar

Los dos sistemas no saben nada el uno del otro. Un Nextbot no puede aprovechar ni el grafo de nodos más perfecto, y un npc_combine_s ignora el navmesh por completo.

Cuándo necesitas cada uno

  • Solo jugadores, sin NPC: Técnicamente no necesitas ninguno de los dos sistemas. Muchos servidores añaden addons de NPC más adelante, así que preparar el mapa sigue mereciendo la pena.
  • Combates con NPC de Half-Life 2: Necesitas AI nodes. Sin ellos, los NPC pueden apuntar, disparar y recorrer distancias cortas en línea recta, pero no pueden planificar una ruta que rodee obstáculos.
  • Addons de Nextbots: Necesitas un navmesh. Los Nextbots calculan sobre él el camino hasta su objetivo.
  • Mapas que publicas o vendes: Incluye los dos. Los compradores rara vez saben de antemano qué addons van a usar, y la falta de navegación solo se nota con el servidor en marcha.

Colocar AI nodes en Hammer

  1. Coloca info_node sobre suelo transitable allí donde deban ir los NPC: en pasillos, delante y detrás de las puertas, en las esquinas, al principio y al final de las escaleras.
  2. Piensa en que la conexión quede despejada. El motor solo enlaza dos nodos si el camino entre ellos está libre y es transitable y no están demasiado separados; la wiki de Valve indica 720 unidades como máximo. Pon los nodos más juntos en los sitios estrechos y más separados en las zonas abiertas.
  3. Los NPC voladores usan info_node_air. Con info_node_hint marcas puntos especiales, como las coberturas.
  4. Compila el mapa y cárgalo en el juego. En la primera carga el motor construye el grafo de nodos y lo guarda como archivo .ain en la carpeta maps/graphs.
  5. Comprueba el resultado con sv_cheats 1 activado: el comando de consola ai_nodes muestra los nodos y ai_show_connect los enlaces entre ellos, para que puedas detectar huecos en la red.

Coloca los nodos con criterio en lugar de cubrir el suelo con una cuadrícula densa. El motor solo admite un número limitado de nodos, y una red saturada hace que el grafo tarde más en construirse. El artículo sobre los límites de los mapas de Source Engine trata con más detalle topes como este.

Generar y editar el navmesh

El navmesh no se crea en Hammer, sino con el juego en marcha.

  1. Carga el mapa compilado en modo de un jugador y activa sv_cheats 1.
  2. Escribe nav_generate. El motor analiza el suelo transitable partiendo de un punto de spawn y recarga el mapa al terminar. En mapas grandes esto lleva un tiempo considerable.
  3. Las zonas a las que no se puede llegar a pie desde el spawn se quedan vacías. Colócate en una de esas zonas, apunta al suelo, escribe nav_mark_walkable y ejecuta nav_generate otra vez.
  4. nav_edit 1 muestra la malla y te permite editarla. Hay comandos específicos para borrar, dividir, fusionar y conectar áreas, por ejemplo nav_delete, nav_split, nav_merge y nav_connect.
  5. Guarda el resultado con nav_save y sal del modo de edición con nav_edit 0. El archivo queda entonces como <mapname>.nav en la carpeta maps.

Una malla generada automáticamente rara vez sale impecable. Revisa sobre todo las puertas, las escaleras, los pasos estrechos y los tejados, además de los puntos en los que las áreas se meten en las paredes o quedan sobre el vacío.

Incluir los dos archivos con el mapa

Ninguno de los dos archivos se crea al compilar, y ninguno acaba por sí solo en el BSP. Tienes que incluir los dos de forma explícita:

  • maps/<mapname>.nav
  • maps/graphs/<mapname>.ain

El nombre del archivo tiene que coincidir exactamente con el nombre del BSP. Si renombras el mapa, tienes que renombrar también los dos archivos.

El orden importa. El motor reconstruye el grafo de nodos cuando el .ain es más antiguo que el BSP o se creó para otra versión del mapa. Si recompilas el mapa o modificas el BSP después, por ejemplo al empaquetar contenido custom, cárgalo una vez más en el juego, deja que el grafo se reconstruya e incluye ese .ain recién generado. El navmesh solo necesita cambios cuando ha cambiado la geometría transitable.

Cómo llegan los archivos a los servidores y a los clientes lo explica el artículo sobre FastDL y Workshop. El Map Scanner comprueba la estructura, las entities y el pakfile de un BSP. El .nav y el .ain son archivos aparte, así que van en tu propia lista de comprobación antes de publicar.

Problemas frecuentes

SíntomaCausaSolución
Los NPC clásicos se quedan quietos y solo disparanNo hay entities info_node, o los nodos no están enlazadosColoca nodos, compruébalos con ai_nodes y ai_show_connect
Ningún NPC reacciona, ni siquiera cuando le disparanai_disabled 1 está activo, en Sandbox la opción "Disable Thinking"Desactiva la opción
Un Nextbot se queda quieto o choca contra las paredesNo hay archivo .nav, o la zona no está cubiertanav_generate, con nav_mark_walkable antes si hace falta
Un Nextbot se atasca en puertas o escalerasErrores en la malla generada automáticamenteCorrígela con nav_edit 1 y nav_save
"Node Graph out of Date. Rebuilding..." cada vez que arranca el mapaEl motor considera el .ain desactualizado, o faltaCarga el mapa una vez, incluye el .ain nuevo, revisa los nombres de archivo

El mensaje "Node Graph out of Date" no es un error en sí mismo. El motor simplemente reconstruye el grafo, lo que cuesta tiempo de carga. Según la wiki de Valve, también puede pasar una vez con un .ain recién descargado, porque el juego lo considera desactualizado. Solo se convierte en problema cuando el mensaje aparece en cada arranque.

Preguntas frecuentes

¿Todos los mapas de GMod necesitan un navmesh?

No. El navmesh solo hace falta si los Nextbots tienen que funcionar en el mapa. Para los mapas que publicas sigue siendo buena idea, porque muchos servidores instalan addons de Nextbots más adelante.

¿Puedo crear el navmesh en Hammer?

No. El navmesh se calcula en el juego con nav_generate y se pule con nav_edit. En Hammer solo colocas las entities info_node para el grafo de nodos.

¿Por qué aparece "Node Graph out of Date" cada vez que arranca el mapa?

El motor considera desactualizado el .ain guardado. Pasa, por ejemplo, cuando el BSP se modificó de nuevo después de crear el grafo. Carga el BSP definitivo una vez en el juego e incluye el archivo que se genera en ese momento.

¿Los Nextbots funcionan también con AI nodes?

No. Los Nextbots usan únicamente el navmesh, y los NPC clásicos únicamente el grafo de nodos. Un mapa que tenga que admitir los dos tipos de NPC necesita los dos archivos.