Search Unity

Unity 5 está recibiendo muchas mejoras en cuanto a calidad gráfica, especialmente en lo que se refiere a iluminación. Unity había estado limitado a mapas de luces (lightmaps) precalculados desde la versión 3.0, pero desde entonces se ha progresado mucho en el campo de la iluminación global (global illumination). Una de las nuevas características de Unity 5 es la iluminación global en tiempo real combinado con mejoras en el flujo de iluminación, y ese es el tema principal de este post. Pero antes, un poco de teoría.

doll_640.png

Modelo de la muñeca renderizado con path tracing en Unity. Cortesía de Paul Tham, Unity Singapur

¿De qué se trata esto de la iluminación global?

La iluminación global o Global Illumination (GI) se refiere a la simulación de cómo se transporta la luz físicamente. Significa que es una manera de simular cómo la luz se pasa entre las superficies en tu escena 3D, mismo que mejora el realismo visual en el juego. No sólo eso, sino que también puede ayudar en la ambientación y gameplay de tu juego. Los algoritmos de GI toman en cuenta la luz que viene directamente de una fuente de luz (iluminación directa) y también la luz que se refleja por las superficies en la escena con diferentes materiales (iluminación indirecta). Tradicionalmente, la iluminación indirecta ha sido considerada como muy costosa de calcular y tomando en cuenta que un juego debe hacerlo en tiempo real, no era una buena opción.

Todo se resume en esta pequeña ecuación:

RenderingEqHighRes.gif

Realmente es muy simple. La iluminación visible desde algún punto en tu escena es la suma de la luz emitida desde ese punto en una superficie(Le) y la iluminación incidental emitida desde una semi-esfera sobre el punto reflejado con dirección hacia la vista del espectador. Li describe la luz que proviene de alguna dirección w’ sobre la semi-esfera hacia el punto x. El término de reflectancia P describe cómo se refleja la luz con dirección al espectador y es dependiente del ángulo incidental w’ y el ángulo de reflejo w.

Probablemente hayan notado que el término L(x,w) se encuentra en ambos lados de la ecuación y dentro de la integral. De no ser así, tendríamos iluminación global como en Elite.

Uno de los algoritmos más populares (y antiguos) es path tracing. Path tracing se utiliza mucho en CGI para películas y televisión. Aún cuando se ha investigado mucho en esta área, una imagen puede tardar segundos en dibujarse (aún con procesadores poderosos).

El path tracing es comúnmente utilizado en espacio de pantalla, eso significa que la imagen debe ser dibujada desde cero en cada frame. Es decir, que soporta escenas completamente dinámicas: la iluminación, materiales y geometría pueden ser animadas libremente. Esto también tiene desventajas; como que la escena debe ser dibujada de nuevo cuando la cámara se mueve, entonces se tarda algunos segundos en converger la imagen de nuevo, como sabemos esto no sería apropiado para juegos.

Una imagen no convergida tiene un ruido molesto y además no es coherente temporalmente así que la imagen va a parpadear conforme se acerca a converger. Aplicar filtros puede ayudar a reducir el efecto, sin embargo no puede ser eliminado completamente. Aquí hay algunas imágenes tomadas en en varios niveles de convergencia.

converge.png

Imágenes renderizadas con path trace en diferentes estados de convergencia.

Últimamente varios acercamientos híbridos han sido desarrollados, algunos corriendo en el GPU como el voxel cone tracing. La mayoría de ellos requieren un GPU de escritorio con una cantidad de memoria grande y son apropiados solamente para computadoras de alto rendimiento.

Presentando Enlighten

Enlighten provee una muy buena solución a este problema. De una manera muy elegante escala de plataformas móviles a consolas y hasta sistemas de alto rendimiento dado que acota el problema que soluciona. Además, ha sido probada en el campo de  batalla porque ha sido lanzado en juegos como Battlefield 4, Medal of Honor Warfighter y otros. Es decir que en tu juego puedes usar la misma tecnología detrás de estos.

