Tutorial “Realtime GI” parte 2

Resolución en tiempo real

Hola a todos aquí les traigo en español el tutorial oficial de Unity sobre “ realtime resolution”. Espero que les guste. De antemano les pido disculpa si en alguna ocasión la traducción no se entiende o es errónea. Si más para decir , vamos al tutorial:
(Para versión: 5.5 – Dificultad: Intermedio)

Se requiere haber leído la parte 1 de este tutorial : enlace

Cuando se configura una escena para la iluminación mediante “Precomputed Realtime GI”.Una de las primeras decisiones que se deben tomar. Es determinar la resolución en tiempo real predeterminada de su escena. Resolución en tiempo real es el número de texels de mapa de luz real (píxeles de textura) en tiempo real utilizados por el mundo de Unity.

Resolución en tiempo real se puede observar o establecer en la ventana de iluminación, de la siguiente manera:

  • Abra la ventana Iluminación (Window > Lighting) y, a continuación, seleccione la pestaña Scene.
  • Asegúrese de que la “Precomputed Realtime GI” esté activada marcando su casilla de verificación.
  • Observe la propiedad “Realtime Resolution” debajo de la casilla de verificación Precomputed Realtime GI.

Realtime GI

Ventana de iluminación de Unity que muestra la configuración global de la resolución en tiempo real de escenas.

 

Elegir una resolución en tiempo real adecuada

Al configurar una escena es importante tener alguna idea de la escala de unidad que su proyecto necesitará. Podría ser que en su proyecto una unidad es un metro, un pie o un centímetro. Las unidades Unity no tienen una equivalencia por defecto en la escala del mundo real. Por lo que depende del usuario decidir qué representa una unidad.
En nuestro proyecto de ejemplo hemos decidido que una unidad es equivalente a 1 metro. Ciertos conceptos de física asumen lo mismo. Por ejemplo, la gravedad se representa en unidades por segundo como un valor predeterminado en Unity. Suponiendo que una unidad es equivalente a 1 metro . Es por lo tanto una buena configuración para un escenario de juego del mundo real.

A menudo la resolución en tiempo real de tu escena puede determinarse a partir de la escala de tu mundo de juego. Por ejemplo, ¿es su escena pequeña, pero el interior ricamente poblado con un montón de variación en “bounced lighting”?. En este caso, las resoluciones de mapa de luz es más alta, como 2-3 texels por unidad .Podrían justificarse para capturar esta iluminación más detallada o de “alta frecuencia”.

Tal vez su escena es un gran ambiente al aire libre. Donde la escala mundial es considerablemente más grande. Usted puede tener superficies que son cientos o incluso miles de unidades en el área con poca variación para modificar el color de la “bounced lighting”. En casos como estos, una resolución que sea apropiada para capturar los detalles de iluminación presentes en una escena interior. Sería un desperdicio cuando se aplicara a través de las extensiones grandes y menos destacadas de un entorno al aire libre.

Estaríamos desperdiciando valioso tiempo de CPU y memoria disponible por tener que almacenar y actualizar texels de mapa de luz que no están contribuyendo mucho a la apariencia general de la escena. Lo que es más importante, para los propósitos de este tutorial, estaríamos aumentando el número de texels de mapa de luz que deben ser considerados durante el precomputo de iluminación. Esto puede tener un impacto enorme en tiempos precomputación.

En el caso de un entorno exterior, una resolución de mapa de luz apropiada puede estar entre 0.5 -1 texels por unidad para objetos grandes dentro de la escena, o 0.1 – 0.5 texels para el terreno.

 

Resolución GI en tiempo real  vs. mapas de luz tradicionales

Los valores de resolución en tiempo real requeridos por el “Precomputed Realtime GI” de Unity . Son órdenes de magnitud menores que las densidades de texels tradicionales de mapa de luz. Esto se debe a que sólo estamos captando la iluminación indirecta en estos mapas de luz. Y esto tiende a ser muy suave o “baja frecuencia”. Cuando se utiliza la “Precomputed Realtime GI”, las sombras nítidas normalmente se proporcionan por sombras en tiempo real en lugar de mapas de luz de alta resolución.
El uso de valores que parezcan apropiados en las técnicas tradicionales de lightmapping – digamos 30 texels por unidad – probablemente resultará fallos o de otra manera no completado. Los valores más adecuados son alrededor de 2 – 3 texels por unidad para escenas interiores, y 0.5 – 1 para ambientes al aire libre. Esto es suponiendo que estamos trabajando con una escena escala humana. Con un tamaño de unidad de 1 unidad = 1 metro. Si la escala mundial fuera sustancialmente diferente, estos valores tendrían que ser ajustados en consecuencia.

