Baked lightmaps

Introducción

Los mapas de luz baked son un flujo de trabajo alternativo para añadir iluminación indirecta (o baked) a una escena. A diferencia del enfoque GI Probes, los mapas de luz baked funcionan bien en PCs y dispositivos móviles de gama baja, ya que casi no consumen recursos en tiempo de ejecución.

A diferencia de los "Giprobe", los Baked Lightmaps son completamente estáticos. Una vez horneados, no pueden ser modificados en absoluto. Tampoco proporcionan reflejos a la escena, así que usar Reflection Probe junto con ella en interiores (o usar un cielo en exteriores) es un requisito para obtener buena calidad.

Al ser horneados, tienen menos problemas que "GIProbe" en cuanto al desteñido ligero, y la luz indirecta puede verse mejor si se usa el modo Raytrace en la configuración de alta calidad (pero hornear puede llevar un tiempo).

Al final, decidir qué enfoque de iluminación indirecta es mejor depende de su caso de uso. En general, el GIProbe se ve mejor y es mucho más fácil de instalar. Sin embargo, para la compatibilidad móvil o de gama baja, los Baked Lightmaps son su única opción.

Comparaciones visuales

Aquí hay algunas comparaciones de cómo se ven los Baked Lightmaps vs. el GIProbe. Noten que los mapas de luz son más precisos, pero también sufren del hecho de que la iluminación está en una textura desenvuelta, así que las transiciones y la resolución pueden no ser tan buenas. El GIProbe parece menos preciso (ya que es una aproximación), pero más suave en general.

../../_images/baked_light_comparison.png

Configurando

En primer lugar, antes de que el mapeador de luz pueda hacer algo, los objetos a hornear necesitan una capa de UV2 y un tamaño de textura. Una capa UV2 es un conjunto de coordenadas secundarias de textura que asegura que cualquier cara del objeto tiene su propio lugar en el mapa UV. Las caras no deben compartir píxeles en la textura.

Hay algunas maneras de asegurar que tu objeto tiene una capa de UV2 y un tamaño de textura únicos:

Desplegar desde de su 3D DCC

Una opción es hacerlo desde tu aplicación 3D favorita. Este enfoque no es generalmente recomendado, pero se explica primero para que sepas que existe. La principal ventaja es que, en los objetos complejos que se quieran reimportar mucho, el proceso de generación de la textura puede ser bastante costoso dentro de Godot, por lo que tenerlo desenvuelto antes de la importación puede ser más rápido.

Simplemente despliegue la segunda capa UV2.

../../_images/baked_light_blender.png

Y se importan normalmente. Recuerda que tendrás que establecer el tamaño de la textura en la malla después de la importación.

../../_images/baked_light_lmsize.png

Si se usan mallas externas en la importación, el tamaño se mantendrá. Tenga cuidado de que la mayoría de los desenvolvedores en los DCC 3D no están orientados a la calidad, ya que están destinados a trabajar rápidamente. La mayoría de las veces necesitarás usar costuras u otras técnicas para crear un mejor desenvolvimiento.

Desplegar desde Godot

Godot tiene la opción de desplegar mallas y visualizar los canales UV. Se puede encontrar en el menú Malla:

../../_images/baked_light_mesh_menu.png

Esto generará un segundo conjunto de coordenadas UV2 que puede ser usado para hornear, y también fijará el tamaño de la textura automáticamente.

Unwrap al importar escena

Este es probablemente el mejor enfoque en general. La única desventaja es que, en los modelos grandes, el proceso de unwrapping puede llevar un tiempo considerable en la importación. Simplemente selecciona la escena importada en el panel de Sistema de Archivos, luego ve al panel Importar. Allí se puede modificar la siguiente opción:

../../_images/baked_light_import.png

El modo Light Baking debe ser ajustado a "Gen Lightmaps ". También se debe proporcionar un tamaño de texto en unidades mundiales, ya que esto determinará el tamaño final de la textura del mapa de luz (y, en consecuencia, el relleno de UV en el mapa).

El efecto de establecer esta opción es que todas las mallas dentro de la escena tendrán sus mapas de UV2 correctamente generados.

Como advertencia: Al reutilizar una malla dentro de una escena, toma en cuenta que se generarán UVs para la primera instancia encontrada. Si la malla se reutiliza con diferentes escalas (y las escalas son muy diferentes, más de la mitad o dos veces), esto resultará en mapas de luz ineficientes. Simplemente no reutilices una malla de origen a diferentes escalas si estás planeando usar lightmapping.

Comprobando el UV2

En el menú de malla mencionado anteriormente, se pueden visualizar las coordenadas de la textura del UV2. Asegúrate, si algo está fallando, de comprobar que las mallas tienen estas coordenadas UV2:

../../_images/baked_light_uvchannel.png

Configurando la escena

Antes de que se haga algo, un nodo de BakedLightmap debe ser añadido a una escena. Esto permitirá que la luz se hornee en todos los nodos (y subnodos) de esa escena, incluso en las escenas instantes.

../../_images/baked_light_scene.png

Se puede instanciar una subescena varias veces, ya que esto es apoyado por el baker, y a cada una se le asignará un mapa de luz propio (sólo asegúrese de respetar la regla sobre el escalado mencionada anteriormente):

Configurar los límites

