Mallas de navegación

From Valve Developer Community
Revision as of 20:54, 29 August 2019 by Linkshadow40 (talk | contribs) (Editing the navigation mesh)

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

The easy way to build a ladder is to simply point at a climbable surface, and execute nav_build_ladder.

Point at a climbable surface
Ladder created

Using nav_begin_area and nav_end_area

If nav_build_ladder isn't what you need, you can manually create a ladder:

  1. Place your cursor at where a corner of the new ladder should be
  2. Execute nav_begin_area
  3. Move your cursor to drag out the ladder's extent
  4. Execute nav_end_area

This can be useful to get bots to start going up the ladder, and jump off halfway up, onto the crate:

Start dragging ladder at first corner
Drag ladder extent
Ladder created

Escaleras inversas

Sometimes a ladder will be created facing the wrong way. If a ladder is drawn in red, you are looking at it from the back. The ladder is drawn in green if it is facing you. To change the orientation of a ladder, simply point at the ladder and use nav_ladder_flip.

Ladder facing into the wall (incorrect)
Ladder facing away from the wall (correct)

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

Using nav_precise, nav_walk, and nav_stop to disable local obstacle avoidance behaviors and control bot movement.

Marcar áreas a evitar

Using nav_avoid to tell bots to avoid the area unless the normal route has become too dangerous.

Controlar dónde se pueden esconder

Using nav_dont_hide to prevent bots from hiding in that area. This can be used to force the creation of hiding spots during the analysis phase.

Asignando puestos de francotirador

Mark an area using nav_walk and execute nav_make_sniper_spots. This will break the area into small sub-areas which are used internally by the navigation mesh to encourage sniping.

Lining up tricky jumps and narrow doorways

Arranging nav areas to force specific paths.

  • If the bots are getting hung up on the sides of a door or window, you can carve out a narrow path through the middle of the opening.
  • The highest a bot will try to jump is 58 units. If the top of a jump is 59 or more units above the bottom, bots will give up as soon as they jump. If this happens in a spot that the bots can actually jump up to, use nav_corner_lower to lower the upper nav area slightly.
Highest possible crouchjump

Game Specific SubVersions

Game Known as Subversion Notes
<Garry's Mod> Garry's Mod TheNavMesh 0 Garry's Mod is using the base navigation mesh(It doesn't use it's own implementation unlike Valve games)
<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 (Ported from Counter Strike: Source?)

See also

External Links