informacion[arroba]academiaandroid.com +34 958084455

Iluminación en Unity 3D: tipos y propiedades

Post Series: Conociendo Unity3D (IV)

Continuando con los GameObject de Unity 3D, y como parte de nuestro aprendizaje en el uso de este motor de juegos, vamos a explicar uno de los elementos esenciales para crear videojuegos de mayor calidad y realismo: el uso de la iluminación. Este elemento nos posibilita el diseño de ambientes visuales más coloridos, construyendo escenas que enriquecen la experiencia del usuario a lo largo del juego, y nos permiten mostrar escenarios más acordes a ambientes reales.

Dedicaremos dos publicaciones a este GameObject, En esta primera veremos cómo podemos añadir luz a la escena, qué tipos de iluminación nos ofrece Unity  y qué propiedades podemos configurar. También hablaremos brevemente de las formas que utiliza Unity para calcular la iluminación de una escena: en prerenderizado o en tiempo real.

Añadir iluminación a la escena

Podemos añadir un efecto de iluminación a cualquier escena de nuestro videojuego de dos formas:

  1. A partir de GameObjects que define Unity por defecto
  2. Mediante un componente light que implementará esa funcionalidad en otros objetos disponibles en el escenario, .

GameObject Light

Podemos añadir uno de los objetos de iluminación  seleccionándolos del menú:

GameObject > Light > … (en versiones anteriores a Unity 5.0: GameObject > Create Other > …)

y escogiendo cualquiera de las opciones que se puede apreciar en la siguiente imagen, y que describiremos en el siguiente apartado de manera individual:

Opciones Objeto Iluminación en menú editor Unity3D

Componente light

Además de la opción anterior, podemos también añadir un componente light a cualquier GameObject disponible en la escena. Para ello bastará con pulsar el botón “Add Component” que se puede encontrar al final de la ventana “Inspector”, y a continuación seleccionar la ruta Rendering > Light:

Light SphereInspector Light Component

Podremos escoger el tipo de luz que queremos seleccionándola en la opción ‘Type’, el primer campo que aparece en el cuadro (ver imagen superior)

Tipos de iluminación

Describimos ahora los diferentes tipos de luz que nos ofrece Unity y posteriormente, en una tabla, explicaremos detalladamente cada una de las propiedades que podemos configurar.

Directional Light

GameObject que permite iluminar escenas y objetos, construyendo un ambiente visual más real, situándolas a gran distancia afectando a toda la escena. Este tipo de luz es muy utilizada en escenas al aire libre para la simulación de luz solar y lunar en un videojuego. Afectarán a todos los objetos de la escena y a nivel gráfico son las que menos recursos necesitan.

En las siguientes imágenes, vemos en la primera, como hemos añadido el objeto Directional Light a la escena, y abajo, vemos la propiedades que podemos configurar en dicho objeto en el cuadro Inspector.

Vista de Directional Light en Unity 3DCuadro opciones de Inspector Directional Light

Point Light

Este tipo de luz alumbrará desde un punto por igual en todas direcciones. Son muy comunes para representar explosiones o el diseño de lámparas en una estancia. El uso de sombras con este tipo de luz consume un mayor número de recursos gráficos.

En las imágenes de abajo vemos cómo hemos añadido este objeto a la escena y el cuadro de propiedades que podemos configurar:

Vista de Point Light en Unity 3DCuadro opciones de Inspector Point Light

SpotLight

Alumbrarán en un sola dirección, que vendrá indicada por el gizmo en forma de cono que puede visualizarse en la escena (sólo iluminarán los objetos dentro del cono). Son muy utilizadas en zonas de interior, o por ejemplo simulando los focos de un vehículo. Son las más costosas a nivel de recursos gráficos. Vemos igualmente unas imágenes del objeto y sus propiedades:

Vista de Spot Light en Unity 3DCuadro opciones de Inspector Spot Light

Area Light

Permite emitir luz desde un lado de un área rectangular de un plano, y afecta a todos los objetos dentro del rango de la luz definido. El plano vendrá determinado por el ancho y alto establecido en sus propiedades. Las sombras que define un objeto, serán más suavizadas que los tipos point light y drectional light, debido a que la luz es emitida desde toda la superficie del rectángulo.

Al tratarse de un sistema de iluminación bastante costoso a nivel gráfico (cálculos de procesador muy elevados), sólo es posible utilizar este tipo de iluminación en tiempo de prerenderizado.

Esta opción solo está disponible en la versión Pro de Unity.

Diagrama Area LightInspector Area Light

Propiedades de cada tipo de iluminación

En la siguiente tabla, se describirán las propiedades que definen cada tipo de luz:

