Editando Salas y Portales

Ejemplo de Árbol de Escenas

Juntando todas las ideas, aquí tienes un ejemplo de árbol de escena:

../../../_images/example_scenetree.png
  • Hemos utilizado un RoomGroup para denotar un área exterior.

  • Los MeshInstance dentro de las Room son ya sea "STATIC" o "DYNAMIC".

  • Hemos creado un Spatial (decidí llamarlo 'Freeform', pero podrías usar cualquier nombre) en el que colocar objetos "STATIC" y "DYNAMIC" que se auto posicionarán en las salas (Freeform está dentro de la lista de habitaciones, pero no dentro de una habitación en sí)

  • El jugador y los monstruos están en ramas FUERA de la lista de salas roomlist.

  • Las mallas del jugador y de los monstruos tienen el modo de portal "ROAMING", por lo que pueden estar en cualquier sala.

  • La cámara está fuera de la lista de salas roomlist.

Crear sistemas de salas en Blender (u otras herramientas de modelado)

Aunque puedes crear tu sistema de salas completamente dentro del editor, también puedes construir salas y portales dentro de tu herramienta de modelado. Sin embargo, hay un pequeño inconveniente: las herramientas de modelado como Blender no tienen conocimiento de los nodos de Room, RoomGroup y Portal. Para solucionar esto, utilizamos una serie de convenciones de nombres. La primera vez que Godot encuentra estos nodos con nombres especiales, los convertirá en Rooms, RoomGroups y Portals.

Convención de sufijos

  • -room se convierte en una Room.

  • -roomgroup se convierte en un RoomGroup.

  • -portal se convierte en un Portal.

  • -bound se convierte en un límite manual.

Las salas (Rooms) y los grupos de salas (RoomGroups) deben crearse como objetos vacíos (Empties) dentro de Blender. Cualquier malla hija del objeto vacío con el sufijo "-room" se colocará en la sala durante la conversión en Godot.

Por ejemplo:

  • kitchen-room: Crea una sala llamada "kitchen".

  • outside-roomgroup: Crea un grupo de salas llamado "outside".

  • kitchen-portal: Crea un portal que conduce a la sala "kitchen".

Portales

Los portales son diferentes de las salas. En los portales, necesitamos especificar la geometría del portal en nuestra sala de modelado, además del nombre. Para hacer esto, tu "portal a crear" debería crearse como una malla (Mesh).

Las mallas de los portales tienen algunas restricciones para funcionar correctamente. Deben ser convexas y los puntos del polígono deben estar en el mismo plano. La precisión del plano no tiene que ser exacta, ya que Godot promediará automáticamente la dirección del plano del portal. Una vez convertido en un nodo Portal, el ajuste al plano del portal se aplica y los vértices se especifican (y se pueden editar) como coordenadas 2D en el inspector, en lugar de puntos 3D.

El nombre del portal es bastante importante. Puedes nombrar el portal como "-portal", lo que intentará vincular automáticamente el portal en Godot, o puedes usar el nombre de la habitación a la que deseas vincular el portal como un prefijo.

Comodín

En la mayoría de los casos, esto se puede hacer utilizando un nombre como "kitchen-portal". Sin embargo, hay un problema. Blender y Godot no manejan bien cuando tienes varios objetos con el mismo nombre. ¿Qué sucede cuando queremos más de un portal que conduzca a la cocina?

La solución alternativa es el uso de un carácter comodín, *. Cuando Godot lee el comodín, ignorará todo lo que se encuentre después de él en el nombre.

Esto significa que podemos usar los siguientes nombres de portal:

  • kitchen*1-portal - crea un portal que lleva a la "cocina".

  • kitchen*2-portal - también crea un portal que lleva a la "cocina".

  • kitchen*anything_you_want_here-portal - también funciona.

Los comodines funcionan en todos los nodos que utilizan estas convenciones de nombres.

Límite Manual

Los límites manuales son una forma de establecer explícitamente el casco convexo de una sala y se utilizan si están presentes como hijos de una sala en el árbol de escenas. Aparte del sufijo, el nombre no es importante. Deben ser mallas (es decir, MeshInstance en Godot). Ten en cuenta que se convertirán en cascos convexos durante el proceso de conversión, por lo que no tienen que ser perfectos.

Truco

Una vez utilizados durante la conversión, se convertirán al modo de portal IGNORE y no se mostrarán. Alternativamente, puedes utilizar Generate Points dentro del editor para convertirlos en un conjunto de puntos almacenados en la sala y eliminar el MeshInstance original -bound.