La idea básica es que si alguna parte de lo visible es pre calculado (por ejemplo la integral de la parte derecha de la ecuación de rendering de arriba) es posible modificar la iluminación en tiempo real incluso en plataformas móviles.

Enlighten permite cambiar dinámicamente lo siguiente:

  • Fuentes de luz.

  • Iluminación de escenarios.

  • Propiedades de los materiales (reflectividad difusa y emisión de la superficie).

La geometría que forma parte de la simulación con GI debe ser marcada como estática, aunque la geometría dinámica puede ser iluminada de nuevo utilizando light probes que se actualizan en tiempo real con la GI generada a partir de la geometría estática. Para poder hacer esto, Enlighten pre calcula la información necesaria para simular GI en tiempo de ejecución. Esta información es consumida por un módulo run-time disponible en varias plataformas: OSX, Windows, Linux, iOS, Android, PS Vita, PS3, PS4, Windows Phone y Xbox One. La versión de WebGL está en desarrollo, pero todavía no tenemos una fecha final para esta.

Enlighten provee la siguiente información:

  • Lightmaps en tiempo real.

  • Lightprobes en tiempo real.

  • Cubemaps en tiempo real.

Enlighten está limitado a calcular GI para el transporte difuso. Este es el modo más importante de transportación ya que lleva toda la iluminación de la escena. Dado que el diffuse transport generalmente tiene baja frecuencia, los lightmaps en tiempo real pueden tener una baja resolución y ser actualizados en tiempo real. Se puede dar soporte para specular/glossy transport si se agregan cubemaps actualizados dinamicamente.

A continuación hay un ejemplo de dos escenarios renderizados con Enlighten. Estos escenarios iluminados son completamente dinámicos y el cambio entre ellos es instantáneo.

Screenshot_042.jpg

Viking Village – Amanecer

En la siguiente imagen, se utilizó un cielo más brillante y el sol está más alto y es más intenso.

Screenshot_09.jpg

Viking Village – día soleado

La iluminación del entorno es gris y desaturada además de que la intensidad del sol es más baja. Principalmente luz ambiental.

Screenshot_14.jpg

Viking Village – día nublado

Por último, una puesta de sol con rojos cálidos para un ambiente de atardecer.

Screenshot_13.jpg

Viking Village – Atardecer

El utilizar esta técnica permite tener juegos con un ciclo de día-noche muy realista.

El precálculo de Enlighten

La regla es que la mayor parte de la geometría debe estar marcada como estática, realmente toda la geometría a gran escala que participe en la simulación de GI. Durante la fase de pre cálculo, Enlighten automaticamente va a dividir la escena en sistemas. Es posible modificar cómo se generan estos sistemas. Estos sistemas sirven para hacer que el precálculo se haga de forma masiva y en paralelo. Este proceso es relativamente complejo y resuelve las tareas con base a cada sistema. A continuación hay un ejemplo de cómo la escena de la Viking Village fue dividida automáticamente en sistemas.

systems.png

Visualización de los sistemas generados automáticamente por Enlighten.

El run-time de Enlighten

El run-time de Enlighten es suficientemente eficiente como para correr en dispositivos móviles de gama alta. Se ejecuta de manera asíncrona en un thread del CPU(o en más si la plataforma lo permite). El principal problema en plataformas móviles es que la luz directa y los mapas de sombras para las luces dinámicas necesitan ser pre calculados en el GPU. Entonces, en móviles solamente será posible tener unas cuantas luces dinámicas. Aunque las propiedades emisivas de la geometría de cualquier objeto pueden ser modificadas en tiempo real sin ningún costo computacional extra.

Enlighten se escala muy bien a computadoras de escritorio y consolas de nueva generación que soporten juegos que usan puras luces dinámicas ya que estas tienen más GPU disponible para iluminación directa y shadow mapping.

Aquí hay un ejemplo de un demo que usa Enlighten corriendo en un dispositivo móvil con un procesador ARM.

¿Qué hay del baking?

