Para calcular el sombreado de un objeto 3D, Unity necesita conocer la intensidad, dirección y color de la luz que incide sobre éste.
Estas propiedades son proporcionadas por objetos Light en la escena. Los varios tipos de luz emiten su color asignado de manera diferentes; algunas luces disminuyen con la distancia desde la fuente, y tienen diferentes reglas acerca del ángulo de luz recibida desde la fuente. Los diferentes tipos de fuente de luz disponibles en Unity están detalladas en Tipos de luz.
Unity puede calcular efectos complejos, avanzados de varias maneras, cada una adecuada para diferentes caso de uso.
Generalmente hablando, la iluminación en Unity se puede considerar como ‘realtime’ (tiempo real) o ‘precomputed’ pre-calculada) de cierta manera y ambas técnicas se pueden utilizar en combinación para crear una iluminación de escena inmersiva.
En esta sección daremos una visión general breve de las oportunidades que ofrece cada una de las técnicas diferentes, sus ventajas relativas y sus características individuales de rendimiento.
Por defecto, las luces de Unity - directional, spot, y point, son realtime (de tiempo real). Esto significa que contribuyen una iluminación directa a la escena y se actualiza cada frame. A medida que las luces, y los GameObjects sean movidos dentro de la escena, la iluminación se actualizará inmediatamente. Esto se puede observar en tanto la scene y game view.
Realtime Lights El efecto de la luz en tiempo real solo. Tenga en cuenta que las sombras son completamente negras, ya que no hay luz que rebota. Solamente las superficies que caen dentro del cono del proyector son afectadas.
La iluminación en tiempo real es la manera más básica de iluminar objetos dentro de la escena y es útil para iluminar personajes u otra geometría movible.
Desafortunadamente, los rayos de luz de las luces realtime de Unity no rebotan cuando se usan por sí mismas. Con el fin de crear escenas más reales utilizando técnicas como global illumination (iluminación global) necesitamos habilitar las soluciones de iluminación pre-calculadas de Unity.
Unity puede calcular efectos de iluminación estáticos complejos (utilizando una técnica llamada global illumination, o GI) y almacenarlas en un texture map (mapa de texturas) llamado lightmap. Este proceso de cálculo es referido como baking.
Cuando baking un lightmap, los efectos que traen las fuentes de luz en objeto estáticos de la escena se calculan y los resultados son escritos en texturas que se superponen encima de la geometría de la escena para crear un efecto de iluminación.
Estos lightmaps pueden incluir tanto la luz directa que golpea una superficie como la luz indirecta que rebota de otros objetos o superficies dentro de la escena. Esta textura de iluminación se puede utilizar en conjunto con información de la superficie como los es el color (albedo) y relief (normales) por el Shader asociado con el material del objeto.
Con una iluminación baked, estos lightmaps no pueden cambiar durante el gameplay y por lo tanto son referidos como ‘static’ (estáticos). Las luces en tiempo real se pueden superponer y utilizar aditivamente encima de una escena lightmapped pero no puede cambiar de manera interactiva los lightmaps en sí.
Con este acercamiento, nosotros intercambiamos la habilidad de mover nuestras luces en gameplay por un aumento potencial al rendimiento, ajustándose a un hardware menos poderoso como lo son las plataformas móviles.
Mirar la referencia de la ventana de Lighting y utilizando luces pre-calculadas.
Mientras que los lightmaps estáticos no son capaces de reaccionar a los cambios a las condiciones de iluminación dentro de la escena, precomputed realtime GI (GI en tiempo real pre-calculado) nos ofrece una técnica para actualizar de manera interactiva la iluminación compleja de la escena.
Con este acercamiento, es posible crear ambientes iluminados con una iluminación global detallada con luces que reboten, que corresponden en tiempo real, a cambios de iluminación. Un buen ejemplo de esto sería el tiempo de un sistema de día - dónde la posición y color de la fuente de luz cambia en el tiempo. Con una iluminación tradicionalmente baked, esto no es posible.
Con el fin de entregar estos efectos en framerates jugables, nosotros necesitamos cambiar que cuesta bastante de un proceso en tiempo real a uno que es pre-calculado.
Pre-calcular cambia el peso de calcular comportamientos de iluminación complejos de algo que va a suceder durante el gameplay, a algo que puede ser calculado cuando el tiempo no es crítico. Nosotros nos referimos a esto como un proceso ‘offline’ (fuera de linea).
Para información adicional, por favor ver lighting and rendering tutorial.
Aunque es posible utilizar simultáneamente iluminación Baked GI y Precomputed Realtime GI, tenga en cuenta que el costo que tiene en el rendimiento ambos sistemas simultáneamente es exactamente la suma de los dos. No solamente tenemos que almacenar ambos conjuntos de lightmaps en la memoria de video, pero también se paga el costo de procesamiento de descifrar ambos en shaders.
Los casos que usted desee escoger un método de iluminación sobre otro depende en la naturaleza de su proyecto y las capacidades de rendimiento del hardware destino. Por ejemplo, en móvil donde la memoria de video y capacidad de procesamiento está más limitada, es posible que un acercamiento a una iluminación Baked GI tenga mayor rendimiento. En computadores standalone con un hardware gráfico dedicado, o consolas, es posible utilizar Precomputed Realtime GI o incluso utilizar ambos sistemas simultáneamente.
La decisión sobre qué acercamiento tomar tendrá que ser evaluado basado en la naturaleza de su proyecto en particular y plataforma destino deseada. Recuerde que cuando apunte a un rango de hardware diferente, es muy común determinar el acercamiento escogido al menos potente.
Mirar también: Light Troubleshooting and Performance