Virtual sports (2020)

Tabcorp

SUMMARY

Virtual Sports was an initiative that aimed to demonstrate the Trackside team’s capabilities to the wider Tabcorp, showing that we are capable of driving a series of new products in-house. AFL and Super Car racing was chosen as the best candidate to display the untapped potential in Australian betting markets. The development team consisted of 2 artists, including myself.

I lead all the environmental art and the Unreal Blueprint aspects of Virtual Sports. This also included: documentation, planning, and estimation.

With a limited budget, I had to oversee that we were investing our time wisely. Focusing on the MVP points that allowed to get our point across.

This all had to be done during COVID lockdown as we were all working from home and visiting the locations was not an option.

Responsible for the creation of:

  • All 3D environment models, textures and materials

  • Weather effects

  • Lighting

  • Crowds (excluding character models)

  • Foliage

Environment - Albert Park

Aerial shot of Albert Park in a Super Car race setting

Aerial shot of Albert Park in a Super Car race setting

With a tight budget and timeline, I knew I had to be clever with my effort in creating a map this large.

I utilised a Blender plugin that allowed me to import building and satellite data directly from Google Maps. Thankfully Albert Park is located near Melbourne City, which made me confident in knowing that there would be building data available to extract.

I unwrapped the UVs for the background buildings and created simple and cheap materials for them. I then split the background buildings into clusters, culled the ones I didn’t need, and imported them into UE4. Since their geometry is very simple, we could afford keep a lot of them in the scene.

Importing google map building and satellite data into Blender

Importing google map building and satellite data into Blender

I used virtual texturing for the landscape, allowing me to import the landscape texture into Unreal without significant performance impact.

Roads were implemented using the landscape spline component. With the way I set up the road material, the material data is baked into the Runtime Virtual Texture, allowing it to be combined together with decals and the landscape without much performance cost,

Landscape Spline component was used to place roads

Landscape Spline component was used to place roads

Environment - Melbourne Cricket Ground (MCG)

Although smaller in comparison to Albert Park, I still used the same Google Map data workflow. This saved me a lot of time due to not having to worry about the placements of the background buildings.

With MCG being a real life building, I was able to find rough dimensions of the building and the light towers. Being able to use real dimensions meant that I didn’t have to worry about scale much, so the blocking phase went by pretty quickly.

Aerial shot of the Melbourne Cricket Ground in an AFL setting

Aerial shot of the Melbourne Cricket Ground in an AFL setting

Block out of MCG model

Block out of MCG model

Sourcing the textures for the MCG was actually pretty fun. I took my own photos of concrete, metal etc. that I found around my house. Using Substance Alchemist, it was easy to quickly convert them to PBR compliant materials.

Concrete and grass texture extracted from photos that I took in front of my house

Crowd System

With a tight budget and timeline, I couldn’t justify doing the R&D to come up with an in-house solution for rendering animated crowds. Rendering thousands of regular skeletal meshes would explode the CPU budget.

Instead, I utilised a plugin for UE4 that allows users to bake the skeletal animation vertex data as a texture. With this texture, I used it to manipulate the verticies of a regular static mesh via the World Position Offset (WPO) in the material editor. This offsets the animation to the GPU, which allowed me to create thousands of crowd instances in the level.

rain system

For the rain system, I created a number of material functions that can be re-used in Unreal’s material editor.

There are 3 main parts to it.

  1. Droplet ripples

  2. Vertical dripping droplets

  3. Puddles

Depending on what type of object it is, you can add in the type of material function you need. E.g. the ground only needs droplet ripples and puddles

I’ve hooked up all the material functions to a single global parameter collection, allowing me to easily change the intensity of the rain effect.