Kevin Andersen

Technical Lighting Artist. Or maybe VFX and Material Artist. Also Optimization and some other stuff. Changes from project to project, really.


Sprint Vector


Windows PC, PS4 (PSVR)


Lead Technical Artist



My second shipped game was much different, both artistically and technically, from Raw Data. Sprint Vector was a cartoony VR racing game in a wacky, colorful world. To read a partial account of my technical contributions to SV, like the toon-shader and clouds material, please check out this hella cool Gamasutra article I wrote. As usual, I was in charge of lighting and atmospheric effects for every environment. I was also responsible for technical art solutions to optimization problems and keeping the game running smoothly on both PC and PS4.

All shots are in Unreal Engine 4, as they appear in the game.

Sharp Edge Normals

To get a flat, angular look on every detail, without textures, the environment artists originally hardened every edge. Sharp edges can nearly triple your vertex count, so that’s a definite no from me. Instead, I had them soften their normals (single smoothing group) and created this material effect to fake hard edges. It uses the normalized cross product of DDX DDY world position as the surface normal.


The clouds are meshes that I threw in the sky in arty ways. I baked their AO and translucency into their vertex colors. The material is unlit and just uses the atmospheric sunlight color and vector to calculate the angle for their color gradient. The translucency in the vertex green channel controls how much light is allowed to wrap around to the other side.

Lava Material Effect

Making the lava was fun. I used a pattern of triangular gradients as a sharp mask with an animated offset to make the triangular bits look like they are breaking apart independently as the surface swells and falls. Exactly zero players ever noticed this.

Happy-Time Toony Shader

We wanted the characters to look like comic book illustrations, as opposed to haunted action figures, so I went about planning a neat little toon shader to apply to all the characters. I made a prototype crunched-lambert in the Unreal material editor (unlit material with my fake-lighting logic in the emissive input) and showed it to our rendering engineer. He was able to translate my graph nodes into actual shader code and get that into the game as a useable shading model. Now it actually works with lights! I love the way it turned out and wish we could start making Sprint Vector 2000 right now so I get to use it again.

Hologram Material Effect

The mesh also renders to the custom depth buffer, where it is an opaque object. Then the translucent material compares its own depth to the custom depth pass to cull out interior geometry. This doubles the geo cost, but it keeps the eyeballs, backpack straps, and other details from showing through and looking weird.

Intro Crowd and Spot Lights

The crowd is a combination of a tiling texture with an animated pixel offset, and several particle emitters making tiny sprites pop up randomly. The spotlight cone material has additional vertex shader logic that flares out the end when the light is facing the camera.

Cosmic Odyssey

The last map released for Sprint Vector was a magnum opus of all disciplines, including technical art and lighting. I was responsible for figuring out how the players are going to go through a portal into another dimension, without any streaming hitches and without blueprint logic. The through-the-portal effect is just the vertices being pushed away from the camera as the player’s position approaches the portal plane. Keeping the effect in the material also means that each player only sees it when they go through the portal themselves.

We could not use lighting scenarios for streaming performance reasons. Each section – including their respective fog, sky, skylight, directional light, and background props – had to be partitioned off and built separately, according to a lengthy instruction sheet I wrote describing how to build lighting properly, which sublevels to save, and when to save them. It was absurdly complicated, but it worked.