Marco Autilio walked us through the process of creating the space sorting station 3D environment, which serves as a tribute to 3D artist Paul Pepera, and detailed how the entire environment was made using a single trimsheet composed of three textures.
Hi, my name is Marco! I am a 3D Environment Artist from Italy. I have a background in industrial design and model making. However, I have been passionate about creating video games since a young age. This passion led me to recently shift my career focus to 3D environment and prop art for games. After completing the Game Art Short Course at Escape Studios in London (UK), I began working as a Studio Assistant at the same University. While I haven't worked at a professional level in the video game industry yet, I am eager to do so soon.
Speaking of 3D game art, I have always been a big fan of the legendary Paul Pepera, an artist who left us prematurely, whose legacy artworks will serve as a source of inspiration, strength, and inestimable value for many artists in the years to come. My latest project pays tribute to one of Pepera's most famous concepts, which I recreated in Unreal Engine 5. As part of my personal skill growth, the main focus of the project was to demystify trimsheets, a task that requires careful planning and, until now, felt somewhat beyond my reach. Therefore, I challenged myself to create the entire environment using a single trimsheet composed of three textures: Base Color, Normal, and a packed AO-Roughness-Metallic (AORM), aiming to produce something impactful yet simple and achievable.
I began by gathering a couple of references from Paul Pepera's concepts. The main reference covered the overall environment, assets, vibe, lighting, and camera shot, while the other references helped focus on mechanical details to help my understanding of his concept in 3D.
My initial focus was on breaking down the reference, and these were my main points:
- Identifying the main hero and repeating assets that would be part of the modular kit;
- Further listing and dividing into smaller repeating assets to help efficiency in the 3D modeling phase.
- Utilizing a 4 x 4 m plane as a reference to visually grasp the scale of the objects in the space helps in setting up the texel density later on;
- Determining the number of materials needed in the trimsheet (types of metals, fabric, plastic, etc.).
In order to get a better idea of the scale of the assets, I proceeded with the blocking-out phase in Maya. During this process, a 3D draft scene is built with simple 3D shapes, making it a relatively quick and rough representation. Once satisfied with the result, I exported it to Unreal for a quick light pass to further understand the shapes and depths of the environment.
The Infamous Trimsheet
At this point, I had gathered enough information to initiate the planning of my trimsheet. The process was simple: after establishing my texel density in Maya (2048 pixels texture for a 400 x 400 cm plane), I visually determined how much texture space the assets would occupy on the UV. This allowed me to draw horizontal lines on the texture, defining my ID trims. At this stage, everything was relatively rough, and I utilized hand-drawn sketches to help in the process, keeping an eye on the relationship between the size of the assets in centimeters and the corresponding size in pixels that would occupy my UV space. For example, if the square door appeared to be a 150cm square, I created a trim of 768 pixels (equivalent to 150 cm) to encompass the full door's UV shell. While segmenting the texture into trims, I also assigned a color ID to each trim, facilitating the application of different materials in Quixel Mixer later on.
The trimsheet texturing phase was relatively straightforward as well. For this task, I utilized Quixel Mixer, a free texturing software that directly accesses textures from the Megascan library. I selected a few materials and assigned them to each trim using the previously created ID Map colors as "masks". I deliberately chose "boring" and simple textures because I intended to adjust parameters such as color, roughness, or metallic properties later in UE5. While still in Quixel, I created a template for exporting the following texture sets: Base Color, Normal, and AORM. The latter is a texture with packed Ambient Occlusion (AO), Roughness (R), and Metallic (M) respectively in the Red, Green, and Blue channels.
3D Modeling & UVing
The 3D modeling phase has been the most extensive, yet quite exciting. I was well aware that I could leverage Nanite meshes, a feature enabling high-poly meshes in the engine without performance concerns, within UE5. Additionally, thanks to the trimsheet, there was no necessity for a "low to high" baking process. Therefore, I went for a mid-poly workflow, giving each mesh an appropriate amount of geometry, sufficient for a smooth appearance, yet not excessively high for a relatively easy UV unwrapping process.
Following the previously made assets list, I started working on the fundamental pieces for the modular kit before progressing to the hero assets (main robot and door).
Often, I relied on quick hand-drawn sketches to better understand certain shapes. Afterward, I developed a modular pipes kit to fill spaces that were less defined in the concept, such as the ceiling of the shuttle.
Alongside 3D modeling each asset, I was also creating their UVs, this step is crucial as it establishes the connection between a mesh and how an image texture is applied to it. While some people consider this process boring and tedious, I find it quite unwinding and complacent, especially when everything goes well. Each UV shell created would be firstly resized to its correct texel density, then straightened as much as possible (using the "straighten shell" tool in Maya really helped), and finally positioned on the right location of the trimsheet, effectively "applying" the texture on it. I tried to be as accurate as I could, but at the same time, I knew that the recently added Modelling Tool in UE5 would allow quick UV editing directly in the engine.
3D Hero Assets
When it came to creating the bags/packages, I knew that Paul Pepera achieved those great results by using Marvelous Designer, of which he was a black belt. Unfortunately, I was not familiar with the software at this point. So, I attempted my version of the bags using cloth dynamics in ZBrush. The results weren't bad but also not great; there was a fundamental photo-realistic element missing in my bags, and I wasn't quite satisfied with them.
The next day, I acquired my version of Marvelous Designer. Oh boy, what an amazing and fun software! Thanks to some quick tutorials found here and there on the web, I managed to create six variations of pretty convincing bags in a few hours. I was amazed to discover how user-friendly and intuitive this software is.
I started off by designing a tool in Maya, on top of which I would build the bag in Marvelous Designer. Moving to Marvelous Designer, I simply designed the rectangular pieces of fabric with the right dimensions in the 2D viewport, placed them around the tool in the 3D viewport, then "sewed" the fabric pieces and pressed Simulate to see the magic happening. The cloth magically wrapped around the tool in a convincing manner, creating beautiful folding and creasing out of the box. I repeated the operation for convincing straps around the bags too. A few more clicks and the UVs were generated. I am aware that this is just the tip of the iceberg of what the software is capable of, but as a first experience, it was truly amazing.
Unreal Engine 5
The 3D assets looked pretty convincing and faithful to Pepera's original concept; I couldn't wait to see them in UE5. I brought everything into the engine and began assembling the scene. Applying the material trimsheet to all the assets resulted in a very repetitive texture, which was expected as I still needed to create my Master Material.
Making the Master Material & Instances
Creating the Master Material (MM) has been a fun and challenging task, providing a great opportunity to explore and push the use of a single trimsheet as far as possible. The MM is a way to create a "parent" material that can be used as a base to make a wide variety of different-looking children known as Material Instances (MI). These instances are applied to each mesh and include parameters that allow for quick adjustments without modifying the MM. This system is particularly useful for creating numerous variations from a single MM, allowing me to generate all the MIs needed for the scene while still using only one trimsheet.
Without going too deep into the technical details, my MM featured the minimum parameters required for each trim. Parameters such as Tiling, Offset, Brightness, Contrast, Desaturation, Tint, Roughness, Metallic, and Normal intensity were "exposed" on the MI. These could be adjusted to differentiate the appearance of each asset.
Additionally, I created a Material Function for each trim, providing the flexibility to add extra dirt or wear effects when necessary. This was achieved through an additional Ambient Occlusion and Curvature Map, baked respectively on the Red and Green channels of the vertex color within the UE5 modeling tool. Pretty cool, isn't it? Although I didn't end up using it, it's still worth mentioning.
Lighting, Camera & Post-Processing
Despite the scene starting to look more like the original, I still had a few more steps to address. Firstly, the lighting, which I kept dynamic with UE5's Lumen on. Paul's concept had only a few sources of light, in my case, in addition to the main key point lights for filling the environment, I added a couple of rim lights to create specific specular reflections on certain objects. I also incorporated a couple of light-stoppers that would cast shadows despite being set to "invisible."
Regarding the main shot, I utilized a CineCamera with settings that matched the concept as closely as possible, along with the same location and angle. After introducing a gentle volumetric fog to add more depth and a bloomy effect around the main neon lights, I proceeded to the final touches on the post-process. For this, I needed a custom color grading LUT, which I would apply on the post-process volume of UE5.
In Photoshop, I tried to match the same colors as the original by color sampling black, gray, and white points and applying them to my color LUT table. Finally, applying the updated LUT table in the post-process volume of UE5 changed the color of the scene to a fairly close look to the original. A bit of contrast and a few more gradients were overlaid on the renders in Photoshop to try to match the original concept as closely as possible.
I have been working on this project in my spare time, and it took me about two months to finish. Witnessing how the scene evolved from the blockout to an actual setting has been incredibly satisfying. While I am aware that this is more of a "proof of concept" than a contemporary workflow used in games nowadays, I believe I achieved a decent result that pays a nice tribute to the original masterpiece by Paul Pepera.
Despite initial skepticism at the beginning of this journey, I have learned a lot, especially regarding pre-production planning, which is the most crucial phase of any project. This phase is often overlooked by young artists, but if done correctly, it can significantly ease every subsequent phase. It might sound like an obvious cliché, but after this project, I genuinely understand why, and I feel like I have expanded the boundaries of my skills as an artist.
Overall, I am very happy with the outcome. In the next few weeks, I will attempt to create a short video, possibly incorporating some animation and effects. A special thanks to Escape Studios University for allowing me to use their facilities and above all, I would like to express my gratitude to the 80 Level team for the opportunity to share this project with you, and I hope you enjoyed it.
Marco Autilio, 3D Environment Artist
You may find these articles interesting