Mallas de navegación

From Valve Developer Community
Jump to: navigation, search
English 日本語

Una malla de navegación representa un espacio por donde se puede caminar, correr, saltar o nadar. Esta información es necesaria por los bots y rehenes en Counter-Strike: Source, Counter-Strike: Global Offensive, y todas las entidades NextBot en Left 4 Dead, Left 4 Dead 2 y Team Fortress 2, permitiéndoles conocer cómo desplazarse en el entorno.

La malla de navegación se almacena en un fichero NAV que corresponde a un archivo de mapa (.bsp) para el cual será utilizado. Por ejemplo, la malla de navegación para cstrike\maps\de_dust.bsp se almacena como cstrike\maps\de_dust.nav.

Generación automática de la malla de navegación

Para dar soporte a los mapas creados por la comunidad, CS:S y CS:GO incluyen un sistema que genera la malla de navegación. La primera vez que ejecutes un mapa personalizado con 'bots' el sistema de generación construirá un fichero .nav para el mapa. Dependiendo del tamaño y la complejidad de éste, puede tardar desde minutos a horas. La mayoría de mapas necesitan unos cinco minutos para generar automáticamente un fichero .nav. Una vez terminada la generación, el fichero .nav se guardará en tu disco duro para que el mapa soporte bots.

Para juegos que no tengan soporte de generación automática de la malla, se puede generar una utilizando la consola del juego, para cargar el mapa desde la consola, utilizar el comando sv_cheats 1, seguido de la instrucción nav_generate. Después puedes subir este archivo .nav al servidor del juego.

Se recomienda a los desarrolladores que creen las mallas de navegación antes de subir el mapa a Internet.

¿Qué se calcula durante la generación?

Estos son los pasos que ocurren durante la generación de una malla de navegación:

  • Empezando en el punto de generación del jugador, el espacio "caminable" fluye hacia adelante desde el punto, buscando puntos adyacentes transitables.
  • Se construyen las áreas de navegación rectangulares de la información extraída
  • Los escondites y posiciones de francotirador se calculan
  • Los puntos de encuentro y acercamientos se calculan (toma un buen rato)
  • Áreas de encuentro iniciales se calculan

Empezar manualmente el proceso de generación

Para comenzar el proceso de generación manualmente, debes abrir la consola y escribir la instrucción nav_generate una vez estés en el mapa cargado.

Visualizar la malla de navegación

Para ver la malla de navegación y entrar en el editor, escribe nav_edit 1. Para desactivar el editor de malla, escribe nav_edit 0. Debes de tener previamente los trucos activados para activar el modo de edición de malla. (Comando sv_cheats 1).

Marcar manualmente áreas transitables

Algunos mapas tienen escaleras con peldaños muy altos, rampas o colinas que confunden al generador, el resultado es que la malla de navegación no cubre todo. Para solucionarlo tienes que posicionar manualmente 'marcadores transitables', que indican al generador que busque alrededor de ese marcador en la fase de cálculo de navegación.

Para añadir uno o varios marcadores transitables, apunta con la mirilla hacia el lugar transitable y escribe en la consola "nav_mark_walkable". Una vez hayas puesto los marcadores, escribe después en la consola nav_generate, para regenerar la malla.

Si te has equivocado al poner un marcador, debes eliminarlos todos de golpe, con el comando nav_clear_walkable_marks.


Generar rápidamente mallas para hacer pruebas

La fase de análisis del terreno, por parte del generador, toma mucho tiempo. Para saltarte el proceso puedes ejecutar el comando nav_quicksave 1.

Nota:Haciendo esto te saltas el proceso de análisis, y la malla de navegación que generes no tendrá información importante necesaria para los sistemas de planificación y atención de los bots y rehenes de Counter Strike. Puede ser útil para probar, editar y ajustar una malla, pero asegúrate de hacer siempre el análisis completo. Utiliza los dos comandos nav_analyze y nav_quicksave 0, antes de publicar en la red tu fichero .nav a otros usuarios.

Editando la malla de navegación

Activando el editor de Malla de Navegación en de_dust
El generador de naveación hace un buen trabajo a la hora de construir una malla, permitiéndote usar bots y rehenes en mapas personalizados.

