A good way to light up characters in open-world?

Hello everyone,

I’m building an open-world game, and would love any idea on how the industry doing for character lighting in the open-world or MMOs? I tried to search for posts and GDC lectures but hardly find content related. I’m planning to light up characters separately with blending to the environment lighting, but haven’t got an idea on how to blend them properly. Appreciate any info or related links, thanks very much!!

A lot depends on whether or not you have dynamic time of day.

If you don’t have a changing time of day, you’ll generally get some kind of lighting info tied to the underlying wold lightmap . That could be as simple as a scalar value between light and dark if all you have is a shadow map, but more often it will be something like a spherical harmonic which captures a low-fidelity version of all the incoming light at that point. In this version the character typically samples the lightmap of whatever they are standing on and uses the lightmap info to light itself. A “lit” pixel gets the full impact of the lighting, dark pixel gets less. The character probably needs to blend between nearby samples to get a smooth change.

A very common variant of this is to store the lighting info in a network of “light probes”, which are usually storing the same kind of onmi-directional light information but which are sampled in space rather than on the ground (this avoids problem when a character jumps off a height, for example).

All of that info is used to generate the ambient light or global light for a the characters. In older games that’s all you get, but if you want crisp shadows you’ll typically use depth map shadows to light the character directly even if the lightmapped world is not using then. That’s the only way to get self-shadowing on the character. Often the cast character shadows are faded into the lightmapped world to tie the character more closely to their surroundings.

In a modern renderer you usually also need reflection maps: most PBR renderers (including Unity and Unreal) need a fairly detailed reflection map to handle small-scale glossy reflections. Typically these are hand placed when detail is needed, with some kind of fallback for open areas. These are generally baked at the same time as the light maps.

Most of the time the character is also directly lit by one or more light sources (effects, flashlights, etc). These are just added on top of other lighting.

If you do have changing time of day things get worse. You can’t rely on lightmaps anymore, since the sun and sky light are always changing. Plus the reflection maps need to be recalculated all the time to account for the changing time. In a system like this the lightmaps are usually replaced by a pre-calculated set of relationships, like 'if this place here is getting directly lit, I will be lit by some % of that" . The actual light values are typically getting into the character from a probe network as in the other version, the difference is that the probe network is constantly being adjusted to accommodate the changing time.

In this version, there’s usually no need to fade the character shadows in because there are no light maps. It’s common to have many more shadow cascades to cover a wider area.

In this version you’ll still have additional dynamic sources too, the difference being that some of them may also be contributing to the network of probes.

2 Likes

Hi, thanks for the reply! Sorry for late reply though it has been long time ><
Great explanations! We are aiming for dynamic daytime changing… The answer definitely helps a lot. By the ‘pre-calculated set of relationships’, emm is it baked through some way or, handpaint to decide? This is kind of new to me.
For the character shadow under this changing light, is it usually directly use dynamic light shadow, or some pre-calculated shadow sprite sheets? emmm sounds like many preparation calculations if use the sprite sheets. Will it really helps the performance that using the real shadow?