Nodos de Oclusión

Además de la ocultación a través de Salas y portales, Godot también tiene la capacidad de proporcionar una ocultación básica utilizando nodos Occluder geométricos simples. Estas son formas geométricas que se muestran en el editor utilizando gizmos, pero son invisibles en tiempo de ejecución.

Cualquier objeto que esté completamente oculto por la forma (por detrás o, en algunos casos, en su interior) será eliminado en tiempo de ejecución. Están diseñados para ser simples de usar y económicos en tiempo de ejecución, pero el compromiso es que es posible que no sean tan efectivos para la ocultación como Salas y portales. Sin embargo, aún pueden mejorar significativamente el rendimiento en algunas situaciones.

Nota

Es importante entender que los ocultadores geométricos funcionan probando la caja delimitadora alineada con los ejes (AABB, por sus siglas en inglés) del objeto oculto en relación al ocultador. El AABB debe estar completamente oculto para ser eliminado. La consecuencia de esto es que los objetos más pequeños tienen más probabilidades de ser eliminados de manera efectiva que los objetos más grandes, y los ocultadores más grandes tienden a ser mucho más efectivos que los más pequeños.

Una ventaja importante de los nodos Occluder es que son completamente dinámicos. Por ejemplo, si colocas un nodo Occluder como hijo de una nave espacial, este se moverá a medida que muevas el objeto padre.

La razón por la que los nodos Occluder son tan económicos en términos de rendimiento es que el motor elige dinámicamente los ocultadores más relevantes en tiempo de ejecución, según el punto de vista actual de la cámara. Esto significa que a menudo puedes tener cientos de ocultadores presentes en la escena, pero solo los más relevantes estarán activos en cada momento.

El propio nodo Occluder es un contenedor para un recurso OccluderShape, que determina la funcionalidad. Para comenzar, agrega un nodo Occluder a tu árbol de escena.

Truco

Verás un triángulo de advertencia amarillo que te indica que debes establecer un OccluderShape desde el inspector antes de que el Occluder sea funcional.

OccluderShapeSphere

La esfera es uno de los ocultadores más simples y rápidos, y es fácil de configurar y posicionar. La desventaja es que la esfera solo tiende a tener sentido en ciertos diseños de niveles de juego y es más adecuada para la geometría del terreno o de fondos orgánicos.

Una vez que hayas añadido un OccluderNode y hayas elegido añadir una nueva OccluderShapeSphere en el inspector, haz clic en OccluderShapeSphere en el inspector para mostrar los parámetros.

../../_images/occluder_shape_sphere_inspector.png

A diferencia de muchos Nodos, el OccluderShapeSphere puede almacenar múltiples esferas en el mismo objeto. Esto es más eficiente en el motor y mantiene tu SceneTree más ordenada. No es necesario almacenar todas tus esferas en un solo Occluder, ya que podría volverse complicado de gestionar, pero es perfectamente razonable añadir 10 o más esferas. Son muy económicas y, a menudo, cuantas más coloques, mejor coincidirán con tu geometría.

Para almacenar múltiples esferas, se almacenan como un Array. Si haces clic en el Array en el inspector, puedes aumentar el tamaño del Array para añadir una.

../../_images/occluder_shape_sphere_terrain.png

La esfera aparecerá como un objeto esférico pequeño de color rosa en la ventana del editor. Hay dos manipuladores en cada esfera. El manipulador más grande en el centro te permite mover la esfera alrededor en el espacio local del Occluder, y el manipulador pequeño te permite ajustar el radio.

Aunque puedes cambiar la posición de la esfera utilizando la transformación del nodo Occluder en el inspector, esto mueve todo el array de esferas. Cuando deseas usar múltiples esferas en un occluder, los manipuladores realizan esta tarea. Para permitir el posicionamiento en 3D, el gizmo solo moverá la posición 3D en los dos ejes principales según el punto de vista en el editor. Es más fácil entender esto probándolo que explicándolo.

Truco

Hay una función más útil en el editor cuando se utilizan múltiples esferas. Si haces clic en el botón de la barra de herramientas Center Node, se recalcularán las posiciones locales de las esferas en relación con el promedio de todo el nodo y se cambiará la transformación del nodo Occluder. Esta es una función práctica que facilita la colocación de las esferas.

Durante la ejecución, las esferas se pueden activar y desactivar cambiando la visibilidad del nodo Occluder, y el nodo se puede mover, escalar, rotar, etc.

Un caso de uso común para las esferas occluder es proporcionar ocultación en terrenos montañosos o colinas. Al colocar esferas dentro de las montañas, puedes evitar que los árboles, las plantas, los edificios y los objetos se rendericen detrás de las montañas. Con un poco de creatividad, también se pueden utilizar para objetos en movimiento, como naves espaciales grandes, planetas, etc.

OccluderShapePolygon

El polígono es un occluder generalista. Puede adaptarse bien a casi todas las situaciones y puede proporcionar rápidamente un grado de culling de occlusión a la mayoría de las escenas.

Como con todos los occluders geométricos, la clave del éxito radica en hacerlos grandes. No es necesario que coincidan con la geometría renderizada, y en muchos casos funcionarán mejor si se extienden más allá de la geometría renderizada para hacerlos lo más grandes posible (sin bloquear líneas de visión legítimas). La razón por la que deben ser grandes es que, en general, solo ocultarán objetos cuyo AABB esté completamente oculto por el polígono. Para ocultar objetos grandes, necesitarás occluders grandes.

Nota

Al igual que con todos los occluders, los polígonos pueden superponerse, y en muchos casos funcionarán mejor si se superponen (es más probable que oculten objetos en los límites).