Sin embargo, retocar a mano la malla de navegación puede mejorar el rendimiento de los bots. Además, manualmente decorar la malla con nombres, permite a los bots decir dónde suceden eventos, mejora el radar de Counter-Strike y incluye los nombres de localizaciones en cualquier mensaje de radio.

Editor de navegación

Para activar el editor, introduce el comando nav_edit 1 en la consola. Para desactivarlo cambia el '1' por el '0'.

  • La cruz blanca en el centro de tu punto de vista es el cursor.
  • El área de navegación al que apuntas es el área seleccionada y se muestra con un borde amarillo.
  • Las áreas de navegación próximas al área seleccionada se marcan en rojo.
  • La línea recta blanca en el área seleccionada denota dónde el área se puede dividir si el comando nav_split es ejecutado.

Tipos de áreas

Áreas de salto (marcadas con equis verde) indica a los bots que deben saltar para alcanzar el área superior conectada, y que ese área no se puede utilizar para esconderse o punto de francotirador.
Áreas de agacharse (marcadas con una barra diagonal azul) obliga a los bots a agacharse para desplazarse por el área.

Utilizando los comandos de edición

Aunque todos los comandos de edición de la malla se pueden escribir en la consola, es más práctico asignar los comandos a las teclas de teclado. Por ejemplo, el comando bind del nav_delete, hace que al apretar la tecla SUPRIMIR ("Delete" o "Supr"), se ejecute el comando nav_delete.

Después de enlazar el comando a la tecla, si aprietas la tecla Suprimir se eliminará el área de navegación al que estés apuntando, siempre y cuando estés en el modo edición.


Puedes temporalmente asignar comandos a diferentes teclas utilizando un fichero CFG. Es útil para editar la navegación sin utilizar los comandos, además de que no querrás tener asignados siempre esos comandos a las teclas. Échale un vistazo al artículo Editing Bot Navigation CFG File, para obtener un archivo CFG, hecho previamente con los comandos y teclas ya asignados.

Lee el artículo Comandos de consola para el editor de navegación para leer una lista de todos los comandos relacionados con la navegación de los bots.

Comandos básicos de edición de mallas

Guardar

No existe comando para "deshacer", en el editor de navegación de mallas, así que es muy importante guardar tu trabajo a menudo a través del comando nav_save.

Dividir/partir

Para partir un área en dos áreas adyacentes conectadas entre sí, apunta con tu cursor al área y ejecuta el comando nav_split.

Antes de partir
Después de partir

Unir/combinar

Para unir dos áreas adyacentes:

  1. Apunta con tu cursor al primer área y ejecuta el comando nav_mark.
  2. Apunta con tu cursor al esgundo área y ejecuta el comando nav_merge.
Tip:Ten en cuenta que las dos áreas tienen que tener la misma longitud.
Seleccionada la primera área
Apuntando la segunda área
Unidas ambas áreas

El área resultante conservará las conexiones con las otras áreas y heredarán las propiedades/atributos.

Empalmar

Empalmar te permite crear un nuevo área entre dos áreas existentes. Es una herramienta potente que puede utilizarse para crear áreas inclinadas como en el ejemplo a continuación.

Para empalmar una nueva área entre dos que ya existan:

  1. Apunta con tu cursor a la primera área y ejecuta nav_mark.
  2. Apunta con tu cursor al segundo área y ejecuta nav_splice.


Seleccionada la primera área
Apuntando la segunda área
Nueva área creada

Eliminar

Para eliminar un área solo debes apuntar hacia ella y ejecutar nav_delete.

Crear una nueva área

Para crear manualmente una nueva área:

  1. Coloca tu cursor desde la esquina donde el área debería empezar.
  2. Ejecuta el comando nav_begin_area.
  3. Mueve tu cursor y arrástralo hasta donde quieras que termine el área.
  4. Ejecuta el comando nav_end_area.
Empieza arrastrando el área desde la primera esquina
Estira el área hasta el tamaño adecuado
Área creada

Añadir y eliminar conexiones entre áreas