Scenario Realtime Resolution
Interiores 2 – 3 texels por unidad
Exteriores 0.5 – 1 texels por unidad
Terrenos 0.1 – 0.5 texels por unidad

Valores apropiados suponiendo un mundo de escala humana con 1 unidad que representa 1 metro.

Al configurar inicialmente la resolución en tiempo real de nuestra escena, estamos especificando la resolución predeterminada, para objetos estáticos dentro de nuestra escena. El nuevo GameObjects con un MeshRenderer marcado como Lightmap Static en la parte superior del Inspector. Usará este valor hasta que se modifique de otra manera.

Además de elegir la resolución en tiempo real para toda la escena. También tenemos la opción de cambiar la resolución del mapa de luz por objeto. En los casos en que necesitamos la fidelidad adicional ofrecida por resoluciones más altas, podemos aumentar selectivamente este valor. En general, es menos trabajo establecer la resolución más común como predeterminado de escena. Y, a continuación, aumentar manualmente la resolución en aquellos objetos que necesitan más detalles de iluminación. Discutiremos los enfoques para modificar la resolución por objeto más adelante en el tutorial.

 

Configuración de la resolución en tiempo real de nuestra escena

Si desea seguir adelante, estaremos trabajando en la escena LightingTutorialStart incluida con el Tutorial de optimización de iluminación vinculado en la parte superior de esta página.
En nuestro escenario de ejemplo, tenemos un ambiente al aire libre con un terreno de tamaño medio de un color razonablemente constante. Para ello, una baja resolución en tiempo real de 0,5 texels por unidad. Esto sería suficiente para capturar la iluminación rebotada de otros objetos en la escena.

Sin embargo, también hay una serie de casas de madera. Estos son mucho más detallados. Como hay muchas más casas que objetos de terreno en la escena, debemos establecer la resolución en tiempo real para que sea apropiada para las casas. Podemos entonces modificar la resolución utilizada por los objetos del terreno individualmente. Esto reducirá la cantidad de trabajo necesario al preparar nuestra escena. Con esto en mente, vamos a utilizar un valor de 1 texel por unidad mundial para nuestra resolución por defecto en tiempo real.

  • Abra la ventana Iluminación (Window > Lighting) y seleccione la pestaña Scene.
  • Establezca el valor de  “Realtime Resolution” en 1.

Teniendo en cuenta que hemos decidido que la escala de nuestra escena sea 1 unidad = 1 metro, esto significa que un único texel de mapa de luz creado por el “Precomputed Realtime GI” de Unity equivaldrá a 1x1m de tamaño. Esto puede parecer muy bajo, pero recuerde que sólo estamos captando la luz indirecta. Sombras nítidas y especularidad de la iluminación directa serán proporcionados por luces en tiempo real en la escena.

Bueno , eso seria todo por el día de hoy , si te ha gustado este tutorial no olvides subscribirte (aquí) para ser notificado por correo cuando publiquemos la siguiente parte de este tutorial. (Se publicará una parte por semana).
¿Te gustaría aprender más sobre Unity?

curso sobre desarrollo de videojuegos en unity
Pulsa en la imagen para ir al curso.

Introducción a “Precomputed Realtime GI”

Hola a todos aquí les traigo en español el tutorial oficial de Unity, sobre “Precomputed Realtime GI”, espero que les guste. De antemano les pido disculpa si en alguna ocasión la traducción no se entiende o es errónea. Si más para decir , vamos al tutorial: 
(Para versión: 5.5 – Dificultad: Intermedio)

En Unity, hay dos técnicas distintas disponibles para precomputar la iluminación global (GI), o la iluminación rebotada: Baked GI y Precomputed Realtime GI. Este tutorial se centra en Precomputed Real Time GI.

Al trabajar con Precomputed Realtime GI, un precomputado de iluminación es el proceso de calcular el rebote de luz alrededor de la geometría estática dentro de una Escena en el Editor de Unity y almacenar estos datos para su uso en tiempo de ejecución. Este proceso reduce el número de cálculos de iluminación que deben realizarse en tiempo de ejecución. Lo que permite la iluminación rebotada en tiempo real al mismo tiempo que se mantiene la velocidad interactiva.

