↓ Skip to main content

EXR

EXR is a cross-platform rowing app where you train, race, and follow structured workouts in a stylized virtual world. As a senior technical artist on a small team, I worked mainly on rendering, UI, and the tooling and pipeline around them.

Rendering
#

When working on EXR, I was responsible for the rendering of the game.

Environment System
#

I’ve implemented a custom environment system, allowing creating different time of day settings and weather profiles. It’s built on Unity’s render feature using the RenderGraph system and volume framework. This lets the artists and designer set up overrides while having a smooth transition.

This was needed when multiple biomes are set in the same scene.

Water
#

Water is probably the most important thing to look good in a virtual rowing app. As my first task on the game I updated the water rendering to a more modern stylized look. Using render features to implement dynamic wakes to classic depth based coloring I managed to make water feel good while keeping performance within targets. The final shader includes:

  • Water Decals for debris or foam effects
  • Depth based colors
  • Depth based refraction
  • Planar reflections
  • Edge foam
  • Dynamic boat wakes

Crowds
#

To make the world of EXR feel more alive we wanted to implement some crowds. Since we could have thousands of instances in the scene, ordinary skeletal animations would be too heavy for performance. We opted for a shader based animation system where the position and rotation of each vertex is baked to a texture, with some randomization added in the clothes and colors.


UI Implementation
#

Since the release of UIToolkit in Unity 2021 we started porting the old UI to a newer look. Designs were made in Figma, and I ported them into Unity. Using custom USS themes, I was able to share styles and variables in the project so I could spend less time creating the UXML files, and focus more on the functionality. Custom UI elements were also created for our custom localization solution.


Custom Tools
#

Training Editor
#

As a technical artist I often had to create custom tooling for the game. Because EXR allows users to follow predefined workouts and training plans one of the many pain points was creating them. They are loaded in as JSON data that contain a lot of nested data. Because of that it was very easy to make mistakes in formatting or setting up any data.

With the workout and training plan editor, designers can focus only on setting up the needed data and the tool would handle the correct formatting and validate any data.

Localization Importer
#

Since EXR uses its own custom localization system, with each language table stored in a separate file, keeping everything in sync can be tiresome. Because we also use third-party services for localizing to foreign languages, one big table was kept on the cloud using Google Sheets.

Then the localization importer in Unity can download those tables and split them up in their correct language files, removing the need to manually add them for every entry.

Billboard Baker
#

Nature is a big part of EXR’s world. Because we primarily target tablets and mobile devices, we can’t render thousands of grass meshes and trees without tanking performance. Even with LODs, objects in the far distance would be very bad for performance. Instead of rendering low resolution meshes, we baked them into albedo textures and normal maps so they can be displayed into simple quads.