Las conexiones entre áreas definen si un agente se puede mover de un área a otra. Normalmente estas conexiones son bidireccionales, esto significa que un agente se puede mover entre una y otra a su voluntad. Sin embargo a veces como diseñador, puedes querer que no se pueda volver a un área, como en el caso de que cornisas o bordes muy altos desde los que se pueda saltar, pero no poder volver a subir.

Para crear una conexión unidireccional de área A, al área B:

  1. Coloca tu cursor sobre el área A.
  2. Marca el área A con el comando nav_mark.
  3. Apunta al área B.
  4. Ejecuta el comando nav_connect.


Para crear una conexión bidireccional, repite el mismo proceso pero invirtiendo el orden.

Para eliminar todas las conexiones del área A y B:

  1. Apunta al área A y márcala con nav_mark.
  2. Apunta al área B y ejecuta nav_disconnect.


Las conexiones unidireccionales (marcadas con líneas azules oscuras) son normalmente utilizadas para enlazar caminos desde los que se salta hasta el suelo. Esto le dice a los bots que pueden saltar pero no pueden saltar hacia atrás. También puede ser útil para forzar a los bots a dirigirse a un lugar en concreto, como por ejemplo realizar un salto complicado.
Las conexiones bidireccionales (marcadas con azul clarito en los bordes del área) permiten a los bots moverse libremente entre dos áreas.

Poner un nombre a un área

Una vez hayas generado un área de navegación, puedes ponerles nombres para etiquetar una región de un mapa. Por ejemplo, si hay un casa relevante en un mapa, todas las áreas en la casa se pueden etiquetar con el nombre 'Casa'.

Los nombres son utilizados por el sistema de comunicación de los bots de Counter Strike para indicar dónde están, o por el radar para mostrar la ubicación del jugador, o para indicar la posición del jugador al escribir un mensaje de texto en el chat, por ejemplo:

Fulanito @ Desagües (RADIO): ¡Afirmativo!

Para añadir o cambiar el nombre de un lugar, necesitas activar el editor de nombres. Si no lo has hecho ya, entra en el modo de edición de malla con el comando nav_edit 1 y después escribe nav_toggle_place_mode. Cuando el editor de nombres se active (asumiendo que no hay áreas con nombres ya), todos los cuadrados de navegación se volverán rojos.

Para seleccionar qué nombre quieres asignar a un área, escribe nav_use_place "nombre", por ejemplo nav_use_place "Cocina". Después apunta con tu cursor al área que quieres etiquetar con ese nombre, y activa el modo pintado de nombres ejecutando nav_toggle_place_painting. Mientras esté este comando activo, cada área que mires será etiquetada con el nombre que hayas escrito antes y se pondrá verde.

Puedes cambiar el nombre del área que estás pintando escribiendo nav_use_place "nombre". Ten en cuenta que después de ejecutar este comando, todas las áreas pintadas con un nombre diferente se volverán azules y las áreas pintadas con el nombre que acabas de cambiar se volverán verdes. Cuando termines de poner los nombres a las áreas, puedes desactivar el pintado con el comando nav_toggle_place_painting.

Para ver la lista de nombres disponibles ejecuta nav_place_list. O si estás en CSS o CS:GO, puedes encontrar una lista de nombres disponibles en los siguientes artículos: Lista de nombres estándar para CSS, Lista de nombres estándar para CS:GO .


Existen algunos comandos adicionales que ofrecen herramientas para escoger, drenar, reemplazar, etc. Para ver la lista completa, lee el artículo Comandos de nombres de áreas

Problemas comunes de mallas y sus soluciones

Áreas extrañas en escaleras y rampas

La generación automática tiende a construir áreas que cuelgan de los lados de escaleras y rampas. Deberían ser eliminadas para forzar a los bots a subir las escaleras o rampas de manera recta y ordenada.

Barandillas

Las barandillas pueden ser un problema para el sistema de navegación de bots, esto incluye a las uniones entre áreas que necesitan saltarse, por encima de las barandillas y que se deben evitar a menos que sea necesario. Los bots intentarán saltar, pero no podrán hacerlo correctamente.

Prevenir que los bots salten excesivamente

Marca un área donde salten a menudo de forma innecesaria, con el comando nav_mark y utiliza el comando nav_no_jump para marcar el área para que no salten tanto.

Puertas giratorias

File:Nav doors.jpg
Ejemplo de una configuración de navegación para puertas