Para ciertos juegos, el hacer baking de la iluminación será lo mejor, por eso vamos a seguir soportando y desarrollando. En Unity 5, los inputs para la iluminación: fuentes de luces, materiales emisivos, y luce ambientales pueden ser marcados como baked o GI en tiempo real. La iluminación marcada como baked se cocina a lightmaps justo como funciona en versiones anteriores de Unity y la iluminación dinámica es manejada por el run-time de Enlighten. Lo interesante es que ambos se fusionan a la perfección.

También tenemos nuevas cosas en la parte de baking en Unity 5. Una de ellas es que ahora los lightmaps se dividen en componentes. Por cada atlas, se generan cinco lightmaps que contienen: luz directa, luz indirecta, direccionalidad directa, direccionalidad indirecta y el Ambient Occlusion. Después de hacer el bake, estos van a componer los lightmaps que se utilizarán en el juego.  En el editor se encuentran los controles para manejar cómo se componen estos lightmaps, puedes modificar los valores para ajustar cómo se verá la composición final.

El workflow de iluminación

Enlighten no solamente brinda GI en tiempo real. Una de las principales mejoras que provee Enlighten, es el flujo de trabajo para artistas. Permite iterar de forma más rápida sobre la iluminación, lo que significa contenido que se ve mucho mejor. Añadimos un modo iterativo que quita la necesidad de hacer el bake de forma explícita. Se harán los cálculos y el bake de la animación sin necesidad de que el usuario deba intervenir, el editor mismo detectará cuando es necesario ejecutar de nuevo para modificar los cambios que se hicieron. En muchos casos esto se hará casi de forma instantánea.

El siguiente video muestra cómo funciona el nuevo flujo de iluminación.

Unity 5 lighting quick look

¿Qué tipos de juegos van a funcionar con Enlighten?

P: ¿Puedo poner puertas que abren y cierran en mi juego?

R: Como comentamos antes, el permitir crear sistemas y programar el intercambio de rebotes entre sistemas es algo que llegará en Unity 5.x

P: ¿Puede mi juego soportar destrucción de elementos?

R: En Enlighten se soporta el destruir objetos transparentes de forma dinámica, sin embargo deben ser marcados como tal antes. Aún cuando no es lo ideal, esto debería funcionar para la mayor cantidad de casos de uso.

P: ¿Puedo descargar(stream) partes de un nivel de forma aditiva?

R: Sí, los sistemas pueden ser descargados de forma aditiva . Puede ser de forma manual o mediante scripting. (Esto es probable que salga en 5.0).

P: ¿Puedo crear un juego totalmente procedural, al estilo Minecraft?

R: En pocas palabras, no. Pero estamos trabajando en varios proyectos con Imagination Technologies utilizando su tecnología para vistas previas con GI, PowerVR Ray Tracing. Esto podría traer una solución al problema de escenas creadas por usuarios. La tecnología PowerVR soporta GI en escenas completamente dinámicas. Aún no funciona en tiempo real y los primeros frames dibujados tienen ruido hasta que la composición converge, pero vamos por buen camino. Va a ser posible iluminar así escenas creadas por el usuario tomando en cuenta que un ligero retraso exista. (Todavía no hay fecha de lanzamiento para esto ya que todavía es un proyecto de R&D)

¿Qué viene en Unity Free y qué en Pro?

Todavía no se ha decidido qué características vendrán en cada versión de Unity. Pero vamos a anunciar esto a la brevedad.

¿Qué viene en Unity 5?

Estas son las características principales que vendrán en Unity 5.0:

  • El runtime de Enlighten para GI en tiempo real.

  • Flujo de trabajo iterativo (para GI en tiempo real y precalculado).

  • Reflection probes.

Más allá de Unity 5

Como seguimos haciendo varios cambios a los algoritmos de iluminación, muchas características no estarán en Unity 5.0 dado que necesitan pulirse más. Sin embargo durante el ciclo de vida de 5.x las siguiente características se irán agregando:

  • Vistas previas con PowerVR para lightmaps bakeados y en tiempo real(más detalles aquí).

  • API para controlar la contribución de GI en tiempo real entre sistemas.

  • Cubemaps de Enlighten en tiempo real.

  • Soporte para transparencia de GI en tiempo real.

  • Pre cálculo/bake por medio de cloud/clusters.

