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.