Project & Goals
As a final assignment, I was tasked with creating a fully game-ready realistic asset that fit the theme “mercenary hideout”. I chose to, instead of focusing on one object that could be found in said hideout, focus more on what this hideout could look like.
Since it would give a lot more freedom in storytelling and would get the idea across better to an audience. I had never worked on multiple objects in the same setting before, so this on its own was already a challenge. The goal was to keep the models rather simple so I could focus on the textures, the storytelling elements, and making the scene feel cohesive.
I envisioned a dystopian future where a catastrophic event occurred around the year 2006. This event led to a post-apocalyptic world where this mercenary created his little hideout spot out of scavenged, old, pieces of furniture and electronics. The magnets, pictures, notes, stickers, etc. are a mix of things that were already on the fridge as he found it, and things he himself put on there later.
Workflow I used:
-Looking for references, concepts and inspiration
-Creating a detailed model using ProBoolean
-Creating the High-Poly in ZBrush
-Creating the Low-Poly in 3ds Max
-Unwrap in 3ds Max
-Baking in Marmoset Toolbag 4
-Texturing in Substance Painter
-Realtime Rendering in Marmoset Toolbag 4
References, Concepts and Inspiration
My concept was inspired by the concept of Alexander Pavlenko. I used it as a baseline, but ended up deviating from it quite a bit, and eventually drew my own adaption to fit the story better. A huge thanks and shoutout to him for inspiring me to create this type of setting.
My reference board is split up into actual real-life reference, and a ton of artworks that inspire me. I like to constantly look at other people’s amazing work and having it on my reference board is a very easy way to do that and pushes the quality of my work a lot more, I feel like.
I have separate references for the model type of what I’m creating, and the material I want it to have. The fridge model I created was mostly blue in my references while I knew that I wanted a white fridge, because it gave me a lot more opportunities for discoloration, dirt, greasiness, rust, etc. The television was a shiny grey. Also, a more neutral color is easier to then combine with different objects. A bright blue fridge with a silver shiny television and a black VHS player would have been too much especially if you then put all these different, bright colored stickers, magnets and pictures on top.
Main inspirational artworks on reference board:
A special thanks to these amazing artists for creating such inspiring work. And inspiring other artists like me.
Creating a detailed model using ProBoolean in 3ds Max
This stage is very iterative and non-linear. (As is the whole process actually. I’m constantly going back and forth between stages.) Mostly because although I had an idea of what I wanted to create, it wasn’t fully fleshed out yet, so I was also still very much designing. I created the general shapes first and start playing around with composition and toss around with the idea of having some cornflakes boxes or other props that would sell the scene more.
My viewport is often a lineup of 4-5 different variations of what my scene could look like before I end up deciding on a certain composition and getting more into detail.
Next up, to save time, instead of using subdivision modeling to get to the High-Poly model, I used the Proboolean-Dynamesh workflow. Where you can really quickly get a detailed model by cutting out parts using Booleans and don’t have to worry about wireframes since it will get exported to ZBrush, dynameshed, polished and eventually decimated which in itself obliterates your wireframe.
I wanted to work efficiently and only needed the High Poly for baking purposes so for that reason Proboolean-Dynamesh seemed like the way to go.
An important aspect of using this ProBoolean workflow is to work non-destructively. This is something that, for me personally, took a little getting used to at first. I was used to just converting to editable poly and using the edit geometry panel to model.
But when you’re working with Booleans, you want your operands to be as flexible as possible. So instead of converting, you’ll want to work a lot more with modifiers. So that later when you’re creating your low poly, you can just use some sliders and get a lower polycount extremely quickly.
I make sure that my Mid-Poly has enough segments, and smooth curves to avoid faceting in ZBrush. And make use of the Turbosmooth modifier for easier parts such as buttons, screens, etc. This is what my model looks like before exporting to ZBrush.
Creating the High-Poly in ZBrush
In general, I wanted to keep my different objects together as much as possible, as to not lose myself in minor details and keep an overall view. But for the High-Poly I split up the assets into their own separate pieces. Television, VHS player and Fridge all in separate parts. This to keep a clearer overview about which parts should be attached, make sure I don’t lose detail while decimating, and just overall manageability. I make sure to keep in mind what parts of the model should be attached and which parts are separated.
For example, I wouldn’t want the papers and magnets attached to the fridge, because dynamesh would then cause them to be melted together and would cause problems later on in texturing.
After importing and organizing which parts can be dynameshed together and which can’t, I dynamesh on a pretty high resolution.
It’s a little different for each part but I just make sure it looks good, because it’ll be decimated later on. After that it’s time for polishing. This is really an essential part and should not be skimped over. You want to make sure everything is smooth and curved, but not to the point where it looks blobby. This is before and after polishing.
Then finally, I decimate to lower the polycount which will then in turn lower baking times and just make it a little easier on your computer (or in my case poor laptop) in case you need that.
This is what the final decimated models look like.
Creating the Low-Poly in 3ds Max
Creating the Low-Poly is pretty straight-forward. You copy that same Mid-Poly you exported to ZBrush and start deleting edges. You want to get rid of everything that doesn’t contribute to the silhouette. It’s important to think about what can be baked, done in texturing and what needs to be modeled.
This can differ a lot depending on what the purpose is for the object. For actual game purposes I would’ve probably optimized even more, but since I wanted to create some nice renders and closeup shots, I decided to be slightly more liberal. In the optimizing is where that ProBoolean workflow also comes in handy. If you made sure to use primitives and modifiers to extract parts from your basemesh, lowering the polycount should be as easy as turning down a few sliders and connecting everything up.
In some cases, you can use the turn to poly modifier and set Limit Polygon Size to Max Size: 4.
This especially with straight-forward geometry like in my example the VHS player. Other, more complicated geometry usually require a more manual clean-up.
Eventually I landed on 5,694 polys for the fridge, 6,870 polys for the television, 2,020 polys for the VHS player and the biggest chunk because of the cylinders and wires, 11,056 polys for the wires, ovenrack and fridge details. I split them up because they’re not directly part of any object and I wanted to create a separate texture for them as well.
Unwrap in 3ds Max
I debated for a while about how I was going to split up my textures. But eventually decided on keeping it logical and flexible. I split them up per object. 1 UV set for the television, 1 for the fridge, 1 for the VHS player and then 1 extra for the details.
This way, if for some reason the objects were to be split up or reused in an environment there would be no wasted texture space, and they could be used as individual assets as well.
I start off by using the Smooth modifier, to get an estimate of how my smoothing groups will be.
Then in the UV editor I use the flatten by smoothing group option, to get the first initial UV islands. I proceed by going over each and every one of them, to check if they are correct or if they need adjusting. As a general rule, there always needs to be a seam at every 45-degree angle. If they need adjusting, I use the QuickPeel, and always relax the UV island. When everything is correct, I straighten everything out because this will result in a clean bake.
Then I use the pack normalize button to pack everything tightly. I’ve found that usually setting the padding as low as possible works best. At the very end I run a small script (TexTools SG->UV) that applies smoothing groups according to UV islands which finalizes this process.
I decided to use a 4k texture set for my individual assets, and a 2K texture set for my details.
Baking in Marmoset Toolbag 4 and Substance Painter
I’ll keep this part short and concise. Since I only recently purchased Marmoset Toolbag, this was my first time using it for baking. Previously I used Substance Painter, but I’ve fallen in love with Marmoset’s ease of use and customizability. The “Paint Offset” and “Paint Skew” tools are extremely handy for screws and places where geometry is close together, so you run at risk for things not baking correctly and overlapping bakes.
I baked the Normal map, AO map and Material ID map in marmoset. All other maps are generated in Substance Painter.
For the Material ID map, you need to make sure to apply a different material to every part that needs to be a different color before exporting to marmoset. For this part I split up my objects again, to avoid baking issues. When I’m done baking, I finalize my scene and composition in 3dsmax before doing a final export and bringing it all into Substance Painter for the fun part: Texturing!
Texturing in Substance Painter
This is where the magic happens! All my objects on their own don’t mean much, but the texturing is where all the storytelling finally comes into play. Since my fridge is the biggest part of the scene (As well as the part I was looking forward to most) I figured that would be the best starting point. I start with a base color, and then just gradually build up from there by looking at my references, a lot. On my base layer I already add some fill layers, just to get some roughness variation from the get-go.
I always try to create layers of grunge and wear that affect more than just 1 map. Dirt would affect the roughness and base color, while rust affects the roughness, base color and height. This helps in the realism, and making it feel cohesive.
I try mixing a more automated workflow by using generators, the built-in grunge maps, etc. While always going back in with a brush to personalize it more and get rid of that generated feel.
While I think the roughness map is the most important one to nail, you need variation and points of interest in every map. There’s no way an old fridge wouldn’t have any indents, scratches or edgewear. So it’s important to implement those as well.
I then try to implement all these pointers into every part of my scene.
Lastly, people tend to remember things that make them feel something. So I try to create references that I think a lot of people will understand. I try to share a part of my life, in hopes that it will resonate with someone. That’s why I implemented pictures from my childhood, family, even pets, and tried to add a splash of humor by making some pop-culture references typical to the 2000s era (one of my favorites being the got any grapes duck).
Realtime Rendering in Marmoset Toolbag 4
As I stated previously, I’ve only just discovered marmoset and absolutely love using it for rendering, especially with the newly added Realtime feature.
Rendering is something I’m not very experienced with and is something I still need to improve on a lot.
In terms of lighting, less is more I’ve come to learn. I use 3 lights that cast a shadow (key, fill and rim), and then add 2 or 3 very low-intensity lights to make certain dark areas a little lighter.
As for Post Effects I like to up the contrast and saturation just a little. And I also really like the effect sharpen gives. Other than that, I don’t change too much.
Then I take the shots. I also like creating a turntable, because it really gives the viewer an extra feel for the object, its dimensions and what it actually looks like in 3D space. As a very final step, I take the images into photoshop, make some minor adjustments such as add a sharpen filter and adjust the contrast/saturation. And that’s it!
This entire project was made completely from start to finish in just 7 days due to some time constraints.
This means that there are definitely parts that I wish I could’ve polished just a bit more. But I’m happy I can see its flaws, and still appreciate it for what it is. I’m really excited to apply all of this new knowledge I acquired from doing this project, into future works.
I also want to give a huge thanks and shoutout to my mentors of the course I created this for:
Thank you for taking the time to read this, I hope it can be of use somehow. And thanks to the Games Artist team and community for giving me this opportunity and creating an awesome platform!
And if you haven’t already, you can check out my artstation post of the project from this article!