Truant said:
Damn. After Crysis and Killzone, games without dynamic shadows really feel a little dated. Especially stuff that looks great in most other respects.
There are various levels of dynamic lighting and shadows, and Halo 3 certainly uses dynamic shadows. In general, precalculated lighting looks better than most completely dynamically lit lighting, until you throw dynamic objects into the mix (like any game will have), and then you have to find the best way to mix precalculated lighting with dynamic lights and dynamic objects. There are various pros and cons to each though. For example, precalculated lighting is many times faster than completely dynamic lighting, especially as the dynamic lighting tries to approach the quality of precalculated lighting (things like global illumination and radiosity, for example). Completely dynamic lighting is ... well, completely dynamic, so lights can be turned off, moved, etc. and it affects everything in the scene.
Halo 3 uses a technique where they use pre-calculated lighting and shadows for static geometry (stuff that doesn't move), and then dynamic lighting for stuff that's dynamic. The static geometry also receives additional dynamic lighting when a dynamic light source (such as an explosion) is nearby.
In Halo 3, I believe only one shadow is cast per dynamic object. Each dynamic object, such as a player, is constantly calculating the most significant light based on their current location.
As far as I can tell it uses technique for dynamic shadow known as modulative texture shadow mapping which essentially renders the fully lit scene and then projects the shadow for a dynamic object onto its surroundings and darkens that area. You might be saying to yourself "well obviously, that's what a shadow is right?", but that's not actually how light works in real life, but is how it has to be done when using precalculated lightmaps.
Other games do this as well, of course, with small variations. Half Life 2 and Gears of War, for example.
This is actually completely different from an additive lighting and shadowing system such as Crysis (that doesn't use precalculated lightmaps), where instead of darkening the shadowed area after the lighting has been applied to the scene, it calculates a shadow map per light and uses it as a mask while that particular light is being applied to the scene.
In Halo 3 you can see the most significant light being changed as you move your character around. For example, let's say you're standing in a room with a ceiling light. and it's the most significant light, then move into another room with a closer light. At a certain point the shadow will move from the previous most significant light to the new one. Watch for it when viewing a replay in theatre mode.
Another thing though is that not every dynamic object casts a shadow in Halo 3. For the most part, only the players, vehicles, weapons, and specific dynamic objects cast shadows, and that's the biggest problem with precalculated lighting that needs to be addressed.
Especially when you throw Forge into the mix, where none (or not many) of the major world building objects that you place in Forge cast shadows.
I'm actually working on some code as a side project which can calculate lightmaps using the GPU fast enough to allow a developer to generate precalculated lighting within a few seconds, which is fast enough to load a map and precalculate the lighting immediately.