Rendering Bel's Fanfare

January 31st, 2026
Bel's Fanfare

Motivation

In Bel's Fanfare, our biggest inspirations are the Zelda games from the N64: TLOZ: Ocarina Of Time and TLOZ: Majora's Mask. The art direction of this project was very clear and specific from the very beginning. It was not about recreating the look of those N64 games as they actually were, but about how people remember them, which is why we looked at the Zelda remasters from the 3DS instead. In this article, I will explain the lighting techniques used in those games and our approach to replicate them in the Unity Engine.

Pit Of Offerings Unlit vs Lit

A look at the past

In the past, most games relied heavily on baked lighting because it was necessary to depict complex scenes in realtime. When we think of precalculated lighting nowadays, we think of lightmaps. However, many games had their lighting baked into vertices instead. It required less memory, shorter baking iterations, and offered better performance.

Take a look at a scene from TLOZ: Skyward Sword for example. Lighting is very smooth, without hard shadows. You could almost believe that it is just good texture work.

Textures On
Zelda Skyward Sword, Waterfall Cave. Textures On.

However, thanks to the website noclip, we can disable textures and uncover the truth:

Textures Off
Zelda Skyward Sword, Waterfall Cave. Textures Off.

Indeed, it's all just good old vertex colors. It is hard to put into words just how much baked vertex lighting contributes to the final look of older Zelda games. For instance, take a look at TLOZ: The Wind waker. It's a cel shaded game, surely it is just hard lights and cartoony textures, right?

Unlit Lit
Zelda Wind Waker, Forest Of Fairies. Unlit vs Lit.
Unlit Lit
Zelda Wind Waker, Windfall Island. Unlit vs Lit.

As you can see, vertex color is used to add shadows and ambient occlusion to the scenes. It is completely essential to the game's art style as it would otherwise look much flatter, especially in interiors. However, it is so subtle and smooth, that it can easily go unnoticed.

While vertex colors had already been used in older Zelda games, I think they reached new heights in the 3DS Zelda remasters. Take a look at these images from TLOZ: Majora's Mask:

Unlit Lit
Zelda Majora's Mask, Fairy Fountain. Unlit vs Lit.
Unlit Lit
Zelda Majora's Mask, Mayor's Office. Unlit vs Lit.
Unlit Lit
Zelda Majora's Mask, Stock Pot Inn. Unlit vs Lit.

As you can see, vertex colors are not just used to add a bit of depth to the scene. Direct and indirect lighting are masterfully baked into vertex colors in these games, which greatly contributes to their characteristic look.

Implementation

Since the game is being developed in Unity using the Universal Render Pipeline, the entire lighting system had to be implemented from the ground up taking into account how its results would be injected in the pipeline.

There were two different lighting phenomena that were required:

While I initially implemented a baking algorithm that ran in the CPU, it was soon clear that it didn't scale well when using large meshes and many lights. We are a small team, so we couldn't afford to waste hours looking at a progress bar. We needed a way to see how assets would look in-engine fast. To achieve that, I reimplemented the entire algorithm to make use of hardware ray tracing. This change allows us to bake all lighting and ambient occlusion in an instant by pressing a single button. While hardware ray tracing is usually associated with high-end graphics, it can actually be used for anything, including an editor tool to bake per-vertex lighting.

Once lighting and occlusion are calculated and stored as vertex colors, a custom shader is employed to abuse the emissive property of materials by adding baked lighting to it.

If you're interested in reading an in-depth explanation of these systems, last year I wrote a couple of articles in which I detailed how I implemented both Vertex Ambient Occlusion and Vertex Lighting.

Integration of dynamic objects

While baked lighting looks great, it can only be applied to static meshes. How dynamic objects are lit is just as important though. In our case, we have a system that generates realtime lights that match their baked counterparts. These lights use a culling mask to affect only dynamics objects such as characters. Additionally, we have configured the render pipeline to use vertex lighting to better match the 3DS Zelda games.

Off On
Vertex Lights Off vs On

Results

Occlusion Lighting
Crewhub AO and Light
Unlit Lit
Crewhub Unlit vs Lit
Occlusion Lighting
Dressing Room AO and Light
Unlit Lit
Dressing Room Unlit vs Lit
Occlusion Lighting
Entry AO and Light
Unlit Lit
Entry Unlit vs Lit
Occlusion Lighting
Forum AO and Light
Unlit Lit
Forum Unlit vs Lit
Occlusion Lighting
Fos Room AO and Light
Unlit Lit
Fos Room Unlit vs Lit
Occlusion Lighting
Ovens AO and Light
Unlit Lit
Ovens Unlit vs Lit
Occlusion Lighting
Pantry AO and Light
Unlit Lit
Pantry Unlit vs Lit
Occlusion Lighting
Pit Of Offerings AO and Light
Unlit Lit
Pit Of Offerings Unlit vs Lit

Conclusion

To be honest, I didn't find the idea of reproducing 3DS graphics on modern hardware attractive at first. However, I ended up enjoying the process a lot and also learnt a few things about lighting and geometry along the way. I feel like I understand better why these old lighting techniques still appeal to a lot of people, myself included.

Low-poly games are not just about nostalgia or self-imposed technical limitations, it's an art style just like pixel-art is. However, doing low-poly assets is just a part of it. Back in the day, developers were not trying to do low-poly assets intentionally. In fact, it was the opposite, they tried to squeeze as much performance and fidelity as possible from their hardware. This mindset included shading of course, which is why baked lighting was so predominant.

While per-vertex lighting is accurate for each vertex individually, it becomes less accurate when interpolated across triangles’ surfaces. However, there is a certain beauty in the linearity of the interpolation and the patterns that originate from it even on flat surfaces. If you look at intersections between objects, lighting varies slightly due to interpolation. It is still coherent, but the subtle difference reveals the polygonal nature of the scene. What might have been a technical limitation back in the day, has become essential to accomplish the art direction of Bel's Fanfare.

Just as we saw a resurgence of pixel-art games in the last decade, something tells me that the same is about to happen with low-poly games. While we have focused particularly on the 3DS Zelda remasters, there are many other frontiers to explore. What about a shooter that emulates DS graphics? Or an RPG that uses PS1 graphics? I guess we'll see.