Asset Creation 101: Bringing a toilet to life

Introducing Lady Jubilee!
October 29, 2020
Captain ToonHead’s Shocking ElectroSlice: Putting Pineapple on Pizza… or Not!
February 11, 2021

What’s the life cycle of developing an asset in a video game, you ask? Well, even if you didn’t ask – there’s a lot more detail involved in every little part of a video game. One example of a recent asset we created for our upcoming VR title developed in Unreal Engine, Captain Toonhead: the toilet.

What’s the process for creating a new asset?

When we talk about an asset, it could be anything – in this instance, we’re talking about a tangible asset that an end-user can interact with within a game. And specifically, we’re talking about a toilet. A critical asset for any person, no?

For us, our process looked like this:

  • Concept images. These outlined the general direction and proportions for the asset.
  • Blockout. This was our first pass at generating the asset in 3D Max.
  • High Poly pass. Taking the blockout, we then did a high poly pass – meaning we added more detail.
  • Low Poly pass. So after making it look super detailed and good, we then created a low poly version – a model with fewer polygons to be used in the game. 
  • Detail Baking. Using the high poly pass, we went into Substance Painter to project the detail from the high poly pass onto the low poly asset.
  • Texture time. We then textured up the substantive toilet.
  • Feedback time. Feedback and iteration are important in our process – at this point, we needed to take the version created by our art team and get feedback from our art and game directors, especially to make sure it fit the game’s overall art direction.
  • Geometry adjustments. In this particular asset creation process, we redid the textures and adjusted the geometry of the asset.
  • Imported it into Unreal. Unreal Engine is the primary engine we use currently on our big console-based projects. At this point, we took our fancy toilet with its textures and substance and plopped it into the game engine itself.
  • Materials and shaders created. Once it was in Unreal, we then created the materials and shaders needed to make the toilet function.
  • Extra details. We messed around with some colors, some of the VFX and events for programming.
  • A toilet was born. Voila! 

Ok so what does all of this mean in normal people speak?

Here are some of the visuals that we had through the steps mentioned above –

Here’s the concept art where we started developing the asset for the game: 

Above is an example of how greatly the steps of redoing the textures can affect an asset:

We create videos for several of our assets, here’s one of our overviews – specifically noting the flushing:

What else is involved in making an asset?

Beyond the technical pieces and logistics outlined above, there are always other interesting elements brought in by the art direction team.

For the creation of this asset – we wanted to make it look good and specifically match the style and color palette of the existing game. The blue, in this game, is really important to clearly identify the faction where this asset belongs. 

More hilariously, there was at least one meeting internally about the importance of the toilet flushing and which direction it flushed in. 

While developing the behaviors of the toilet, we already had a direction from the story of the game. We needed to create some visual effects and animations to have the toilet be interactive by our players, so at one point during a review, we ended up talking about the flushing animation and materials we needed to create, down to the direction of the flushing! 

In the end tech art did an animated material that could control flushing direction.

Overall, how long did it create this asset?


The creation of this single asset within a single game for us took input and help from 3 people and roughly 40 hours, just to give you an idea of how intensive it is to make one seemingly small component of a larger game.

Leave a Reply

Your email address will not be published. Required fields are marked *