Pavel Inozemtsev has discussed the working process behind the Omega Sci-Fi Modular Environment pack, highlighting the development of trim/decal and info decal sheets and the creation of assets.
Hi, my name is Pavel Inozemtsev. I'm 34 years old. I work as a freelance 3D Artist but sometimes, I create tutorials (in Russian) for my personal project Polygon Stories. The first time I opened 3ds Max, probably, 18 years ago, and ever since then, it became my beloved program.
The Omega Sci-Fi Modular Environment pack was created by me for the UE Marketplace. Also, I planned to develop a more effective pipeline for modular game-ready interior constructions and exercise myself in a sci-fi shape designing a bit. The inspiration was the design of Doom (2016) and Doom 3 games. That old and dark Martian base will always be giving me magic powers.
I started creating the package in 3ds Max. The whole asset creation process can be divided into two stages. The first stage is developing trim/decal and info decal sheets, and the second one is the creation of assets themselves. Let's talk about the first one.
Trim, Decal, and Info Decal Sheets
Decal/Trim sheet allows us to convey small and floating details and optimize the game project's performance using just a single texture set. I designed and modeled everything on my own and then baked it on a simple plane to get my textures.
In order to maximize the package's efficiency, I needed to decrease the number of textures in the project as much as possible. That is why for the first sheet I decided to bake only Normal Map and Mask, which I planned to use for decal material in UE.
The sheet has 2 separate areas:
- Mechanical trims and decals (75% of the texture space)
- Sign decals (25% of the texture space, right lower quarter)
This is how my final baked textures looked like:
The first area consists of B&W parts the main RGB colors determining different surface material zones. red – surface material 1; green – surface material 2; blue – emissive parts; black – primary object's surface; white – alpha. The second area is just signs, caution tablets, symbols, logos, etc. The future decal material should treat differently to those areas and their colors.
I needed Info Decals texture to place some text and logo onto object surfaces in the Unreal Engine scene. It would give the capability to diverse asset look. So, I also created the sheet right here in 3ds Max:
I baked everything in PNG format using 3ds Max's Scanline Renderer and that handy baker that was finally implemented into the program.
The work with the first sheet wasn’t completed. I applied the material with baked textures to a copied plane that was used for the baking process earlier. Splitting all edges is the moment I’d like to talk about in more detail.
Some of my decals and trims have a "double structure" consisting of 2 major parts: the metal insert and the surface of an object where it will be inserted to. So, I just copied all polygons inside the Edit Poly modifier and assigned to the new parts different IDs. These IDs are going to be used to assign different decal materials in UE4 (transparent material with normal information and non-transparent one). Here is the final structure:
After that, I divided the plane into separated objects by splitting borders and moving everything to a new scene where I planned to model assets:
The Creation of Assets
Blockout is a crucial stage to know what exact assets you need to build for the final location and what scale they should have. I build map's fragments using simple shapes and boxes. Different colors meant unique meshes. The main goal was to see how those blocks connect to each other, especially in the corners. Such structure was enough to evaluate the scope of work:
In the future, some missing assets can be also quickly created from the existing ones. After everything became clear I picked single unique objects, copied them on a new layer and that was the starting point for the asset creation process itself.
The modeling workflow looks like this:
- Geometry creation – Just model it. Also, I assigned IDs to different parts determining surface materials that are going to be created in Unreal Engine.
- Adding chamfers – I used the Chamfer modifier most of the time. Sometimes, in some places, I needed different chamfer values, and the option "By Crease Weights" helped me with that.
- Adding Weighted Normals modifier – The simplest step. It is great that it was added to the 3ds Max standard modifiers set.
- Adding decals, trims, and signs – Adding decals to the flat surface doesn't represent any challenge. You are just placing a decal and slightly offsetting it forward to exclude intersection.
It became harder with Curved Trims. I decided to use Splines with the Sweep modifier because it provides not only control over section width but also creates proper UVs saving me from doing it manually. Then I added the Edit Poly modifier to clear extra geometry having left only facial polygons and set Smoothing Groups. Next, I implemented the same decal structure described above: copied polygons with different IDs.
And the final step is UVs. Thanks to the Sweep modifier we already have the correct straightened UV islands. We just need to scale and move them to the right places in the Normal texture. The whole workflow:
Now it was time to create UVs for assets geometry. Nothing unusual here except for packing. I didn't plan to texture my assets in a classical way using Substance Painter. Because, again, I tried to avoid a large number of textures in the project. I was going to "wrap" each object in tileable textures of noise and metal scratches. It means that in this case, it wasn't too important how to pack UV islands. So, I just set the texel density (1024px/m) using a simple Texel Density script and pushed Pack Normalise.
And to diversify the future asset pack, I quickly turned some of my meshes into similar ones but with different sizes. Of course, distorted places in UVs also should be fixed afterward:
More modular assets:
I also manually created collisions for each asset:
For each asset, I grouped all geometry together with decals, properly named, and exported it using an absolutely irreplaceable Batch Exporter script by Benjamin Boscher. It does a few very important things automatically: places our object into the coordinate center, converts it into an editable mesh, and resets all transformations. I had about 50 meshes. It is hard to imagine the time I would have spent doing those actions manually.
I quickly created noise and scratches textures in Substance Designer, imported all meshes and it was time to work on materials. For the main parent material, I created the capability to change Color, Roughness, and Metalness levels. Plenty of other materials were just instances of this parent one.
The major challenge was the creation of decal materials. I needed two: the non-transparent material for the mechanical parts of decals and the transparent material with only Normal information projecting onto the object’s surface. Unfortunately, there is still no simple way to realize such an inserted decal procedure in UE4. So, I’ll just illustrate the main features.
As you remember, our baked RGB mask consists of two major parts – trim/decals and signs. First, I had to separate those areas by creating a procedural mask inside the decal material scheme.
As I mentioned earlier, I was going to use RGB mask channels to outline material zones. 3 types of materials: surface material 1 (Red), surface material 2 (Green), and emissive parts (Blue). Using these channels, I implemented 3 materials with Base Color, Roughness, and Metalness controls inside the main material.
Everything is far simpler with the signs area. I've added Desaturation, Roughness, and Wear regulators.
The transparent decal material:
The final decals and trims look in UE4:
To use my Info Decals texture, I had to create a material in which I could offset and crop the image leaving only the peace of information I need. Together with the UE4 decal object, I was able to put the text on any object’s surface:
After that, I finished creating and assigning materials to meshes, so I could start building the scene. It was easy because from the beginning all meshes were created in sizes divisible by 50, 10, and 5 cm.
Lighting and Rendering
The scene's lighting role was given to my light fixtures. I constructed them the way their parts could be rotated or moved to change light direction. Later, each light fixture was put together with pieces inside the UE4 blueprint.
As for the light source, I used a simple Rect Light. These objects were my only tools to light the whole scene.
Finally, I added fog and slightly increased bloom using PostProcessVolume.
Well, I’ve described the most interesting moments in the project, from my perspective. The most time-consuming parts were decals/trims designing and modeling and building materials in UE4. The good thing is now I can use them in the following scenes. To me, the greatest help was Sergey’s Tyapkin tutorials and the 80 Level Article about his work. He works in Blender and it was a challenge to realize a similar workflow in 3ds Max. I’ve also read a lot of topics on the Polycount forum. This is the place where strong professionals constantly exchange their experiences. I’ve also tried to implement some of the design principles described by Alex Senechal in his Visual Design Basics – Intro to Design course.
You may find these articles interesting