Hay más material respecto al tema: diapositivas de la plática sobre GI durante Unite 2014, video de la plática sobre GI en unite 2014 y la parte que habla sobre gráficas en el keynote de Unite 2014.

Déjanos saber qué piensas.

El equipo de Unity.

65 replies on “ILUMINACIÓN GLOBAL EN UNITY 5”

[…] Global illumination is an important part of the context that’s needed for PBS. To get a comprehensive overview of how it will work in Unity 5 nothing better than to check our blogpost on Dynamic GI […]

[…] Większość komercyjnych silników graficznych wprowadziła te patenty już jakiś czas temu – CryEngine czy Unreal Engine. Na Unity trzeba było poczekać do wersji 5.0. Obecnie autorzy, którzy są na etapie beta testów najnowszej wersji silnika chwalą się swoimi udoskonaleniami. W związku z tym, jako uzupełnienie, warto poczytać jakie efekty to przyniosło w poprawie jakości i dodaniu nowych możliwości dla twórców Unity: http://blogs.unity3d.com/2014/09/18/global-illumination-in-unity-5/ […]

[…] posts Global Illumination Frame debugger Audio Mixer High-performance physics New animation features Physically-based […]

[…] Here’s a link to a recent article talking about it’s implementation in Unity 5: http://blogs.unity3d.com/2014/09/18/global-illumination-in-unity-5/ […]

What is the impact of enlighten?Is it going to stuggle with something like a gtx780 like eu4 or is it less demanding in therms of hardware?

[…] wanted to make sure it still works in Unity 5 (it does,) and also explore some of the much-touted global illumination features in Unity 5 and see how SilverLining might integrate with […]

And another question: what exact controls will we have over static lightmap components? I’ve used to color grade them heavily in photoshop, so can we expect exposure / contrast / color correction at least (preferrably in HSV and Lab space)? Or can we just have them exposed to Editor scripting APIs?

Will it be possible to hide certain objects from camera but still make them cast and receive GI (realtime and/or baked)?

[…] en savoir plus sur les méthodes d’illumination globale je vous propose cet article du moteur de jeu video en 3D temps réel #Unity3D que j’utilise pour développer mes […]

@JOACHIM ANTE
Sounds good, makes a bit more sense now! Thanks for chiming in to enlighten me, on a weekend no less.

Ok yes.. pun intended :)

@MSW:

Procedural levels at level load will not be supported in regards to realtime GI in 5.0. We will investigate in the future, but have no concrete plan.

That said, reflection probes + all the physically based standard shader goodness can be used without enlighten. Enlighten add’s only the bounce light part, everything else will continue to work even if you bake your scenes with enlighten.

You can place as many dynamic objects as you like. They can receive GI lighting via lightprobes but they will not contribute to the GI.

For completely procedural worlds, where no base geometry is static, you can still use the universal shader. And all it’s advanced shading. Our plan is also to support reflection probe baking at runtime in either 5.0 or 5.x. (TBD). So you can rely on reflectivity, skybox SH extraction and directional lights to get very nice lighting for completely procedural scenes.

Is there any way to do the pre-compute step at runtime, like during a loading screen? I understand a fully dynamic and changable world like Minecraft can’t be done, but what about a level that is procedurally constructed during a loading screen and then remains static while the player is actually playing?

or are dynamic structures /trees something that could be tackled in the same way lighting the player might be using light probes? You mention they’re relatively cheap, in a large outdoor setting could/should these be generated/placed in a grid format at design time or is that the wrong way to go about things?

@JESPER MORTENSEN This looks great! But wondering how we should be preparing for our game with some procedural elements.

We’re doing static landscapes, but will have player created buildings (with placement location not pre-determined), and dynamic trees (you can cut them down) will we be able to utilize anything from this in combination with current lighting solutions?

If not, I assume we’ll be able to fall back to current lighting solutions completely in Unity 5 if need be? (Currently using Sunshine)

