Rodrigo Gonçalves did a breakdown of his Low-Poly Model Kit made with Modo, 3D Coat, Substance Painter, and Marmoset Toolbag.
Hi, 80 Level! Currently, I’m working as 3D Character Artist freelancer, full-time on a cool project. Unfortunately, at the moment I can’t say much about the project itself, but I hope I’ll be able to share some stuff in the near future.
At the moment, my main focus as an artist is to learn and create 3D character art for games & real-time projects, but I would also like to learn a bit more about others art disciplines in the game pipeline, explore new art styles, create stylized environment and props for games. The Low-Poly Model Kit was a good opportunity for me to do that.
I wanted to create a little low-poly scene where I could learn and explore stylized low-poly modeling and texture techniques for games. I wanted to create an environment that had some “miniature feeling” to it, almost like a little hand-made toy environment. To create this art style, I got inspired by a couple of games such as Two Point Hospital and Overcooked. I really like the art styles and overall colors of those games, so I decided to create my own little environment to explore and learn stylized art for environments and props as well as my own style.
Creating my own environment from scratch without a concept art piece to guide me was really challenging for me, but after I figured out the art style and techniques, the project itself flowed much better and the fun began.
I did the low-poly modeling inside Modo Indie (Steam version) as I wanted to learn more about it. Before I started modeling all the assets, I first did a small prop art test to understanding the art style and techniques I wanted to use. As I had no concept to work with (just references), I needed to do some tests. After a lot of research and trial and error process, I figured out the workflow close enough to my vision and achievable.
In this image below, you can see the early art test. Of course, there is always room to improve everything, but I knew that after a little art test, I would get a better idea. It just helped to move in the right direction to produce everything on time.
I wanted the design of the shapes to have a bulky and pointy art style but at the same time with a miniature feel to it, so the proportions are a bit reduced in the height. Since the scene would be seen from a certain distance from the camera, some elements had to be simplified a bit in their forms, while other elements had to be exaggerated in their scale in order to be recognizable from far away.
Also, I knew the colors and textures would help hugely with those shapes, but first, I focused on modeling anyway. Once the models were finished, I could build a little scene with them and see if everything worked together in the context of the environment. After that, I started deciding on the color and texturing choices.
Avoiding High Poly
Due to the limited time I could spend on this project, I didn’t want to create high-poly models. A traditional “high-poly to low-poly” workflow would be the best option, of course, but it would take too much time which I didn’t have. So the challenge here was to do just the low-poly modeling without creating the high-poly meshes.
At the same time, I also needed some nice details that I’d normally get from baking the textures map if I had high-poly models. I decided to model some details directly on the low-poly meshes while still keeping things as low as possible. Assets like the floor, walls, and fireplace, for example, got additional details to make their look richer. The total polycount for the entire scene was 58.427 triangles.
As for the texturing process, I wanted to mix two texturing workflows: hand-painted and PBR.
Below, you can see an image from 3D Coat that shows the Base color map (hand-painted) and also the baked AO and Curvature maps. 3D Coat is great for the hand-painted workflow and color exploration. I “exploded” the scene’s assets (offset positioning them) to easier paint them individually.
Since I didn’t have a concept to guide me, I gathered some references for inspiration and translated the colors that would work for my scene. All in all, there was a lot of trial and error until I was happy with the overall final colors.
For PBR texturing, I used Substance Painter in order to create better final texture maps. Substance Painter is great for handling complex texturing and managing a lot of layers, I mean really a lot of layers! It allows to edit and tweak everything later on if needed.
I imported the Base color created in 3D Coat, made other missing texture maps such as Position, Thickness, and Normal World Space, and started texturing with Substance Painter and look dev the scene with Marmoset Toolbag. During the texturing process, I cycled between 3D Coat (to create and edit the Base color), Substance Painter (to create the PBR textures and final details) and Marmoset Toolbag for the final Look Dev.
Below, you can see a screenshot from Substance Painter:
As far as I know, 3D Coat and Substance Painter use the low-poly meshes you have as a main reference to for baking the texture maps. That is very handy if you have no high-poly meshes and still want to have the AO, Curvature, and Normal World Space maps.
Inside Substance Painter, I baked some others missing maps necessary for the PBR workflow such as Position and Thickness, then created the final map outputs to feed the shader such as Metalness, Roughness/Glossiness, enhanced the final Albedo map (Base color) and also created other maps like Emissive and Alpha.
Photoshop was used to create little pictures on the wooden frames of the walls as it is easier to apply and edit those images in Photoshop.
Props & UV
It was a relatively small scene but with a lot of props. I knew that too many UV sets would take a lot of time to create and manage, so I needed to reduce the final number of UV sets as much as possible while still keeping enough resolution for quality sake. It was tricky!
A well-known solution for this is creating a “UV Atlas” which basically takes all your UVsSets and texture maps and combines them together in one big UV map. Since previously I did an art test based on the camera distance with 512×512 resolution for the assets, I already knew that UV Atlas would probably work fine for this project.
Before I go into real action, especially when I’m not sure about the solution yet, I like to create a very small side project to test ideas and techniques there. Thus, I can fail a lot and learn from the fails quickly. At least for me, that way helps to foresee some potential technical problems that can occur on a larger scope and prepare myself to them.
Before I continue working on UVs, I needed to do the planning and some math for the UV Atlas. As I already knew that 512×512 was a decent resolution that held some prop details at the chosen camera distance, I assumed that a final 2K map resolution for all the assets would be enough or close to enough. When possible, however, I always like to double the resolution to be safe, so in this case, I created 4K resolution maps in case I wanted to get sharper details. Anyway, everything worked very well with the 2K resolution.
A Little Math for UV…
First, I divided the final 2048 pixels (my target resolution) by 512 pixels resolution (each UV set of assets) and got a total of 4 UV sets to fit on the X-axis of the final UV 0 to 1 space. Then, I did the same math for the Y-axis, and the total math for both axes was:
- 2048/512 = 4 UV sets on the X-axis
- 2048/512 = 4 UV sets on the Y-axis
Now, I multiply these results to get the final number of UV sets that I can use, and that would be:
- 4×4 = 16 UV sets of 512 pixels resolution in total to fit inside a 2K resolution map
Finally, I took the number of assets I had and divided them into groups. In the image below, you can see the UV sets represented by different colors.
In this case, I created initial UVs with UVLayout and did final UV tweaking and packing with Modo Indie later.
After the UV sets were ready, I offset their UV position, selected all UV sets and scaled them down at once to fit all together inside a unique 0 to 1 UV space.
Smoothing Groups (Soften/Harden Edges)
Since I didn’t have high-poly models, I needed to set up the Smoothing Groups (Soften/Harden Edges) for my meshes properly, so that when I baked textures, I’d still get a decent result and catch some nice highlights. In this case, my low-poly models had to have some bevels/chamfers on the edges. I did this Smoothing Group work for every asset before exporting them and starting texturing.
Here is a small breakdown of the steps:
Setting Up the Pivot Position on Each Asset before Export
Before exporting your assets to the real-time engine, it is very important to make sure that each model has a right scale and the pivot positions are set up properly. That way it would be much easier to build your scene inside a 3D program and/or a game engine of your choice.
Final Model kit ready to go! ?
I selected all the models in the scene and exported them as an FBX file, then took it into Marmoset Toolbag (or you can use any real-time engine), applied a gray shader to the scene and started working on the lighting adjusting it throughout the whole pipeline.
Here are the final images taken from Marmoset Toolbag.
After that, I did a test in Unity – brought the final scene meshes inside just like with Toolbag, set up the lights, and added a basic PBR shader. The final looked the same as in Marmoset Toolbag.
Fire Animation: Sprite Sheet Animation
For the final touch, I needed to set up a small fireplace to make the scene feel more alive and welcoming. I’m rather new in effects but I wanted to try anyway.
For the fire effect animation, I used a Sprite Sheet Animation/Flip Book technique. In order for this sprite sheet animation to work inside Marmoset Toolbag, I need to use a custom shader called “Flip Book” that was created by Danilo Paulo.
You can this custom shader for Marmoset Toolbag here.
Here is a little breakdown of how I created the fire effect inside Marmoset Toolbag. The same thing was done for the little smoke effect.
Here is the final animation in a loop:
Final close-up images:
And here’s a time-lapse video of my live stream that I’ve done on my Twitch channel, it shows a bit of my texturing and Look Dev process.