Lightmap necesita un volumen aproximado del área afectada porque lo utiliza para transferir la luz a los objetos dinámicos que se encuentran en su interior (más sobre eso más adelante). Sólo cubre la escena con el volumen como lo haces con "GIProbe":

../../_images/baked_light_bounds.png

Configurando mallas

Para que un nodo de MeshInstance participe en el proceso de baking, debe tener activada la propiedad "Use in Baked Light".

../../_images/baked_light_use.png

Cuando se generan automáticamente mapas de luz en la importación de escenas, esto se activa automáticamente.

Configurando luces

Las luces se baked con luz indirecta por defecto. Esto significa que los mapas de sombras y la iluminación siguen siendo dinámicos y afectan a los objetos en movimiento, pero la luz que rebota de esa luz se baked.

Las luces pueden ser desactivadas (sin bake) o totalmente baked (directas e indirectas). Esto se puede controlar desde el menú Bake Mode en las luces:

../../_images/baked_light_bake_mode.png

Los modos son:

  • Disabled: La luz es ignorada en la cocción. Ten en cuenta que ocultar una luz no tendrá ningún efecto para la baking, así que esto debe ser usado en su lugar.
  • Indirect: Este es el modo por defecto. Sólo se baked la iluminación indirecta.
  • All: Tanto la iluminación indirecta como la directa serán baked. Si no quieres que la luz aparezca dos veces (dinámica y estática), simplemente ocúltala.

Calidad de baking

BakedLightmap utiliza, por simplicidad, una versión voxelizada de la escena para calcular la iluminación. El tamaño del voxel puede ser ajustado con el parámetro Bake Subdiv. Más subdivisión resulta en más detalles, pero también toma más tiempo para hornear.

En general, los valores por defecto son lo suficientemente buenos. También hay una Subdivisión de captura (que siempre debe ser igual o menor que la subdivisión principal), que se utiliza para capturar la luz en los objetos dinámicos (más sobre eso más adelante). Su valor por defecto también es lo suficientemente bueno para la mayoría de los casos.

../../_images/baked_light_capture.png

Además del tamaño de la captura, la calidad puede ser modificada por el ajuste del Modo de horneado. Se proporcionan dos modos de captura indirecta:

../../_images/baked_light_mode.png
  • Voxel Cone: Trace: Es el predeterminado; es menos preciso, pero más rápido. Se ve similar a (pero ligeramente mejor que) GIProbe.
  • Ray Tracing: Este método es más preciso, pero puede tardar bastante más tiempo en hornearse. Si se usa en calidad baja o media, algunas escenas pueden producir granulado.

Horneado

Para empezar el proceso de horneado, sólo tienes que pulsar el gran botón Hornear mapas de luz en la parte superior al seleccionar el nodo BakedLightmap:

../../_images/baked_light_bake.png

Esto puede llevar de segundos a minutos (u horas) dependiendo del tamaño de la escena, el método de bake y la calidad seleccionada.

Configurando el bake

Hay varias opciones más para hornear:

  • Bake Subdiv: El mapa de luz de Godot utiliza una cuadrícula para transferir la información de la luz; el valor por defecto está bien y debería funcionar en la mayoría de los casos. Auméntalo en caso de que quieras una mejor iluminación en los pequeños detalles o tu escena sea extensa.
  • Captura de la Subdivisión: Esta es la cuadrícula utilizada para la captura de información en tiempo real (iluminación de objetos dinámicos). El valor por defecto es generalmente el correcto, usualmente más pequeño que Bake Subdiv y no puede ser más grande que él.
  • Calidad del horneado: Se proporcionan tres modos de calidad de horneado, Bajo, Medio y Alto. Una calidad más alta tomará más tiempo.
  • Modo de hornear: El horneador puede usar dos técnicas diferentes: Voxel Cone Tracing (rápido, pero aproximado), o RayTracing (lento, pero preciso).
  • Propagación: Usado para el modo Voxel Cone Trace. Funciona igual que en GIProbe.
  • HDR: Si está desactivado, los mapas de luz son más pequeños, pero no pueden capturar ninguna luz sobre el blanco (1.0).
  • Image Path: Donde se guardarán los mapas de luz. Por defecto, en el mismo directorio de la escena ("."), pero esto puede ser cambiado.
  • Extents: Tamaño del área afectada (puede ser editada visualmente)
  • Datos de la luz: Contiene los datos de la luz horneada después de hornear. Las texturas se guardan en el disco, pero también contiene los datos de captura de los objetos dinámicos, que pueden ser un poco pesados. Si estás usando los formatos .tscn (en lugar de .scn), puedes guardarlos en el disco.

Objetos dinámicos

En otros motores o implementaciones de mapas de luz, se requiere colocar manualmente pequeños objetos llamados "sondas de luz" alrededor del nivel para generar datos de captura. Esto se utiliza para, entonces, transferir la luz a los objetos dinámicos que se mueven alrededor de la escena.

Sin embargo, esta aplicación de la mapeo de luz utiliza un método diferente. El proceso es automático, así que no tienes que hacer nada. Sólo mueve tus objetos alrededor, y se iluminarán en consecuencia. Por supuesto, tienes que asegurarte de establecer los límites de la escena en consecuencia o no funcionará.

../../_images/baked_light_indirect.gif