We present the technology and ideas behind the unique lighting in MIRRORS EDGE from DICE. Covering how DICE adopted Global illumination into their lighting process and Illuminate Labs current toolbox of state of the art lighting technology.
Electronic Arts / DICETechnical Fellow - Frostbite - Electronic Arts à Electronic Arts / DICE
so to understand where we are coming from, If we turn the clock back about ten years. it might be hard to recall but it used to be that there were no shadows at all. everything was just lit ambiently, and maybe by a few point lights but then techniques like shadow maps, stencil shadows and lightmaps started showing up and suddenly there were shadows and this has been working very well for games ever since but as everything else has improved dramatically, the basic lighting model has remained pretty much the same and maybe that was fine a few years ago But with everything else starting to look so good it becomes increasingly obvious that there is something missing from most games it's like the uncanny valley of lighting models. everything else is looking increasingly convicing but most people can tell there's something wrong with what they are looking at and as we were in prototyping three years ago our art team realized that. and we came to the conclusion that what we wanted was some form of realistic lighting or global illumination But instead of telling you what global illumination actually is I’m just going to show you some real life examples 02/10/10 23:05
This is a narrow street in the old town part of stockholm. The houses on the right side are completely in shadow. What’s lighting them is the light from the bright wall to the left, which is lit by the sun. Even the street below and the lower part of the left wall pick up some light 02/10/10 23:05
this is a good example where color is involved. the wall on the right is hit by direct sunlight and the pink color of it bounces onto the wall on the left and the ground, giving them a very pink tone, despite it beeing completely in shadow. 02/10/10 23:05
Here the sunlight hits the floor and reflects up onto the cielings of this structure. Creating a warm type of gradient. 02/10/10 23:05
So this is from one of our DLC levels. This is what it lookes like with regular lightmaps, there is shadow but it’s very flat and booring. But there’s so much more to lighting than that. And if we are spending the memory on those lightmaps, couldn’t we just make just them look better? 02/10/10 23:05
It used to be that regular lightmaps took a while to render in the old days, but now days they usually only take a few minutes for a whole level. Couldn’t we spend a little more time generating them to make them look better? 02/10/10 23:05
//our art team had been using a product called turtle for maya which they used to render ambient occlusion for characters among other things //could we use something like that to bake the entire game with global illumination? so we contacted /*the makers of turtle, */ illuminate labs about this and it turned out they were just starting work on a standalone renderer, specifically for games So we signed up to be the launch title for a product tailored to bake global illumination for games //the illuminate labs product which was named beast was going to be a standalone command line baker free from maya designed to do global illumination baking in all its forms //the beast renders lightmaps/RNMs shadowmaps SH pointclouds and some other things david will talk about later the bottom line for us was that since we were already using lightmaps, we would just be making those lightmaps look much better, there would be no extra runtime cost 02/10/10 23:05
So this is the same scene from before as we rendered it with beast. The red and yellow from the far wall fills into the shadow and sky is occluded in different ways. Despite extremely simple geometry this suddenly starts looking pretty good. 02/10/10 23:05
Just to remind you.. 02/10/10 23:05
as we started testing we quickly discovered that our requirements were being met 02/10/10 23:05
The bright sunlight hitting lights the underside of the subway bridge much like the house in the reference photo 02/10/10 23:05
these are some images from an early test of the art direction. as you can see this all works pretty well, and would likely have been very booring without these effects while most games would benefit a lot from this kind of stuff the stylized look of ME would not have worked att all without it 02/10/10 23:05
Details in the light 02/10/10 23:05
(Details in the light) 02/10/10 23:05
02/10/10 23:05
Bouncing light is one of the benefits. You can let the light find its way into areas that are not directly lit. There is no need to define or fake an ambient level. This is a good example of that, the sun hits the upper part of the shute and the light nicely finds its way down. 02/10/10 23:05
Bouncing light is one of the benefits. You can let the light find its way into areas that are not directly lit. There is no need to define or fake an ambient level. This is a good example of that, the sun hits the upper part of the shute and the light nicely finds its way down. 02/10/10 23:05
This is something similar to the alley I showed you before. Sunlight hits some of the boxes and slowly propergates between the sides. 02/10/10 23:05
Color bleeding is really just a name for bounce when the bouncing light has a color. And this is a good example of that. The green light illuminating the wall to the right 02/10/10 23:05
02/10/10 23:05
) 02/10/10 23:05
02/10/10 23:05
02/10/10 23:05
02/10/10 23:05
02/10/10 23:05
02/10/10 23:05
02/10/10 23:05
<good RNM image> one of the nifty things about the beast is in addition to storing global illumination in lightmaps it can store where that light is coming from. ) This is a scene from our tutorial level with just the diffuse materials. The horizontal air duct has a pretty coarse normal map here. 02/10/10 23:05
And this is what it looks like with just the lighting. 02/10/10 23:05
but together with the directional information in the lightmap it looks like this. Even though the air duct is in shadow from the sun it gets its normal maps lit. and they also pick up the yellow light coming from the wall on the right. 02/10/10 23:05
Another example. Diffuse textures 02/10/10 23:05
Coarse low resolution lightmaps 02/10/10 23:05
High resolution lit normalmaps 02/10/10 23:05
So when using normal maps, they can pick up the baked lighting in the right directions 02/10/10 23:05
02/10/10 23:05
White from the lights above hit the normals pointing there, and blue bounce from the floor hits where it should 02/10/10 23:05
So soft direct shadows isn’t really considered part of global illumination. But in any case if you are baking the direct light you can get some pretty nice soft shadowing. Like from the fence poles here. The shadow fades out, it almost gets hard to tell where it ends, and that’s the way it should be 02/10/10 23:05
And in some areas the shadows mix up with the bounce so much they blend toghether almost completely 02/10/10 23:05
02/10/10 23:05
So how do you use this stuff? the process in lighting with the beast IS a bit different than what most artists are used to. initially there is usually some skepticism as they are used to the kind of systems where there is only one shade of shadow and one shade of light, where lighting with the beast is much more like lighting in real life. You tweak intensities of the lights, the sun and the sky, and you tweak material settings to control the bouncing and radiosity. It depends on the game a lot I guess, but for us there were a few distinct types of areas 02/10/10 23:05
So this is a pretty good example of an indoor type area with no additional lights beyond the sunlight coming in. which is one of the usual cases. As the lighter would work on this, even though the level is much bigger he would typically isolate this section and work on that alone for a while. Tweaking the intensity of the sunlight, the bounce and color of the materials to get the bleeding and the amount of contrast right. Like if the sunlight coming into a room in real life hits a very dark wall, the room will of course be dark, it’s the same here. 02/10/10 23:05
This is another example of that. The bounce factor of the blue matt has been raised so that it reflects more blue light into the rest of the room and the cieling 02/10/10 23:05
And in the outdoors in daylight its usually of course just the sun. It’s about deciding where the sun will be, getting the angle right, and the tone of the sunlight as well as the color of light coming from the rest of the sky. Most of the blueish tone here in the shadows comes from the sky. Usually I found the lighter would place the sun so that the player would run towards it. The sky would get more interesting that way and the shadows are cast towards you, which breaks things up a bit more. 02/10/10 23:05
The wall here is pretty simple in terms of geomtery, but the lighting makes it work, the top balconies get a warm bouncing light from the roof and it gets darker towards the alley 02/10/10 23:05
But it’s very different from this. Where both the sky and the sun have a warmer sunset tone. And again the yellow wall here is typically something that has been tweaked to get the amount of bounce we wanted from it 02/10/10 23:05
In the indoors the lights are placed with their fixtures. That’s where we start anyway, and usually that’s enough. 02/10/10 23:05
There are lights where the lights are so to speak. There is no ambient level or skylight here, the light just happily bounces around from the placed lights. 02/10/10 23:05
Lots of big flourecent lights here 02/10/10 23:05
And some pointlights 02/10/10 23:05
But just because it’s indoors doesn’t mean you have to have a lot of lights. Here is just the big one, and the light propergates and gets darker towards the camera, between the pillars. 02/10/10 23:06
In all the previous scenes there were no extra fake lights But its of course perfectly fine to use them as well 02/10/10 23:06
Like in this subway section. A few lights placed in mid air, an area light close to the camera, and a few point lights down the tunnle. Sometimes its just easier and faster to get the look right that way. 02/10/10 23:06
As far as light types go they are all there. But the area light is probably the type of light our lighters used the most. it's basically a light with a big emitting area that gives very nice and soft shadows. Like the windows here have big areal lights placed in them. 02/10/10 23:06
And there’s no limit on the number of lights you can place. Since it’s all baked. So when the artists asked med how many lights they could use, I said “go crazy”. 02/10/10 23:06
Lots of pointlights 02/10/10 23:06
They did. 02/10/10 23:06
It doesn’t end there 02/10/10 23:06
Lots of area lights. And that’s perfectly fine of course 02/10/10 23:06
To help out the process our lighters had access to about 50 machines for every bake, which speeds things up a bit. Usually iterating on their areas would have a rebake time of about 5 minutes. We did have pretty big levels though. Log: Exporter Stats: Triangles 4200563 , Static Meshes: 11982 , LODs: 16410 , BSP Elements 829 , Lights: 1969 Log: Exporter Stats: Lightmapped Static Mesh LODs 12144 , Vertex Baked Static Mesh LODs: 4266 , Atlases: 211 Log: 6974 instances based on 9436 Originals. Log: Zero area BSP triangles 825, Smallest 16.000000 02/10/10 23:06
I’d like to mention one last thing before handing over to David. it's a color correction technique very similar to curves in photoshop, which is what our artists wanted They wanted to be able to set the tone and contrast extactly like they wanted it in different areas They already had control over shadows midtones and highlights, but that wasn’t enough in the editor the tool consists of four curves, one for each color channel plus luminosity. They wanted something similar to curves in photoshop to be able to get set the tone and contrast extactly like they wanted it in different areas And they wanted to be able to edit it in real time in the editor <color tools> <interleave with pictures after initial slide, otherwise people will go wtf is this> <also show slides with some actual math> this is unrealated to beast but it's a nice technique our artists found very useful in setting the exact right tone in the game and in different scenes. it's sort of similar to color cubes but with some benefits one of the nice things about using piecewise linear curves is that they interpolate nicely. which gives good looking transitions between areas with different curve settings <with without examples from game + invert?> 02/10/10 23:06
So this is what the one of our levels looks like in the game and editor. You can see the curves editor to the right. They have done some small adjustments. 02/10/10 23:06
And this is what it looked like without them. So the difference might seem small to some of you, but it really helped the artists going that last mile 02/10/10 23:06
The change here is more obvious. Lots of more contrast 02/10/10 23:06
So this is what our first level looks like in the game and editor. You can see the curves editor to the right. /*First level of our game, */some extra blue in the lower part of the spectrum, a little less red all over, and some more contrast 02/10/10 23:06
And this is what it looked like before 02/10/10 23:06
Another example with the adjustments, 02/10/10 23:06
And without. Suttle differences that make the whole thing come together 02/10/10 23:06
it's sort of similar to color cubes in many ways But we instead use 16 linear segments for r,g and b in runtime 02/10/10 23:06
So if an artist created curve looks like this 02/10/10 23:06
It’s segmented at fixed intervals into something like this 02/10/10 23:06
Which is usually close enough 02/10/10 23:06
The segmented data is sent to the gpu in the form of two one dimensional 16 bit textures one of the nice things about using piecewise linear curves is that two sets of curves interpolate nicely. which gives good looking transitions between areas with different curve setting You can also add a permanent contrast or gamma curve 02/10/10 23:06
Another tip if you’re using dxt1 srgb for your lightmaps is to move the color space conversion to the pixel shader on GPUs that have bad sRGB approximations. It can get pretty bad on some platforms with per object HDR scaling 02/10/10 23:06