La iluminación en Unity está con más funciones que nunca.
El pipeline de iluminación incluye una iluminación global en tiempo real,
adicionalmente a las técnicas tradicionales de baked light mapping.
Estas combinadas con un physically-based rendering (renderizado basado en físicas)
y el standard shader
dan mayor poder y versatilidad para iluminar escenas más complejas.
Unity utiliza physically-based rendering, o PBR
para crear una manera amigable de lograr un aspecto
consistente plausible para los materiales debajo de condiciones de iluminación.
Para hacer esto, Unity modela cómo la luz en realidad se comporta
y sigue las leyes de física acerca de cómo
la luz interactúa con los materiales.
Estos materiales por lo usual son creados utilizando el standard shader.
El standard shader hace que physically
based rendering sea fácil y accesible de utilizar.
Una de las herramientas más poderosas que hay en el pipeline
de Unity es la iluminación global en tiempo real de Unity,
o GI.
Al usar GI, todas las luces en la escena pueden afectar
el objeto dentro de rango con ambas
iluminación directa e indirecta.
La iluminación directa viene de luces
que alumbran directamente a los objetos en la escena.
La iluminación indirecta sin embargo
es la luz reflejada, o que rebota
de las superficies de luz en la escena.
Esta luz indirecta que rebota
puede iluminar objetos cercanos
imitando cómo la luz se comporta en el mundo real
Esta luz indirecta es afectada
por el color de las superficies de las que rebota,
tomando una contribución del color de esa superficie.
La iluminación directa e indirecta va a
mezclarse para crear un aspecto mucho más real.
Adicionalmente a la cámara principal predeterminada
una nueva escena en Unity viene con
un sky box predeterminado
y una luz directional predeterminada alineada
con ese sky box.
Cada escena también contiene valores
predeterminados para la iluminación del ambiente.
La luz del ambiente ilumina todas las superficies en la escena.
La luz de ambiente es controlada por ajustes en los
paneles de iluminación de Environment de la pestaña Lighting.
La luz de ambiente se puede crear ya sea
utilizando un sky box,
un gradiente de usuario generado por 3 colores,
o un solo color.
Todos los objetos agregados a la escena
van a recibir una luz de ambiente
al menos de que el valor de intensidad ambient esté configurado en 0
o los valores del color de la luz de ambiente estén configurados a negro.
Es muy raro, si no imposible
para cualquier material del mundo real
en no tener reflectividad.
Por defecto todos los objetos en la escena
también van a recibir información de reflectividad.
Incluso si el cubo, la esfera y el plano en la escena
no están prendidos y la luz de ambiente es ninguna
estos todavía reciben información de iluminación
en la forma de reflejos.
La fuente por defecto de reflejo es el sky box.
Esto se puede cambiar a que sea un cube map personalizado.
Para recibir ningún reflejo predeterminado
configure ya sea el cube map personalizado a none (ninguno),
o quite el sky box.
Vale la pena tener en cuenta que el sky box predeterminado
es generado procedimentalmente
y los sky boxes nuevos procedimentalmentes
pueden ser creados y guardados como assets.
Cuando ilumine escenas en Unity
podemos trabajar con una iluminación en tiempo real,
con iluminación baked,
o una mezcla de ambas.
La iluminación en tiempo real es modificada más fácil en tiempo de ejecución.
pero viene con un costo al rendimiento.
El Baked lighting (iluminación baked) por el contrario, pre-cálcula
información de iluminación más detallada
y la guarda en una textura light mapped en disco.
Esta información light map es luego
leída de la textura en tiempo de ejecución,
evitando la necesitad de hacer cualquier
cálculo de iluminación cuando el proyecto esté ejecutándose.
Esto ahorra rendimiento,
pero al precio de cambios dinámicos en la escena.
Los baked light maps no son actualizados en tiempo de ejecución.
Las luces pueden cambiarse entre realtime (tiempo real), baked,
y una mezcla de iluminación basada por luz.
El uso exclusivo de una iluminación baked
es más apropiado para plataformas destino
como lo son dispositivos móviles con capacidades de rendimiento menores.
El sistema de light mapping puede funcionar
continuously (continuamente) o por demand (demanda).
Cuando continuous baking sea seleccionado
los cambios de iluminación serán baked en el fondo mientras se edita.
Estos cambios pueden ser propiedades
ajustadas en el inspector,
u objetos cambiados en la escena.
Cuando continuous baking no sea seleccionada
los cambios solo se van a pre-visualizar en demanda.
Cuando el botón Build en el panel de lighting sea seleccionado.
En esta escena hay una luz directional
que viene a través de una claraboya en el techo.
Esta luz contribuye a la iluminación de la escena completa
a medida que la luz rebota de las superficies
que ilumina directamente,
a otras superficies cercanas de una manera indirecta.
Esta luz continua iluminando
indirectamente superficies cercanas
hasta que la fuerza de la luz se desvanece
y no puede rebotar más.
Disminuya la intensidad de la luz
y la iluminación de la escena disminuye de acuerdo a esto.
Del mismo modo, si la luz directional
es girada para iluminar directamente
una diferente parte de la escena,
ahora iluminará la escena de una manera diferente,
con ambas iluminación directa e indirecta.
Ya que los materiales creados con un standard shader
pueden imitar una amplia variedad de superficies físicas
y los materiales diferentes pueden tener diferentes
cantidades de refletividad
esto puede afecta la iluminación de la escena.
Para ayudar a balancear esto la Bounce Intensity se puede ajustar
en una base por luz
o globalmente al ajustar los ajustes
en el panel de lighting.
Los ajustes pueden ser hechos aquí para cambiar
artificialmente el rebote potencial de la luz de una superficie iluminada.
Ajuste la cantidad de luz indirecta
en la escena, y más.
Adicionalmente a las luces nosotros podemos utilizar
superficies emisivas para contribuir a la iluminación de la escena.
Esta escena está prendida con una variedad de luces y
tipos de luces, incluyendo superficies emisivas.
Las superficies Emissive (emisivas) son una fuente de luz,
pero se comportan muy parecido a una luz que rebota indirectamente.
Las superficies emisivas principales en la escena
se encuentran en el cruce principal del corredor.
Pero hay paneles adicionales ubicados a través de la escena.
Todas estas superficies emisivas utilizan
la propiedad Emission del standard shader
al ajustar la escala Emissive.
El valor float alado de la propiedad Emission
y al agregar un toque de color,
el animo de nuestra escena cambia.
A medida que estas luces pueden participar en un light mapping en tiempo real
estas pueden se controladas en tiempo de ejecución utilizando
código o una animación para crear
cambios complejos en el animo
mientras nuestros proyectos se están ejecutando.
El factor final que contribuye en iluminar
una escena en Unity son probes.
Hay 2 tipos de probes en Unity.
Light probes
y reflection probes.
Los light probes toman muestras de la iluminación en la escena
en diferentes posiciones en el mundo.
La información en estos probes puede ser utilizada
para iluminar elementos dinámicos en la escena
como lo son personajes u otros objetos en movimiento
a un precio bajo al rendimiento.
Los Reflection probes por el contrario
funcionan como un solo punto de referencia para
calcular reflejo
Rodeando cada reflection probe
está un cuboid que específica
lo que debería ser incluido en ese reflejo.
Estos probes toman muestras de los elementos alrededor de ellos
utilizando una proyección de una caja,
y almacena esa información en un cube map.
Los materiales con superficies reflectivas
que están en objetos dentro del volumen del reflection probe
pueden luego referenciar este cube map
parar crear superficies reflectivas.
Por defecto hay un reflection probe
integrado en cada escena.
Este reflection probe por defecto
refleja el sky box para crear reflejos básicos.
Para más detalles en los reflejos
se requiere de reflection probes
adicionales y posicionados adecuadamente
para los objetos reflectivos.
Vale la pena notar que physically-based rendering
funciona mejor en el linear colour space.
Linear colour space va a dar
un resultado más real y matemáticamente correo.
Para mejores resultados asegúrese de que
el colour space esté configurado a linear
en la ventana de los
player settings del proyecto.
Linear colour space es el ajuste predeterminado.
Sin embargo, tenga cuidad que no todas las plataformas
soportan linear colour space,
y que gamma es el colour space
requerido actualmente para la mayoría de plataformas móviles.
Cuando mire todos estos aspectos
para iluminar una escena en Unity
estos pueden ser agregados efectivamente
con los factores principales de contribución.
Ambient light (luz de ambiente).
Reflections (reflejos).
y fuentes de luz.
Trabajando con materiales creados
con el standard shader siendo
dibujados utilizando physically-based rendering
con iluminación global para calcular
la iluminación indirecta y crear
escenas más complejas y reales.