In this case are we able to take advantage of the new built-in PBL/Standard shader stuff, or is that completely tied into Enlighten GI? Thanks :)

මමත් PC house එකෙන් ඹය කට්ට කැවා PC house එකෙ customer care seicrve එක අන්තිමයි ..මම දැන් වැස්සට වත් PC house යන්නෙ නෑ .මම දැන් යන්නෙ Unity එකෙ 1st floor තියන Ink TECH එකට.එකෙ customer care seicrve එක හොදයි. ඉක්මනට replacement එක කරලා දෙනවා .නැත්තම් Unity එකෙ 1st floor තියන Tulip එකත් ෙහාදයි

Hey Jesper, where can I find this «X3 shader following sun» shader? is it already build in into beta5? I could not find anything related. I want to turn up the exposure for the pbr reflections to values bigger than 1.0 without actually changing the brightness of the skybox (it*s a dark space enviroment) but I could not find anything like this.

[…] Se quiser saber mais e inclusive aprender sobre iluminação global, basta acessar o site oficial. […]

[…] Show Links Global Illumination in Unity 5 […]

Will unity 5 support transmissive materials?
Coloured shadows – light passing through stained glass and casting colour onto receiving surfaces?

@MURGILOD: The uniforms used in the shader are the same. The Standard shader does part of the evaluation per pixel and part per vertex though. Coefficients coming from real-time GI are mixed with the baked ones on the CPU.
When it comes to functionality — you gain real-time GI, obviously. :)

@HeliosDoubleSix OMG THOSE ARE AMAZING! Your tests do not look like realtime! Unity 5 is going to be pretty awesome. I can only imagine how this will impact VR.

@Richard think of it this way, ‘real time lighting’. It’s always a good thing. I’m sure you could create scenes that are very similar in look on unity 4.0, but they’d take longer and would be less interactive. Yes the artists have done a good job with the models and lights in these two scenes, but the real benefit is the ability to have this level of detail in real time. You’ll have to discover your own way to take advantage of this tool artistically. Trust me, getting mood and atmosphere will be a LOT easier now.

@JESPER: While I agree a direct side-by-side comparison isn’t going to make sense – it’s not like you just turn up the texture rez or something – it would be interesting to see a trained artist create a ‘best possible’ scene using out-of-the-box features in Unity 4, and then to take the same amount of time to create a similar ‘best possible’ scene using out-of-the-box features in Unity 5. Would help demonstrate that all the lovely demo shots for U5 aren’t just that you hired better artists this time around ;)

Great article :)
Great to see you will be supporting the «removal» of objects from the static GI in 5.x
In regard to this, how performance heavy will the «Enlighten transparent» objects be in comparison with normal static meshes?

Will the light probes generated by enlighten be the same (both functionally and in terms of accessing in shaders) the same as they are in Unity Pro?

[…] know at this point, Unity 5 has been receiving massive visual upgrades. One of these is the new realtime global illumination powered by Enlighten (the very same which powers the GI in Battlefield […]

«Would it be possible to pre-compute at run-time on a custom level mesh? I wouldn’t mind early noise or having the user wait for a procedural scene to bake if it meant I could get good GI.»

That is unfortunately not realistic right now. It may be something for us to look into in the future.
For Unity 5.0 or 5.x, we are however looking at making the reflection probe baking available at runtime. So while you don’t have full GI you still get a big boost in graphics fidelity from having awesome looking reflections for fully procedural levels.

@Mike:
«Unity 4.x style static lightmap baking at one side, the Enlighten hybrid solution in the middle, and a fully dynamic/run-time GI (possibly using Power VR tech) at the other end. Hopeflly, with the ability to blend between these options.»

Enlighten also performs full lightmap baking. Any light can be marked as fully baked or not. Depending on that setting unity will generate full high resolution compressed lightmaps or not.
Any light can be marked fully baked or realtime gi, also the sky light can be marked fully baked or is fully dynamic. All of this is integrated into the iterative bake pipeline. So unity will automatically detect anything that requires baking and do it in the background. This also gives you very nice previews, because as soon as you change a light that is marked as baked, then it will switch back to dynamic GI until all baking has completed, at which point it will automatically switch back to fully baked lighting. All this happens in the background without interrupting your workflow. So it is really nice for trying out things and getting very fast iteration time on your lighting, irregardless of if it is fully baked or realtime GI.

Can’t wait to try Enlighten. As I see it, there should be a spectrum of GI options:
Unity 4.x style static lightmap baking at one side, the Enlighten hybrid solution in the middle, and a fully dynamic/run-time GI (possibly using Power VR tech) at the other end. Hopeflly, with the ability to blend between these options. I just hope Unity pursues the fully dynamic high-end side of things. I personally would like to load user generated levels at run-time and I am disappointed that there currently is not a good GI solution for this.

Would it be possible to pre-compute at run-time on a custom level mesh? I wouldn’t mind early noise or having the user wait for a procedural scene to bake if it meant I could get good GI.

@ARAS Do said shadow improvements include 3×3 tap PCF filtering? Hopefully they do, because the shadows will instantly look 100x better if so ;)

