User’s Journey: The Creation of a Cinematic Loop Animation

Learn how Sebastian Marek created this seamless, high-quality animated loop with Substance.

From the beginning, when the Substance team reached out to me, I knew I wanted to create a cinematic. I had an idea that this would be about a character, whose face is covered with a helmet, and who walks in a seemingly endless setting. Actually, User’s Journey is a metaphor. It represents browsing an infinite material library in a futuristic environment.


Throughout this project, I wanted to present the use of Substance tools in an animation. I also wanted to explore different asset scenarios.

Futuristic helmet design

When I model an asset like this, I divide shapes into thee types: Primary, Secondary, and Tertiary.  This design principle guarantees a harmonious final result: it helps lead the eye across the whole model when there are a lot of shape variations. Another key design principle which I use is to have both detailed and eye-resting zones so we are not overwhelmed with too many details fighting for our attention.

Once my model is finished, I prepare it for texturing in Substance Painter by unwrapping the UVs into three UDIMs inside RizomUV. It allows me to use multiple higher resolution textures so the surface is sharp and detailed, even for close-up shots. I also prepare Mesh IDs by creating selection sets to bake additional ID maps. This setup helps me control mask selection on the model more easily.

Then it’s time for texturing! I import my model into Substance Painter and start applying materials from the Substance Source library. I used Iron Rusty, Rust Corrosion Drip and Rust Fine, but I also used base materials from Substance Painter like Steel Painted, Steel Rust and Wear, and Steel Rough. Blending all these materials together with procedural masks gave me that worn-out look I was going for.

To extract the details and adjust textures, I usually add a layer on top with the passthrough mode, which allows me to affect all the layers stacked below. Then, I apply filters, like Sharpen and Contrast Luminosity, and adjust them globally. This is what my layers look like:


To add more detail and support the functional aspect of the model, I created industrial labels in Adobe Illustrator and used them in Substance Painter.

To apply these labels, I just had to create a fill layer in a mask and then use them in a material. This approach allows me to work on the material and label placement separately, so I can change them anytime.


Here is the final render of the helmet:


But the helmet was only the first step of the animation. After this, I began work on the background.

Fictional control panels

From the beginning I knew I wanted the background of the shot to represent a library of procedural materials that you could browse endlessly. Since every procedural material has many parameters, I wanted to find a cool concept to ideate that. I settled on a fictional control room.

Before jumping into modeling, I searched for references. These were used as a basis to conceptualize and organize the individual elements in Adobe Illustrator.

3D model Adobe Illustrator

Because I started my career as a 2D designer, I am used to sketching and iterating on concepts with Illustrator, and using my concepts as patterns for modeling in 3ds Max was very straightforward.

For the textures, I recycled! I created Smart Materials out of the textures I’d made for the helmet, and used those on the panel. (Here’s a tutorial to make your own Smart Material, if you’re interested.) After adjusting the texture scale, I had a good base on which to paint additional details. Some repeatable parts like knobs and handles are overlaid on the UV space, so they share the same texture. I recommend this: it’s good practice for optimization, especially when an asset is created for a game engine.

The entire point of this model in the end was to be modulable. That way one single model would allow me to generate an entire room full of control panels without too much repetition. This approach allowed to me to create different variations of the shelf by just rearranging individual parts and still have the same texture set — except for variations in the emission texture.

At the end, I scattered these shelves into a case, and just changed the seed values to get different arrangement, and an almost endless variation of the individual case. That was a huge time saver for both modeling and texturing. And this was the final result:

Character animation with Mixamo

Next, I uploaded my base character from DazStudio with the helmet into Mixamo. This allowed me to get an automatically rigged character, and then choose from a large library of character animation. For my needs, I exported the A-pose and one of the walk cycles, and then blended them together to create a smooth transition between the starting pose, which I used to work on garments, and the final animation.


Based on the A-pose from Mixamo, I began making clothes inside Marvelous Designer, which uses a traditional clothes production method. That meant I had to find a sewing pattern, which I then tried to apply and modify on my character so it would look and behave correctly on the simulation.

The Substance engine is now integrated into Marvelous Designer and you can use your .sbsar within the tool, so I could apply and modify materials directly from Substance Source at the sewing stage. That’s exactly what I did, and I picked the Wool Gabardine, Pebbled Leather, and Synthetic Fabric Resin Printed as a base for the different parts of the jacket.


Marvelous Designer supports the UDIMs workflow and Substance Painter allows artists to paint across UDIMs. In this case, this helped me a lot, because some parts of the coat would share the same material but be on different UV tiles. Without this feature, it would have been harder to achieve a seamless look between UV tiles.

Substance Painter Marvelous Designer

To add extra details in the coat, I used Substance Painter for stitches, decals and buttons. Usually, when I paint stitches, I like to paint them as a mask, and then duplicate that layer with inverted height values and a blur filter. That trick creates a concave space for the thread and makes it look a lot more realistic.


Final scene assembly

In the end, getting every element together into a seamless loop was the main challenge of this project.

To achieve this, I built a tileable layout by placing control panels inside Cinema 4D using a cloner modifier at a certain distance and rhythm, taking special care that it would looke the same in the first and last frame. For the lighting, I used the same method: I placed area lights to light up the character in an interesting way, leaving enough distance between each light that he wouldn’t be in the light all the time, and also while making sure there would be enough contrast with the illuminated background.

I still had to use many tricks, such as extending the background layout before the first frame so the character would have the same amount of bounce light at the beginning and at the end.

Because the character animation is linear (the speed is constant), I only needed to find a good framing for the camera and keyframe it following the same linear movement.

The final animation had 124 frames and was rendered with Redshift on GPU in 1920×1080 resolution.


The Substance tools play a big role in my personal and commercial projects. They help me achieve realistic results and speed up both texturing and shading development. Because they are procedural, I can make changes very quickly, and with the large Substance Source library, I could easily test and modify different materials early in my look development process, before moving on to Substance Painter to add texturing details.