Andrew Walker

technical artist

Dirtbike Unchained Shaders/Tools

TrackCam

A game-camera recording/playback tool for precise environment layout and set-dressing in editor.

As this game takes place on linear tracks and with no camera control, the camera position & view is essentially the same for everyone (camera smoothing, FOV changes for boost effects and jump heights can cause some variance). The requirement for dense environments while maintaining performance on a wide range of devices means that the level art is optimised for the restricted views you can see while playing through the track.
Lining up the scene camera exactly with where the camera appears in-game is tricky, so to speed up the level art workflow I made this tool to record the game camera, store that data in a Scriptable Object and replay it in the scene view. This allows the game view to show the exact in-game composition while leaving the editor window free. Artists can now craft views and areas with a tighter iteration loop, and remove objects which won’t contribute to the view to save on performance.

Character Shader

Character & Vehicle Animation

Work done:

  • Maya rigs for characters & vehicles
  • Animations for riding, tricks & menu screens
  • Reactive animation blending based on speed & orientation
  • In-game IK setup
    • Attach & Release Hands from handlebars using animation events
    • Look at target for character head/torso by sampling the track ahead

Layered Clothing System

I oversaw a transition from many different equipable items to a more constrained system which would alleviate compounding skinning issues as the project grew over the years. Compared to Bike Unchained 2, we used an outfit + accessory (helmet, goggles, chest, neck) system. From an artist perspective, this makes planning and designing looks easier, as the amount of combinations is far less.
Initially we produced multiple outfits and later added more content as the game developed. Eventually I needed ways to handle complex constraints between clothing items, so I added a system to swap meshes (e.g. shirt with removed sleeves when wearing an open jacket). This greatly reduced skinning issues and allowed more creative freedom.
I also created a data-driven system for automatically creating icons for clothing & dirtbikes, to ensure consistency and save production time.

Environment Shaders

My changes to the environment shader was mainly to unify the lighting and disguise the short shadow distance (cascades were not supported on mobile at the time).
I also made a 2-layer shader for large props which uses trim-sheets on layer 1 and a vertex colour blend for layer 2 (e.g. rust, dirt).

I also added subsurface scattering & ambient occlusion to foliage, masked with vertex colour and fresnel.

Bloom

I implemented a cheap post-processing bloom effect, with a fall-back to a very cheap method for low-end devices.
A standard bloom implementation is based on blurring, which required multiple passes and buffers to achieve nice results. This can eat into performance and memory budgets, so for very low end mobile devices I skip the blurring and rely on accumulating bloom using the mip-maps of the emission buffer. This has obvious artifacts, especially in motion, but uses far less performance and memory.

For medium-strong mobile devices using a typical kernel blur approach.
Two quarter res temporary render textures
Three render passes, of which two are box blurs using multiple texture samples
2 Texture samples in the post-processing blit
For weaker devices. It uses the biased mips from thresholded emission for a cheap effect at cost of motion artifacting.
One quarter res buffer
One render pass to collect emission
2 Texture samples in the post-processing blit

VFX

Faking shadows on dust particles with occasional raycasts – colour changes on emission when occluded. This approximation works because of the fixed track and camera angle.
Animating a jersey flap in-shader with scrolling normals.