Lightprobes con Multiples Escenas en Unity
Como hacer funcionar light probes en unity con multiples escenas al mismo tiempo.
TLDR: si tienes light probes en multiples escenas que cargas de forma aditiva en unity, necesitas llamar a la función "LightProbes.Tetrahedralize();" despues de cargar tus escenas para que los ligh probes funcionen correctamente.
Los niveles en Aventura en el Castillo de Hender están divididos en multiples escenas, esto es para poder hacer "Bakes" de luces en grupos de cuartos relativamente pequeños, controlando mejor la iluminación en cada lugar.
Para los objetos "dinámicos" como los enemigos, el jugador o los elementos con rigid bodies no se puede hacer Bake de luces entonces se utilizan luces dinámicas y "light probes" un sistema que tiene Unity (y otros game engines) para que la información de los light maps y las luces estáticas pueda afectar a los objetos dinámicos.
La teoría es que:
- creas tu escena con luces estáticas y acomodas todo
- creas los light probes manualmente o usando un "dynamic light probe group" si estas en Unity 6
- Haces el Bake de luces.
- Todos felices?
Pero en mi caso donde estoy trabajando con Multiples escenas cargadas de forma aditiva, cada escena con sus propios light probes, empece a tener varios problemas.

En la izquierda, la escena fue cargada usando el editor de Unity y el piso que se ilumina con light probes y los enemigos están bien iluminados.
En la derecha cuando la escena es cargada en "runtime" por el sistema de level streaming que tenemos las light probes se rompen.
¿porque pasa esto?
La respuesta esta en la documentación de Unity:

Resulta que cuando se cargan escenas de forma Aditiva, la información de los light probes no se actualiza de forma automática (por buenas razones) entonces es necesario "decirle" a Unity que es hora de volver a calcular los light probes.
En mi caso lo que hice fue agregar una sola linea de codígo en mi Script de Manejo de Escenas cuando ya todas las escenas han sido cargadas:
//with all scenes loaded we want to update lightprobes data LightProbes.Tetrahedralize();
Esta linea hace que Unity vuelva a calcular los valores correctos con todas las light probes actuales, lo cual arreglo mi problema:

En la izquierda la escena cargada en runtime con las luces correctas, en la derecha la misma escena cargada en runtime con las luces incorrectas cuando no estaba la linea nueva de código.
Unity tiene algunos eventos que te pueden avisar cuando los light probes necesitan actualizarse, yo no los utilice pero según tu situación a ti podrían servirte, lee mas en los docs.