Edición de puntos de portal

Los portales se definen por una combinación de la transformación del nodo del portal y por un conjunto de puntos que forman las esquinas.

El portal predeterminado tiene 4 esquinas, como se muestra en el inspector:

../../../_images/portal_point_editing.png

Puedes editar estos puntos en el gizmo o en el inspector para que coincidan mejor con la abertura en tu nivel de juego. En general, es mejor mantener el número de puntos lo más bajo posible para la eficiencia del sistema. Por ejemplo, es mejor arriesgarse a representar un poco más de lo necesario que pasar tiempo descartando objetos en 20 bordes diferentes.

Edición de puntos de la sala

También tienes la opción de editar manualmente los puntos que se utilizan para definir el casco convexo de una sala. Estos puntos no están presentes de forma predeterminada. Por lo general, los crearías presionando el botón Generar puntos en la barra de herramientas del editor cuando una sala está seleccionada. Esto transferirá los límites automáticos de la geometría (o malla manual -bound) al inspector. Una vez que haya puntos en el inspector, se utilizarán y anularán cualquier otro método. Entonces, si deseas revertir tu edición manual, elimina todos los puntos de la sala.

../../../_images/room_point_editing.png

La edición manual de puntos puede ser útil en algunas situaciones, especialmente cuando los límites automáticos no obtienen exactamente el resultado deseado. Por lo general, es una buena idea utilizar mucha simplificación en el inspector de la sala antes de generar los puntos. Sin embargo, ten en cuenta que, de forma predeterminada, el valor de simplificación se heredará del RoomManager.

RoomManager (Administrador de Salas)

Mostrar Depuracion

Esto se puede utilizar para controlar la cantidad de registro, especialmente los registros de conversión de salas. En los proyectos exportados, el modo de depuración siempre estará establecido en false.

Depurar extensión

Este modo solo mostrará mallas que se extiendan a través de portales desde la sala de la cámara actual. Por lo general, son las grandes estructuras estáticas las que atraviesan los portales las que deseas extender. Ejemplos típicos pueden ser áreas de terreno en forma de malla, o grandes mallas de piso o techo. Por lo general, no deseas que elementos como los marcos de las puertas se extiendan a la sala adyacente - para eso se utiliza el ajuste fino del margen del portal.

Fusionar Mallas

Para mantener el número de llamadas de dibujo al mínimo, el sistema ofrece la opción de fusionar automáticamente mallas similares STATIC dentro de una habitación (también conocido como static batching). Esto puede mejorar el rendimiento en muchos casos. La precisión del descarte se reduce, pero como una sala es una unidad lógica bastante sólida para el descarte, este compromiso suele ser beneficioso.

Simplificación del Plano

En algunos casos, los cascos convexos generados automáticamente para las salas pueden contener un gran número de planos, especialmente si se utilizan superficies curvas. Esto no es ideal porque ralentiza el sistema. Esta opción permite simplificar opcionalmente los cascos. El grado de simplificación puede ser seleccionado por el usuario, entre 0 (sin simplificación) y 1 (máxima simplificación). También es posible anular este valor en salas individuales.

Portales

Portal Activo

Los portales se pueden activar y desactivar durante la ejecución. Esto es especialmente útil si tienes puertas que pueden abrirse y cerrarse.

Bidireccional

Los portales pueden ser bidireccionales o unidireccionales. Los portales bidireccionales son más rápidos de configurar en la mayoría de las circunstancias, pero los portales unidireccionales pueden ser útiles en algunos casos. Por ejemplo, puedes utilizar portales unidireccionales para crear ventanas desde las cuales se pueda ver hacia afuera, pero no hacia adentro. Esto puede ayudar al rendimiento al ver edificios desde exteriores.

Sistemas de partículas

Ten en cuenta que al colocar sistemas de partículas "STATIC", el AABB al convertirse puede tener un tamaño de cero. Esto significa que el sistema de partículas puede ser descartado prematuramente de forma inesperada. Para evitar esto, puedes configurar el modo de portal del sistema de partículas como "DYNAMIC", o alternativamente, agregar un margen de descarte adicional al sistema de partículas en el inspector de geometría.

Multiples mallas

Ten en cuenta que las mallas múltiples se descartarán como un grupo en lugar de individualmente. Por lo tanto, debes intentar mantenerlas localizadas en la misma área siempre que sea posible.