There is no doubt that 343 Industries Halo Studios is not fit to hold the jockstrap of prime era Bungie. That being said, I maintain that the campaign for Halo 2 is my least favourite gaming experience of all time, albeit in large part because I hadn’t already given up on the series. Bungie captured lightning in a bottle with the original Halo, then went out of their way to ruin the gameplay and story of the sequel. They even messed up the art style, leading to a game that was immeasurably uglier than the one before.
The story of how Bungie borked their own graphics is told by Late Night Gaming in the above video. I agree with the gist of what he says, although there are a few obvious mistakes.
1:04
Baked shadows can also be animated, to look dynamic.
By definition, baked lighting cannot be animated to look dynamic, and certainly not in real time. The lightmaps created by the chosen offline rendering algorithm are static. If the game environment changes, whether due to the destruction of objects, or even something as simple as the sun moving across the sky, the baked lighting becomes totally inaccurate. It most definitely cannot be applied to the characters in game, as they move around.
The “dynamic shadows” Late Night Gaming refers to are simple texture shadows. The same technique I used to add shadows to the pillars, slapping a translucent black texture down in the right spot with roughly the right shape. No, this is not remotely close to physically accurate, as the light comes from directly overhead, but it’s better than nothing.

Left, no shadows, right, “shadow”
Below is a screenshot from Mario Sunshine, wherein we can observe multiple texture shadows. The one underneath Mario is somewhat complex. The less important characters in the scene get perfect circles, and the buildings get perfect squares.

The Halo:CE version renders each character from the perspective of each light to a texture that is converted to translucent black and white. This gets placed on the ground in roughly the correct spot, and stretched appropriately. The result is a shadow that animates in real time, and looks pretty convincing.

Texture shadows are simple, performant, and some cases may even be more aesthetic than more technically correct shadows. Even if proper dynamic shadows do in fact look mildly better on average, I can’t say I would have minded a world where modern games combined these simple yet effective lighting models with artistic shaders, then ran at higher framerate and resolutions. You could argue that the obsession modern games have with realistic, physically based lighting only shows how stunted they are as an art form.
After all, the best movies have deliberately unrealistic lighting. This is called cinematography, and there are awards given every year for the filmmakers who just stick the actors in a room and roll the cameras come up with the combination of unrealistic set lighting and unrealistic post processing that is most visually pleasing and best tells the story.

Having said all that, there are some mild limitations with shadow textures. They only work when there is a predesignated object to be shadowed that is entirely behind the shadowing object. That pretty much means they work best when limited to floor shadows cast by a ceiling light, or some variation thereof. Other scenarios are dicier, although they may work equally well.
As the shadows are simple textures that contain no depth information, characters cannot cast shadows on themselves, can only cast mediocre approximations on other dynamic entities, and it’s difficult if not impossible to properly cull the shadows. This can lead to some visual glitches such as a shadow from a character in another room extending through a wall. It can also lead to a more mundane problem, where our models don’t pop as much as we’d like. This is especially true if we’re going for harsh, dramatic lighting.
If the artists take this into account when creating the assets, this can be somewhat mitigated, as parts of the model can have faked self-shadows. You can see in the image below this technique used to fake Master Chief’s helmet brim “casting” shadows on his visor. It is also done more subtly with his neck, and in the groin area. The grunt also has built in shadowing on his neck, at the bottom of his breastplate, and on his biceps bracelets.

However, we see the limitation in the grunt’s midsection and legs, which look quite flat. I think they could have done a little more, especially around his groin area and with the armour around his lower ribs, but there’s only so much you can do with a technique that must look decent regardless of the specific lighting shining on a character.
Finally, every dynamic object in the scene needs to have its own shadow texture created every frame, or be entirely unshadowed. The simple shadows, like we saw with most objects in Mario Sunshine, are quite cheap to create and place. The more complicated shadows require the model be rendered from the cameras perspective. If you have ten lights in the scene and a hundred objects, you could be rendering up to one thousand shadow textures per frame. This adds up, although if used reasonably the technique is still cheaper than shadow maps, which also scale linearly with the number of cameras.

I think texture shadows look great, and have a distinct game-y feel to them that I don’t think is just nostalgia. Still, there are advantages to a more robust lighting model. Below we see Doom 3, the first game to ship with the same technique Bungie abandoned. Shadow volumes, often called stencil shadows due to requiring the stencil buffer on the GPU, are what allow for those dynamic, moving, and reasonably accurate shadows you see everywhere in this scene.
Shadow volumes are fine, although modern games have transitioned to utilizing shadow maps for dynamic shadowing. The two main problems with shadow volumes are the massive performance requirements that increase exponentially with polygon count, and poor handling of transparencies, such as commonly employed using foliage. As the shadow volumes are created using the vertices of the quad, the below image, if stamped onto a texture, would project a shadow that is a square box, erasing the leafy detail.