Cuando se utiliza Baked GI, las texturas de mapas de luz tradicionales se generan sin conexión durante el proceso de precomputado. Estas texturas entonces existen como activos dentro del proyecto y no se pueden cambiar en tiempo de ejecución. La GI en tiempo real precargada no crea activos de mapa de luz de la misma manera. En su lugar, los datos de iluminación se guardan como un activo de datos de iluminación que contiene la información necesaria para generar y actualizar interactivamente un conjunto de mapas de luz de baja resolución en tiempo de ejecución.

A menos que nuestra escena haya sido debidamente preparada y optimizada para iluminar los precomputados. El tiempo que tarda en completar estos cálculos puede llegar a ser excesivo. En este tutorial, aprenderemos a optimizar una escena para Enlighten (el backend para las soluciones Precomputed Realtime GI y Baked GI de Unity) para que los precomputados de iluminación lleven minutos en lugar de horas.

En el transcurso del documento cubriremos:

  • Cómo determinar una resolución de iluminación adecuada para nuestras escenas.
  • Qué gráficos son y cómo afectan nuestros tiempos precomputado.
  • Cómo iniciar el proceso de precomputado.
  • Utilizar la iluminación de la sonda para reducir la complejidad de nuestra solución de iluminación.
  • Mejora de los UVs auto-desempaquetados generados por el Precomputed Realtime GI de Unity.
  • Qué son Clusters y cómo se utilizan para generar iluminación global.
  • Utilización de los parámetros de mapa de luz para afinar nuestra iluminación en una base por objeto.

Una vez que hemos aprendido y aplicado estas técnicas, podemos aprovechar los beneficios del uso de Precomputed Realtime GI. Tiempos de iteración de iluminación rápida, la capacidad de experimentar más rápidamente durante el proceso de iluminación y la iluminación rebotada en tiempo real durante el juego.

Reducción de los tiempos de precomputación de horas a minutos

En la escena de Tutorial de iluminación utilizada para este tutorial. La precomputación de la iluminación con un ajuste predeterminado no optimizado tomó alrededor de 7,5 horas en nuestra máquina de prueba. Para una escena de esta complejidad, claramente esto es inaceptable.

Realtime GI - Introducción - Iluminación avanzada en Unity
Fuente : unity3d.com

Por defecto Escena: Precomputado tardó 7,5 horas. Escena optimizada: Precomputado tardó 2,25 minutos.

Después de aproximadamente 30 minutos de preparación de la escena usando las técnicas cubiertas en este tutorial. El tiempo de precomputado fue de 2,25 minutos para un resultado de calidad de producción. Teniendo en cuenta que podemos iterar rápidamente en iluminación de escena. Sin necesidad de volver a calcular GI y cambiar la iluminación GI durante el juego, los atractivos beneficios de esta tecnología son rápidamente aparentes.

Descarga de elementos para este tutorial

A lo largo de este tutorial nos referiremos al proyecto Tutorial de optimización de iluminación disponible en la Unity Asset Store.

En este tutorial escrito, usaremos el ejemplo Scenes contenidas en la carpeta Scenes/Article: LightingTutorialOptimal, LightingTutorialNonOptimal e LightingTutorialStart.

  • LightingTutorialOptimal: se ha configurado de acuerdo con este tutorial y pretende representar un ejemplo de cómo los resultados de iluminación listos para la producción pueden lograrse con un tiempo mínimo de precomputado utilizando el GI Precomputed Realtime de Unity.
  • LightingTutorialNonOptimal: refleja muchos de los problemas comunes que vemos en los proyectos que no terminan de hornear o toman un tiempo inaceptablemente largo. Esta es una buena referencia para no configurar las escenas.
  • LightingTutorialStart: será la escena con la que estamos trabajando a lo largo de este tutorial. A medida que seguimos los pasos establecidos en este tutorial, llevaremos esta escena a un resultado completo, listo para la producción.

Bueno , eso seria todo por el día de hoy , si te ha gustado este tutorial no olvides subscribirte (aquí) para ser notificado por correo cuando publiquemos la siguiente parte de este tutorial. (Se publicará una parte por semana).

¿Te gustaría aprender a desarrollar videojuegos con Unity?

curso sobre desarrollo de videojuegos en unity
Pulsa en la imagen para ir al curso.