lunes, 30 de enero de 2017

Configuración de la iluminación global.

Dentro del apartado gráfico una de las partes más importantes y más influyentes en el resultado final del juego es la iluminación. Distintas configuraciones de la iluminación puede darle, a una misma escena, un aspecto más o menos emocional dependiendo de la luz que se le aplique, su intensidad, su color, etc.

Unity, desde la versión 5, incorpora una característica muy interesante en este aspecto y es la iluminación global. Aunque no vamos a explicar en qué consiste exactamente la iluminación global explicaremos cuatro cosas sobre el tema y siempre podéis ver el artículo en el manual de unity donde se comenta más detalladamente.

A grandes rasgos se puede decir que es la iluminación que afecta, directa e indirectamente, sobre un objeto.

La iluminación directa sobre un objeto es la iluminación de las fuentes de luz que tiene la propia escena y que inciden directamente en el objeto, como la luz del sol.

La iluminación indirecta seria la luz rebotada de otros objetos que tiene alrededor y que, dependiendo del material de estos objetos, también influye sobre la luz que se le aplica a nuestro objeto. Así por ejemplo, si tenemos una pared roja y justo al lado un cubo blanco, si la luz da directamente sobre la pared, el cubo se teñirá un poco de rojo, porque la luz que rebota sobre la pared roja influye sobre la superficie del cubo blanco.

Como una imagen vale más que mil palabras, a continuación se muestra un ejemplo visual de la iluminación global.

Ejemplo de iluminación global en Unity
Ejemplo de iluminación global en Unity.


Como se puede ver, la imagen de la izquierda es sin iluminación (sólo con el color de cada objeto). La imagen del medio es sólo con iluminación directa. Y finalmente la imagen de la derecha es con la iluminación global, donde influye tanto la iluminación directa como la que se genera indirectamente.

Se puede apreciar como la iluminación incidente sobre la bola blanca hace iluminar el interior de la habitación. También se puede apreciar como la superficie de las bolas que están más cerca de las paredes se tiñen del color de esa pared.

Hay que decir también que hay varios niveles de iluminación global y que se aplican varias técnicas en una escena a parte de la luz directa e indirecta. Una misma escena con iluminación global, no se verá igual de bien en un juego en tiempo real que como imagen renderizada con un programa de edición como blender. Renderizar una escena con una muy buena iluminación tiene un coste de procesamiento muy elevado y no es factible llegar a ese nivel de detalle en un juego que se ejecuta todo en tiempo real. Lo más parecido a eso, sería usar una iluminación baked o pre-renderizada, que aunque no es a tiempo real, se puede acercar bastante al resultado final.

Bueno, hecha esta introducción sobre la iluminación global para los que no estaban muy familiarizados con ella, vamos a comentar como hemos configurado la iluminación de nuestro juego. Cabe decir que es una configuración que seguro se irá modificando y mejorando durante el desarrollo del juego, pero por el momento nos servirá para tener una base por donde empezar.

Primero vamos a mostrar una imagen de como quedaría un bloque de edificios con la iluminación por defecto de unity.

Escena con la iluminación por defecto de unity.
Escena con la iluminación por defecto de unity.





Por defecto es una iluminación decente, pero para nuestro caso, que queremos darle un toque más cartoon al juego, le falta algunos ajustes en la configuración.

Para quienes quieran aplicar una iluminación global a su escena, vamos a resumir los pasos para aplicar correctamente las luces. Decir que puede tener muchas configuraciones, la de a continuación es sólo una más, pero os puede servir para tener una base.

Dentro de unity, en la pestaña Lighting y subpestaña Scene, modificamos los siguientes valores:
  • Ambient source: Color
  • Ambient color: #544689 (aquí aplicarle el color que más os guste para vuestra escena)
  • Activar la opción: Precomputed Realtime GI
  • Realtime resolution: 0.5 (para nuestra escena en lowpoly y vista de lejos, es suficiente)
  • Desactivar la opción: Baked GI (de momento no tendremos iluminación pre-renderizada)
  • Desactivar la opción: Auto-build (la aplicaremos manualmente luego de hacer los cambios)
Crear un objeto Directional Light y arrastrarlo a nuestra escena. Esta fuente de luz simulará la luz del sol. Configuraremos los siguientes parámetros:
  • Color: #F4E2ACFF
  • Shadow Type: Shoft shadows
  • Strength: 0.85 (si queréis le podéis bajar la intensidad para que no sean tan oscuras)
Después de configurar la iluminación global y crear nuestra fuente de luz es muy importante activar la opción Static de los objetos que queremos que se le aplique la iluminación global. Esta opción la encontraréis en la pestaña Inspector de cada objeto, a la derecha de su nombre. Esta opción indica que el objeto no se moverá y sobre el cuál la luz puede rebotar. Por lo tanto, a los objetos móviles, como nuestro coche, no se le podrá aplicar iluminación global y que esta rebote en el material de nuestro coche. Para estos casos, existe otro método, como las light probes pero que en este artículo no trataremos porque aún no nos hemos puesto con ellas.

También comentar que para nuestro caso en concreto, como queremos una estética cartoon de nuestro juego, hemos modificado el shader de los objetos, el cual también influye mucho en como se ve cuando se le aplica luz. Por defecto unity aplica el shader Standard a los objetos. En nuestro caso, hemos seleccionado el Legacy shaders/Diffuse, el cual aviva los colores del objeto y le da a la escena un toque más colorido.

A continuación mostramos la escena con una primera prueba de iluminación y la cuál nos servirá como base para ir mejorándola poco a poco durante el desarrollo del juego.

Escena del juego después de configurar la iluminación global.







Finalmente, para los que quieran profundizar más sobre la configuración de la iluminación global en unity, os dejamos este enlace a un tutorial oficial muy interesante y completo.

Esperamos que os haya sido útil y nos vemos en la siguiente entrada :).

No hay comentarios:

Publicar un comentario