In contrast, shadow maps are created by rendering the scene first from the perspective of the light source, storing the depth of any polygon it sees, which therefore block the light from reaching further. Later, when the scene is rendered from the camera’s perspective, the depth of any given point is compared to this depth map, to check if it is lit by the light or in shadow.
6:02
What you’re seeing here are just ordinary dynamic shadows. Unlike stencil shadows, they’re not pixel perfect. The further away an object is from the dynamic light source, the crappier and more pixelated the shadow becomes, which is why this shadow looks so atrocious here.
Below we see the visual benefits and limitations of shadow maps. While it may or may not be good for gameplay, the realistic self-shadowing on the SPARTAN looks visually gorgeous. Unfortunately, despite the setup of this scene being a near best case scenario for the technique, the shadow on the floor is a pixellated mess.
If we moved the light down at an angle (so the shadow on the floor lengthens), increase its FOV/spread, and moved it far from the character, that pixellated mess would become pixellated to the point of visual incoherence. If you played games between 2005-2015, you almost certainly know what I’m talking about.
The only way to solve this pixellation is by increasing the resolution of the shadow map. This can be done via brute force, or by calculating a number of cascading shadow maps per light source, biasing towards steep angles seen close to the player’s camera. Modern games use a combination of the two, which isn’t a huge deal, because they’re not trying to run their game on the 20 GFLOPs XBox GPU.

The obvious mistake Bungie made in their pursuit of dynamic shadows was choosing shadow volumes over shadow maps. The less obvious mistake was not waiting until the next hardware generation. While it is technically true that shadow maps can be made at any resolution, they look like hot garbage at the low resolutions the original XBox hardware ensured they’d run at.
Bungie was eventually forced to admit this. They cut all dynamic shadowing from Halo 2 late in development, but only after the art assets and levels had been created with dynamic shadows in mind. This artistic rug pull is the main reason why the game looks like it fell out of the ugly tree and broke every branch on its way down.

What lessons can we learn from this mistake?
“Shoot for the moon. Even if you miss, you’ll land among the stars.”
– Norman Vincent Pearle
It may shock you to learn that Norman Vincent Pearle is not an engineer. He is not an astrophysicist. He does not work at NASA. He does not appear to have any expertise in spaceflight. He is instead the author of “The Power Of Positive Thinking,” “The Amazing Results of Positive Thinking,” Positive Thinking Every Day: An Inspiration for Each Day of the Year,” “A Guide to Confident Living,” “The Positive Principle Today,” and about ten other self-help books that appear to have helped him retire at an early age with undeserved wealth.
In reality, if you shoot for the moon and miss, you will die in space. It is theoretically possible that you’ll become entrapped by the Sun’s gravitational pull and burn to a crisp. If so, that is the only star you will ever land among. Best case scenario you end up like Apollo 13, and are successfully rescued. More likely you’ll end up drifting through interstellar space, dying a long, slow, painful death from starvation, which I feel is a great deal less desirable than successfully reaching on the moon.
The actual moon landing is arguably our civilization’s crowning achievement, and I find the danger astronauts knowingly put themselves in far more motivating than any sort of delusional positivity. No guts, no glory. Greatness requires risk. And bravery requires a rational understanding of risk and consequence, but committing anyway. I’m not saying you should never take risks, far from it. I’m just saying that you need to have an accurate appraisal of risk and upside.
Combat Evolved was a beautiful game. Bungie could have made Halo 2 similarly lovely, but instead reached for the moon and ended up as space junk. While I appreciate the days of passionate game developers trying to achieve the literally impossible, they ended up serving as an example of what not to do.
Yet, this wasn’t even the worst technical screwup in Halo 2’s development. Borking the lighting model ensured they made an ugly game. Far more disastrous were their “upgrades” to the AI. This necessitated far fewer enemies for any given encounter. To balance this out, they cranked up the difficulty per enemy, which broke the game.
This is most obvious with respect to the jackal snipers, who deserve all the hate they get. However, of more concern were the changes to the plasma rifle bolt velocity, which was increased to the point of essentially being a hitscan weapon. That’s also most relevant to Escape From Epstein Island, which is why I started this series, but I’ll get into that in the next piece.