Propiedad Función
Type Permite seleccionar el tipo de iluminación del objeto. Proporciona los valores de iluminación comentados en el apartado anterior: Directional (ilumina toda la escena, situándola a gran distancia), Point (alumbrará desde un punto por igual en todas direcciones, afectando a los objetos situados dentro del valor de la propiedad Range), Spot (alumbrarán en un sola dirección, que vendrá indicada por el cono, afectando sólo a los objetos que se sitúen dentro de la región definida para el cono, a partir de las propiedades Spot Angle y Range), y Area (permite emitir luz desde un lado de un área rectangular de un plano, y afecta a todos los objetos dentro del rango de la luz definido).
Baking Luz proyectada en tiempo real, prerenderizada o sistema mixto.
Range El valor asignado especifica hasta que distancia se proyectará la luz a partir del centro del objeto. Esta propiedad sólo la definen los tipos Spot y Point.
Spot Angle Define el ángulo en grados del cono para el tipo Spot.
Color Especifica el color de la luz emitida (proporciona un editor de colores muy práctico).
Intensity Permite especificar la intensidad de brillo de la luz. Para los tipos Point/Spot/Area se establece un valor inicial de 1, para el tipo Directional se establece en 0.5.
Bounce Intensity Capacidad de rebote de la luz sobre los objetos.
Shadow Type Sólo disponible en la versión Pro de Unity. Permite seleccionar el tipo de sombra, de entre los siguiente valores: No Shadows (no define sombras), Hard Shadows (sombras más duras), y Soft Shadows (sombras suaves). En estas dos últimas opciones posibles, se establecen las siguientes propiedades: Strength (define la oscuridad de la sombra con valores entre 0 y 1), Resolution (establece el detalle de las sombras), y Bias ().
Cookie Describe el color de la luz emitida.
Cookie Size Propiedad sólo disponible para el tipo Directional Light.
Draw Halo Si esta opción está activa, se dibujará un halo de luz con un radio igual al valor de la propiedad Range.
Flare Propiedad que permite establecer una destello renderizado en la posición de la luz. Esta característica permite simular el brillo que desprende un objeto al proyectar luz desde el centro de su posición. Algunos de los recursos disponibles en Unity serían 50mm Zoom (muy útil para simular el haz de luz que se recibe en un ambiente real), Small Flare (destello menor que puede utilizarse para la simulación de estrellas en el cielo), y Sun (muy utilizado para simular el destello al mirar en la dirección del sol).
Render Mode Permite establecer la importancia de la luz, afectando a la fidelidad y rendimiento de la misma.
Culling Mask Permite seleccionar que grupo de objetos pertenecientes a una capa se verán afectados por la luz definida. Se pueden seleccionar los siguientes valores: Auto (renderización de la luz en tiempo de ejecución que se establece a partir de la posición y brillo de la luz), Important (renderizado de la luz con mayor calidad por pixel), y Not Important (renderizado de luz más rápido, que se calcula a nivel de vértice, sin mostrar efectos de sombras, reflejos etc.).
Width Propiedad sólo disponible en el tipo de luz Area Light (versión Pro de Unity), que define la anchura del área rectangular de la luz.
Height Propiedad sólo disponible en el tipo de luz Area Light (versión Pro de Unity), que define la altura del área rectangular de la luz.

Iluminación en pre-renderizado y en tiempo real

Otro de los conceptos que es conveniente tener muy claro son las formas que utiliza Unity para el cálculo de la iluminación aplicada a una escena de un videojuego, distinguiendo entre el cálculo en tiempo real o el realizado antes de renderizar cada objeto en la escena. Para ello, a continuación se comentarán ambas formas de iluminación:

  • Iluminación en tiempo real: esta técnica recalcula constantemente la iluminación para mantener coherencia en la escena cuando los objetos o luces se muevan. Este tipo de iluminación, necesita de cálculos muy costosos en cuanto a procesamiento, y en el caso de utilizar muchas luces en la escena puede ocasionar problemas de rendimiento (muy a tener en cuenta si la plataforma de destino es un dispositivo móvil).
  • Iluminación en prerenderizado: de mayor calidad que la iluminación en tiempo real, se encarga de prerenderizar la iluminación con sombras para cada objeto que interviene en la escena. Se recomienda el uso de esta técnica para la iluminación de escenas estáticas.

Desde Unity, está disponible una herramienta que permite precalcular la iluminación, construyendo un mapa (textura) por cada objeto, añadiéndose automáticamente al material del mismo, para aplicarle luz y sombras estáticas. Esta herramienta se denomina Beast de Illuminate Labs y es posible acceder a ella desde el menú Window > Lighting.

Light mapping

En la siguiente publicación incluiremos un video donde además de esta mostrar parte de lo explicado en este tutorial, desarrollaremos un sencillo ejemplo, simulando que nuestro jugador lleva una linterna que va iluminando la escena mientras se mueve por ella.

This Post Has One Comment

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Para evitar robots, por favor completa esta sencilla operación *