Corta el área para dejar un espacio vacío en la malla para permitir paso a las puertas que giren. Puede ser que tengas que rehacer el área de navegación si eliminas parte de un área que no funciona.

Los bots a veces tratarán de atravesar una puerta "brush" de un área a otra, y quedarse atascados. Puedes solucionarlo eliminando al área adyacente o configurando las áreas y conexiones para que los bots caminen cerca de la puerta abierta.

Técnicas de edición avanzada

Añadir mallas adicionales

Crea un punto de generación utilizando nav_mark_walkable en un área sin mallas y utiliza el comando nav_generate_incremental para generar un área desde ese punto. Utiliza el comando nav_generate_incremental_range NÚMERO para indicar el rango de ese punto de generación.

Escaleras

Las escaleras se pueden construir frente a superficies escalables. Tu cursor se volverá verde cuando apuntes a una superficie escalable.

Usando nav_build_ladder

La manera más sencilla de construir una escaleras es simplemente apuntando a una superficie escalable y ejecutando el comando nav_build_ladder.


Apunta a la superficie escalable
Escalera creada

Utilizando nav_begin_area y nav_end_area

Si nav_build_ladder no te sirve, puedes crear la escalera a mano:

  1. Sitúa tu cursor en donde comienza la esquina de la escalera.
  2. Ejecuta el comando nav_begin_area
  3. Arrastra el cursor hasta cubrir toda la escalera.
  4. Termina con nav_end_area.

Te puede servir para que los bots empiecene subiendo las escaleras y salten a mitad, para ir a la caja.

Empieza arrastrando la escalera
Extiéndela
Escalera creada

Escaleras inversas

Algunas escaleras se pueden crear al revés por error. Si una escalera está dibujada en rojo, quiere decir que la estás viendo por la parte trasera de ella. La escalera en verde es por donde se sube. Para cambiar la orientación de la escalera puedes darle la vuelta con el comando nav_ladder_flip.

Escalera mirando a la pared (mal)
Escalera mirando hacia fuera (bien)

Evasión de obstáculo y movimientos de precisión

Utiliza los comandos nav_precise, nav_walk, y nav_stop para desactivar comportamientos de evasión de obstáculos y control de movimiento del bot.

Marcar áreas a evitar

Utiliza nav_avoid para advertir a los bots de que eviten el área a no ser que la ruta normal sea peligrosa.

Controlar dónde se pueden esconder

Utiliza el comando nav_dont_hide para evitar que los bots se escondan en un área concreta. Esto se puede utilizar para forzar la creación de escondites durante la fase de análisis.

Asignando puestos de francotirador

Marca un área usando el comando nav_walk y después nav_make_sniper_spots. Esto romperá el área en distintas subáreas que serán utilizadas internamente por la malla de navegación del juego para animar a los bots a usarlas como lugares de francotirador.

Alineando saltos complicados y marcos de puertas

Organiza las áreas de navegación para forzar caminos específicos.

  • Si los bots se quedan pillados por los lados de la puerta o ventana, puedes ahuecar un camino estrecho en medio de él.
  • La altura máxima que un bot tratará de salta es 58 unidades Source. Si el tope a saltar es de 59 o más arriba, los bots se rendirán tan pronto como terminen de saltar. Si esto pasa en un sitio donde deberían saltar, utiliza el comando nav_corner_lower para rebajar la altura del área alta.


Máximo salto-agachado posible

Subversiones específicas de juegos

Juego Conocido como Subversion Observaciones
<Garry's Mod> Garry's Mod TheNavMesh 0 Garry's Mod utiliza la malla de navegación normal. (No tiene la suya propia como L4D o Counter-Strike)
<Counter-Strike: Source> Counter-Strike: Source CSNavMesh 1
<Team Fortress 2> Team Fortress 2 CTFNavMesh 2
<Left 4 Dead> Left 4 Dead TerrorNavMesh 13
<Left 4 Dead 2> Left 4 Dead 2 TerrorNavMesh 14
<Counter-Strike: Global Offensive> Counter-Strike: Global Offensive CSNavMesh 1 (Derivada de Counter Strike: Source?)

Échale un vistazo

Enlaces externos