Rendering

I worked as a rendering programmer on Saints Row (2022), primarily in particles, VFX, accessibility, materials, and optimization. Here's a sample of my rendering work:

The most advanced high contrast mode ever shipped

I was responsible for the game and engine development of the high contrast mode in Saints Row (2022). Highlights are accomplished by an extra highlight material pass on the object and the full screen effect uses G-buffer data to mute non-highlight objects and add edge detection. In order to highlight the large number of high contrast objects, I compressed the highlight material storage system by an order of magnitude. The edge detection for high contrast uses a proprietary depth-normal kernel to hide small objects with noisy details.

Saints Row's high contrast mode was designed to primarily highlight friend, enemy, and neutral people and vehicles, with optional special objects. Highlight mode and colors are user configurable. Opaque, alpha, and decal objects are able to be masked to show through the optional high contrast filter.

FPS gains with adaptive quality

To support High-FPS modes on the Gen9 consoles and PC, I invented an adaptive quality system. Our engine already supported dynamic quality adjustment, so it was more efficient to add adaptive quality instead of adaptive resolution. My system uses a greedy knapsack algorithm to adjust quality settings like shadows and ambient occlusion in response to framerate. In complex scenes, the settings are automatically reduced to hit goal frametime and in simpler scenes, settings are increased to maximize scene quality. The algorithm estimates quality time costs and packs the frametime 'knapsack' with the highest quality options possible. A feedback system measures progress toward the frametime goal to determine if the pack was successful. While scene dependent, this algorithm can reduce frametime costs by 10ms.

Deformable undergrowth

Late in the development of Saints Row, it was decided that we needed deform response in our undergrowth. We wanted pedestrians, road vehicles, and flying vehicles to deform the plants in Santo Ileso, but we didn't have artist resources to allocate. Without art support, everything needed to be handled in game logic. Using the existing object pivot and vertex compression size data, I created a deformation system that could flatten small wide plants like grass sheets, while bending tall vertical plants like saplings. This was all using single pass GPU blend for each influencing object, no texture readbacks are needed. Using blends, I was able to add support for deform history and dynamics by mapping the blend values to a spring function encoded in the plant shader.

Weather control with ease

Originally, this was going to be a simple system to control the blends between weather states, but it grew to things like critter and trash spawning. Artists wanted to spawn weather related objects near the player, so I designed an ambient spawn system to create and track spawned objects for each weather state. Eventually, this grew to support trigger volumes and spawn volumes, locking spawns relative to player position, and scripting support for missions and cinematics.

Since our weather states had lots of dynamic moving particles and fog, I added interior volumes that can mute fog and particle effects. With a custom shader node, artists could flag shaders as 'exterior-only', preventing them from showing inside stores and tunnels. These interior volumes could affect fog, particles, and meshes.

Advanced particle systems

I did much of the particle system work in Saints Row. For ribbons, I added non-linear frame interpolation for smoother blends when framerate is not consistent. I also added view orientation adjustment, to break vertex welding when on-axis views would force interpolation out of the ribbon axis. I wrote scripts and tools to migrate all of our single dimension turbulent particles systems to a 3D turbulence model. I also improved velocity inheritance, frame emission spacing, property randomness, and orientation interpolation.

Other work

I implemented Saints Row's borderless window mode and added variable refresh rate support. My method scales the game's render resolution, so the user could reduce resolution for increased performance, while maintaining the benefits of a fullscreen window and not doing a mode switch out of their desktop resolution. When a principal programmer left Volition, I took over the design and implementation of the PC launcher tool for users to select their graphics API. I created a small, minimally dependent executable that could still use game resources and localization.