Download

Directional lightmaps & poor representation of normal maps in Lightmass

Something that’s been bothering me for a while with UE4 is how poorly lightmaps represent lighting directionality on normal mapped surfaces. Lightmass is actually a fairly robust system in most other aspects, but this is something I’m really missing from other engines. While normal maps + baked lighting have been a dope-looking combo since the era of Half-Life 2, I find they’re practically impossible to see in UE4, making surfaces that rely on normal maps look unnaturally flat in ambient light, forcing users to rely on more expensive stationary lights, bake some lighting information directly into their textures’ albedo, or avoid ambient lighting scenarios altogether.

What’s the problem?
Basically, I’m not quite sure. UE4 already stores light directionality in its lightmaps (a quick glance at saved lightmaps tells us that Lightmass uses two types of lightmaps: one for storing the surface’s illuminance in color and intensity, and another for storing the general dominant direction of the light based on three vectors. There’s indeed a hint of directionality visible with baked lighting once a normal map is applied to a surface, but it’s extremely faint compared to how the surface behaves when lit dynamically.

The problem has been briefly discussed in a thread here, where lightmass developer @DanielW himself commented that the lightmap encoding for diffuse shading doesn’t produce as much normal contrast as it should. (Sidenode: while some people in that thread blame the issue on lack of specular lightmaps, this is primarily a problem with *diffuse *shading as far as I can observe, with specular in UE4 being completely decoupled from lightmaps and handled quite well by other systems such as reflection captures.)

I’m not a graphics programmer, and I don’t know why diffuse lightmaps struggle so much with normal maps here (and if it’s a technical decision, if it can be circumvented or not). But it makes me a bit sad, because there’s just no viable alternative to counteract this problem if the aim is graphical quality; Lightmass is the best - and cheapest - we’ve got for ambient lighting situations.

Why does this matter?
Quite simply, every UE4 application that uses baked lighting could greatly benefit from improved surface rendering if the normal maps were represented more accurately. It’s a big part of why normal mapped decals (like cracks and edge breaks) don’t work well outside of direct light, and any scene which is lit primarily by bounce light or light coming from a skylight is gonna have flat-looking materials This is especially bad when rougher materials are concerned, as they’ll be more dependent on diffuse than specular lighting for their look.

This is something that’s been a problem for a while in interior scenes, especially in realtime archviz, which relies a lot on natural, ambient lighting, and consequently struggles at rendering materials with bumpy textures in these conditions (tiles, brick walls, blocks, stucco, concrete, wall finishes, etc). Even in situation that use stationary lights, having better normal contrast in lightmaps could let us drop some stationaries altogether in favor of statics, by bringing the surface response closer between the two.

While it would be awesome to have a response on this issue, I mainly created this thread to bring awareness to it, as I was surprised so few people have tried bringing attention to it throughout UE4’s history.