I believe this is really a huge milestone for Unity regarding the look of the output. Quite awesome! And this was also a really interesting read – can’t wait to play with this … a lot! :-)

@Shkarface, I’d rather first we finish said shadow improvements, and blog about them once we have them :)

If we’re doing a game with the static lightmapping option, is there still a step where we need to set light probes and bake those into the scene or is that handled automatically in the bake process? Also, what exactly is the reflection probe doing in the example?

@Shkarface: we do have some shadows improvements in 5.0 (some already in, some more coming – stay tuned). But probably «more major» upgrade of both shadows & image effects will come later in 5.x.

Wow! It’s really awesome – the proper light can change the whole graphics and the ability to add realtime lightmaps and lightprobes is a tool all designers were long waiting for. It’s great that Unity is ahead of industry, as always!

I drop a leave a response whevneer I appreciate a post on a site or if I have something to valuable to contribute to the conversation. Usually it’s a result of the passion communicated in the post I read. And on this article About | Air Plane Games Review. I was excited enough to post a thought I actually do have 2 questions for you if it’s allright. Is it just me or does it look as if like a few of these comments appear as if they are coming from brain dead folks? And, if you are writing at other social sites, I would like to keep up with everything new you have to post. Could you make a list every one of all your community sites like your Facebook page, twitter feed, or linkedin profile?

I have been playing with the new GI while in beta and with some features not finished yet. For those who are curious as to where it is currently:

http://forum.unity3d.com/threads/unity-realtime-reflections-and-gi-and-realism-exploration.266258/

It is quite fabulous in many regards, I’m just hoping they will fix some of the limits on it preventing really high detail light maps which are hobbling my efforts. There is much left to do, but the promise of what it can offer is outstanding

Global Illumination on high end mobile devices. Great news! Speaking of «graphical fidelity», what about HDR and Linear Workflow on high end mobile devices?

HI Victoria,I may be spouting an uluoppnar opinion here, but I’m beginning to wonder how much good these promo items do. I recently attended Lori Foster’s event and came home with a bag full of «stuff» that I barely had time to scan. I haven’t looked at it since. How much did all those authors spend of their own money just to have the stuff dumped and the bag reused? Or possibly have all of it stuck in a closet somewhere?I sometimes bring my promo stuff to a friend’s used book store and let her doll it out a bit at a time. I think it makes a bigger impact that way. But I may be the exception. Most authors will promote only their own stuff since the competition is so fierce.I don’t know what the answer is. Maybe I’ll blog about that and see what kind of feedback I get.Ash

Hi,
I prefer to be able to see the «Graphics Fidelity» of the new features, is to compare the real time renders of Unity 4.x vs Unity 5.x side by side in a video for the same scene. Using the maximum settings of both versions, and so on…

This is awesome, thanks for the info. what about Shadows and Post-Processing Effects as making graphically amazing games would require these effects besides PBR and GI, any updates and/or plans to ImageEffects or Shadows?

Comments are closed.