Edición y detalles

Los polígonos occluder se editan como una lista de puntos que definen un polígono convexo, en un solo plano. Para mantener el polígono en un solo plano, los puntos se definen en un espacio 2D en lugar de 3D. La orientación, posición y escala del polígono se toman del transform del nodo Occluder.

../../_images/occluder_shape_polygon_inspector.png

Si creas un Occluder y le añades un recurso OccluderShapePolygon, por defecto creará 4 puntos iniciales formando un rectángulo. Si mueves la posición y rotación del nodo Occluder, verás cómo el rectángulo sigue al nodo. Cuando seleccionas el Occluder en el editor, aparecerán manipuladores para cada uno de los puntos. En realidad, puedes hacer clic y arrastrar estos manipuladores para ajustar tu polígono al entorno de tu escena.

../../_images/occluder_shape_polygon.png

No estás limitado a 4 puntos, puedes añadir y eliminar puntos en el inspector, pero ten en cuenta que:

  • El editor automáticamente ajustará tus puntos para formar un polígono convexo. Si arrastras un punto a una posición que formaría un polígono cóncavo, será ignorado.

  • En general, cuanto menos aristas (y por lo tanto puntos), más rápido funcionará el polígono durante la ejecución. Un polígono con 6 aristas deberá realizar el doble de cálculos que un polígono con 3 aristas. En la mayoría de los casos, 4 es un buen número.

../../_images/occluder_shape_polygon2.png

Hoyos

Los niveles de juego del mundo real no siempre tienen áreas grandes y continuas que deban ser ocultadas. A menudo, las paredes tienen puertas o ventanas, las cuevas tienen entradas, etc. En algunos casos, tenemos que conformarnos colocando varios OccluderShapePolygons alrededor de una abertura de este tipo, pero los polígonos occluder tienen un truco más bajo la manga: pueden tener "agujeros".

En el inspector notarás que, además de un conjunto de puntos para el polígono, el polígono tiene un conjunto de puntos para un solo "agujero". Si agregas 3 o 4 puntos a tu polígono, verás que aparecen en el editor como manipuladores más pequeños. Puedes arrastrarlos de la misma manera que los manipuladores del polígono para formar un agujero convexo.

../../_images/occluder_shape_polygon_hole.png

El agujero puede estar completamente dentro del polígono (como una ventana), adyacente al borde (como una puerta) o cruzar completamente el borde del polígono, para hacer que el occluder sea cóncavo. La forma en que funciona el agujero es que la ocultación sigue una regla simple:

  • Si el objeto a ocultar está completamente oculto por el polígono, se verifica si se puede ver a través del agujero. Si el objeto toca el agujero, no se oculta, pero si está oculto por el polígono y no se ve a través del agujero, entonces se oculta.

Nota

Colocar agujeros suele ser mucho más conveniente y funciona de manera más rápida y eficiente durante la ejecución que crear muchos OccluderShapePolygons más pequeños.

Limite de Agujeros

La principal limitación de los agujeros es que solo puede haber uno por polígono. Si tienes una situación que requiere dos o más agujeros, tienes una opción:

  • Combinar el área de los dos agujeros en un solo agujero más grande (si están cerca uno del otro).

  • Usa dos o mas OccluderPolygons.

Truco

Recuerda que si estás utilizando más de un polígono, pueden superponerse y debes aprovechar esto en tu beneficio.

¿Cuantos poligonos Occluder son necesarios?

Esto depende mucho de tu escena, pero en general, puedes obtener buenos resultados con 3 o 4 polígonos bien ubicados. Después de eso, depende completamente de ti cuánto tiempo deseas dedicarle. Colocar occluders es un poco como una forma de arte, y te volverás mejor en ello y aprenderás nuevos trucos a medida que trabajes con ellos.

Algunas ideas:

  • Construya sus niveles tomando ventaja de la oclusion.

Este es uno de los secretos de los profesionales. Un buen diseño de nivel no se trata solo de lo que el juego requiere en términos de jugabilidad, sino que también debe ser construido teniendo en cuenta la ocultación.

  • Cuando estés en un edificio con varios pisos, intenta colocar un polígono occluder entre cada piso, con un agujero donde la escalera hace la transición entre ellos. Esto puede potencialmente ocultar pisos enteros y mejorar en gran medida el rendimiento. Es una técnica efectiva para reducir la carga de renderizado en interiores con múltiples niveles.

  • No tengas miedo de extender tus polígonos occluder más allá de los límites de la geometría visible para ocultar más objetos, por ejemplo, hacia el suelo o el cielo.

Usando poligonos dinamicamente

Al igual que todos los occluders geométricos, los polígonos no están limitados a la geometría estática (sin movimiento). Puedes colocarlos en objetos en movimiento. Incluso puedes cambiar la posición relativa de los puntos en tiempo real.

Algunas orientaciones:

  • Hay un ligero costo al mover los polígonos, los puntos de los polígonos deben ser transformados en la CPU cada vez que cambia su transformación.

Esto no es algo de lo que preocuparse en exceso, incluso las CPUs son bastante rápidas en la transformación de puntos, y en general, los polígonos tienen muy pocos puntos en comparación con la geometría renderizada. Pero es algo a tener en cuenta si deseas crear, por ejemplo, 10,000 naves espaciales simultáneas, todas con polígonos occluder.

  • Cambiar la transformación del nodo del polígono (por ejemplo, al mover el objeto padre) es más económico que cambiar los puntos en sí. Utiliza la transformación en lugar de modificar los puntos siempre que sea posible.