Launch Trailer
Key Contributions
Asgard's Wrath 2 was my first major AAA title. I worked as a senior rendering engineer focusing on visual systems and features. I had a close relationship with art and enjoyed collaborating with them, sometimes on their requests, often bringing forward my own ideas after noticing problems or opportunities.
Dynamic Shadows
The dynamic shadow system was an interesting throwback to planar projection shadows, affording real-time shadows on characters and major props at good performance on the Meta Quest 2 and 3.
I inherited a minimal implementation from a prior engineer, but it was fairly bare-bones. After discussions with art and design about their needs, I refactored it into a new system and carried it from about 20% to the finish line with significant improvements to performance, fidelity, and usability.
The approach rendered casters to an atlas and composited them onto the scene using decal-like projector volumes, keeping the cost isolated to only the relevant fragments. Multiple shadows were packed into the same atlas slots by using all four color channels. Perhaps the most impressive usages were on large creatures such as Heru, Sakhmet, and the beast carrying her temple.
Character Shading
I noticed that most characters in the game looked a bit pale and plastic. I pitched an idea to the character team: a creative approximation of subsurface scattering based on wrap-lighting with a LUT. They were on board. Engineering wasn't convinced I could pull it off. I proved them wrong with an implementation that looked great and was basically free performance-wise.
The character team loved it. Nearly invisible cost, but it made the characters look much more life-like. The improved skin rendering is especially visible on Cyrene in the 4th screenshot.
Environment Shading
Good environment shading was a fun and interesting challenge. Hardware constraints meant we couldn't afford many textures beyond the bare minimum for PBR, so shortcuts, approximations, and creative techniques were needed.
Biplanar Mapping
Art had wanted triplanar mapping but had been told before I joined that it was too expensive. I found an approach on Inigo Quilez's blog that was nearly identical but with reduced texture bandwidth overhead. I implemented it, performance was great, so I polished and shipped it. Art was thrilled. It sped up their workflow considerably and improved our fidelity.
Detail Maps
Art brought this up in passing. I designed my implementation based on what I'd observed in Halo 1 and 2, which made extensive use of detail albedo and normal maps to add surface detail and mask lower-resolution base textures. Not a complicated technique, but it worked well. It was also used on larger characters such as Sakhmet.
Channel Packing
Environment art really wanted roughness on terrain but we couldn't afford an extra texture. I suggested packing that data into the alpha channel of the albedo so it would come along with textures we were already sampling. Basically zero extra cost since the GPU was likely fetching RGBA anyway. This was key in both the Quest 3 fidelity upgrade and the base game's environments.
Screenshots
Dynamic Shadows
Character Shading
Environment Shading
Water Shading