Introduction
Hey, my name is Konstantin Gvaberidze, I’m a 3D Character and Prop artist from country of Georgia.
I’ve been delving into this art form for about five years now, currently looking for new and exciting opportunities in the industry, learning new things and trying to challenge myself with every new project I try to tackle.
Goals
My two friends and I are making a little first-person co-op adventure game set in the Georgian Mountains, and the objective at first was to have a simple sawn-off shotgun with double barrels, acting as one of the tools with which you fight against all kinds of different mythological creatures and repel various threats.
But as you will see, the design of the weapon evolved quite a bit during the process.
Tools
- PureRef: assembling a mood board
- 3ds Max: blocking, retopology, UV unwrap
- ZBrush: refining blockout, sculpting high-poly, stylized detail pass
- Substance 3D Painter: baking, texturing
- Marmoset Toolbag: rendering
- Adobe Photoshop and Premiere Pro: post-processing and revising renders
Reference Gathering
After more exploration and discussion with my team, we came across this fantastic version called Coachgun TT (triple-barrel variant), which amazed all three of us. We liked the overall design of this weapon, both aesthetically and how it functioned technically. So, the decision was made to recreate it for our game, but with more stylized forms and shapes.
After that, I started gathering higher-quality references from different angles to better understand the shape language of the gun. Even though I knew the finished result would be heavily stylized, I still needed to understand its basic form and function.
I used PureRef to compile all the necessary images. I don’t like crowded mood boards, so I always try to have as few references as possible, but in a cohesive manner where the project’s goal always stays straightforward.
Because I didn’t have a main stylized reference, I used generative AI to create something that was somewhat of a representation of what I wanted to make in the end, along with different reference images, so as not to divert too much from the type of stylization I was aiming at.
One thing to mention is that I try to stay aware that generated pictures are just that, and I can never fully depend on them. They are almost never as precise as the original or something drawn by an artist could be. It’s okay to use it as a guidance point or colour palette reference, but I always remind myself of that, which in turn forces me to bring in fresh ideas during the process.
Blockout
A very simple blockout was done in 3ds Max. In this stage, I usually model or assemble primitives according to the reference and try to somewhat align them to the concept.
I spend the least amount of time during this phase, since I know most of the meshes will be heavily modified in ZBrush. It’s just a matter of getting chunky pieces together, which I later use as a guidance point. I even leave out some parts of the model I feel can be done in ZBrush more efficiently.
Basically, this stage is the setup of the proportions and scale of the object in the scene.
Sculpting
Once I bring this blockout variant into ZBrush, that’s where the real fun begins.
Firstly, I turn everything into DynaMesh, refining bulky shapes and adding smaller pieces I left out in 3ds Max (bolts, hinge, safety lock, action release, etc.), aligning everything more correctly, modifying, cutting and adjusting the main shapes to match the concept more accurately.
I find doing even hard-surface pieces better in ZBrush with sculpting techniques, although sometimes this can turn into a real struggle where I literally have to fight against the surface of the mesh to get the correct shape. Still, this is the most enjoyable process for me personally.
I’d rather do this here in ZBrush than go back to Max for poly-modelling, and I always have an option with ZModeler that can help with certain shapes.
I was having a little bit of a hard time at first, trying to find how shapes and forms should merge with each other whilst being functional and coherent. During this, I did a couple of quick different versions to better define the weapon’s stylistic vision.
I mostly used brushes such as hPolish, TrimDynamic, TrimAdaptive, OrbFlatten_Edge and TrimCurve to polish the shapes. This is basically the stage where rough DynaMeshed pieces get cleaned up as much as possible.
I use a pretty high resolution during later stages of cleanup. It can be somewhere between 300k and even 1M if necessary.
Once 90% of the mesh is pristine enough for my liking, I hit ClayPolish with default values to make it even crispier (this works here since the pieces have sharp edges) and save Morph in the history bar (with left CTRL and LMB) for later reprojection.
I use ZRemesher to generate new topology (sometimes with the KeepGroups option on if I prepared PolyGroups beforehand; this helps guide the algorithm, resulting in better topology), subdivide it a couple of times until I find that it has enough resolution for later detailing, and ReProject History from the DynaMeshed version I saved as a Morph target earlier.
This all happens on the same mesh, but you can duplicate things to keep them safe.
I repeat this process for every individual mesh I’ve polished. After every piece is subdivided, reprojected and cleaned up, I do the second pass of polish.
As DynaMesh gave me the ability to refine more substantial shapes, the ZRemeshed version with better resolution and division control gives me more freedom to enhance smaller details. Mainly the same brushes are used here, but with more accuracy and less carelessness.
Quick tip: There is a little issue with ZRemesher, as it tends to make stars on angular diversions and exactly where you don’t want them. Using the Smooth brush will make them even more pointy and noticeable on the high-poly. We can’t have that, but fret not! There is a very easy fix for that.
Simply click the SHIFT (Smooth) button and softly hold your pen down on the tablet surface without moving it. As you’re performing both of those actions, and before you start moving your pen to smooth, release the SHIFT button and then move your pen. Instead of default Smooth, you will get SmoothRelax, which instantly eliminates stars.
Now, depending on the resolution of the mesh you are performing this action on, it might appear as if it’s not working at all, as SmoothRelax requires more strength to work with higher resolutions.
Either choose a StrongerSmooth brush from the library and use all the force your wrist can deliver, or go down to the lower subdivision, point at the stars and gently perform this action. You will get rid of all the pointy evil buggers that are messing up your pristine and shiny surface and achieve a heavenly clean mesh.
Detailing Pass on High-Poly
After I’ve prepared the main meshes and everything looks good, we start creating unique details to break up their uniformity. I start adding wear and tear to the model (a stylized version).
I use layer systems for this process, as I will be needing the original undamaged meshes not only for sculpting but also for the retopology later down the line, and this way everything is more orderly. If I decide some parts aren’t up to par, I can always go back to the original unharmed meshes, save a morph target and modify it.
During this part, I use all kinds of different brushes, including the free ORB-Brushes Pack by Michael Vicente. And of course, we can’t forget ZBrush’s default MorphBrush, which basically takes on the function of a semi-eraser.
Try to focus on one specific area of material. For example, I randomly choose one of the metal parts, do the detailing pass and then replicate the same damage and forms on other metal parts. I do this with wood and all the other materials on the model.
Below you will see a rough demonstration of how these specific details were achieved. Obviously, the finished product took much more time and effort.
When it comes to using symmetry, it’s always a case-by-case scenario. You must think in advance about which parts of the model will be mirrored on the UV sheet, so less time is spent on unnecessary parts.
With this shotgun, I knew I would be mirroring two of the lower barrels and the wooden parts, both the grip and the forearm, because I knew these would take huge amounts of space on the UV atlas and at the same time be the least noticeable from a first-person perspective when mirrored.
The upper-middle barrel would cover up the lower barrels being mirrored, and wooden parts in general are easily disguisable. If you look closely, you can obviously still notice repeating details, but those sacrifices must be made for the overall health of texel density across the whole model.
Consistency is key here. You might get carried away with one material area and keep adding details to it, but then leave other parts of the model half-finished. That wouldn’t look as good. The goal is to keep things at the same level of detail and stylistically harmonious across the whole weapon.
Decimation & Bake Setup
When I’m happy with the final high-poly, I decimate and unify them with the help of a Boolean operation in ZBrush. For example, the receiver part includes all the little bolts and the trigger guard in the same mesh when decimated, even if they were all separated during sculpting. This would all be retopologised and baked down onto a single low-poly mesh.
Later, I will also bake an ID map through Substance Painter, so I can differentiate between them during texturing, avoiding the hassle of drawing individual masks where their borders meet. This significantly speeds up the process, and the setup for that starts at this stage.
Retopology & UV
After every part is decimated and unified, I bring them into Max, apply a default grey material with about a 0.65 roughness value and start doing retopology.
I bring in both versions of the high-poly: one that has the detailing pass and one that is clean. I do general retopo on the clean one and then switch to the detailed one to add breakup where it’s necessary and details are either protruding too much or caved in on a curved surface. I do this because I want them to look their best on the Normal Map.
I use the built-in Retopology tool in 3ds Max. After at least 3 to 4 years of use, I can safely say I find no need for a replacement, as it has every function I could ever need. Maybe there are some other fancy tools out there, but for me, Max’s Retopo tool has been sufficient so far. The same goes for the UV editor. Both processes are done through 3ds Max.
As soon as the low-poly is prepared, I usually check the whole mesh with Max’s Selection tool through the Ribbon menu to identify if there are any N-gons, missing triangles/holes or berserking vertices not connected to anything.
If everything is intact, I start renaming both the high and low-poly, matching their names according to their equivalent and adding a simple suffix to set them up for baking.
Following that, I UV unwrap the whole mesh, cutting lines mainly on 80+ degree angles or as I see them necessary, trying to make seams in less noticeable areas and, in general, make shells more comfortable for packing, checking the texel density and uniformity.
After that, I evaluate which parts are more or less visible on the whole weapon, increasing and decreasing them based on that principle. For example, UV shells for a bullet are slightly larger than the rest of the model, whilst inner parts of the barrels are significantly smaller. That, along with mirroring, serves the purpose of guaranteeing more resolution for important parts.
This type of hard-surface model would usually be smoothed on hard edges or by UV shells. But since our game was more cartoony, we were planning to have organic animations on rigid forms.
If I were not to use average smoothing before baking, normals would break during bending and stretching, showing ugly seam lines on the normal map that would otherwise be hidden when the mesh is static.
After everything is set up and named correctly, I move over to Substance 3D Painter to bake the high-poly onto a low-poly and start texturing.
Baking & Texturing
I export two variants with both high and low-poly.
One is specifically for the AO bake. I use the Match Always feature here; therefore, corresponding high and low-poly meshes need to be exploded. I slightly nudge parts of the model (which are supposed to move or rotate when animated) away from their original locations so that they do not affect each other, avoiding AO shadow bleeding all over.
For the rest of the maps, I replace both high and low-poly with the unexploded variants and use the Match by Name feature. I bake down the rest of the maps to the model, then check if there are any errors or imperfections and either adjust the frontal distance of the cage or instead use the Automatic function in the options. Though I find this feature works better on more organic models.
When it comes to adjusting sliders on specific maps, mostly default values will get you a satisfying result, but spending a little bit more time and experimenting doesn’t hurt.
Once I’m happy with the bakes, I adjust the settings of the Substance viewport. I choose an HDRI that is greyer and has a sharp highlight. I find that the default Panorama is very colourful for most scenarios, so I change it to Studio Tomoco. This ensures that the model itself isn’t affected too much by the lighting.
I change the FOV from 50 to 35/30 degrees, activate TAA and, in the shader settings, change specular quality from Low (16 spp) to Ultra (256 spp). I disable AO intensity completely during work, as it tends to mess with the cavities too much during the process.
After everything is set in place, I start the texturing process by filling the model with flat colours according to the concept. I set up gradients, AO, Curvature and Sharpening overlays individually for all 3 main material groups (metal, wood and bullet). The ID map we baked earlier greatly comes in handy at this stage to set up masks.
As soon as I’m satisfied with the general colour palette across the whole model, I start focusing on individual material groups and start building up Fill Layers.
Adding Color Variation maps, darkening cavities with AO and Curvature generators, adjusting Roughness values and adding breakup, creating Height and Pattern details and tweaking them with filters such as Blur Slope and Sharpen, adding Dirt and Dust to fill crevices with darker values, making the wear and tear we created in ZBrush more visible with the help of a Levels filter through the Curvature map, and so on…
Also, do not forget there are blending modes in Substance just like any other graphics software, and individually so for each map type. Experimenting with those and knowing which ones to use and where is a huge advantage.
For some of the parts, you can get away with using just the generators, but there will be a moment when you will have to pick up your pen and modify specific areas by hand, such as fixing and adjusting black masks, filling in missing details or adding manual elements on the roughness map, even hand-painting colour gradations to make them more natural.
There is a lot of going back and forth in this part, constantly shifting sliders, tweaking colour values, changing the HDRI and rotating it to spot the imperfections, achieving the most desirable outcome.
You can see a thorough breakdown of how these materials were built up layer by layer.
With this project, I wanted to do something that was neither purely stylized nor hyper-realistic. Heftier shapes, but still somewhat consistent with realistic scale. And I kept that in mind throughout the whole project, from the start of sculpting to the end of texturing.
Though, if you want pure stylization… In general, you must avoid micro detailing like I did here. Keep roughness values across the meshes more uniform and increase their scale to make them exaggerated and bulkier. Have less breakup between them, hand-paint colour variation details with different brushes, and keep micro height details minimal so that their transitions are less crispy.
Be aware to use generators just as a base and build up on it, painting shapes, extrusions and intersections manually. Hell, you can even delete the metallic channel entirely, since that serves the purpose of a more realistic look.
Rendering & Post-Processing
As soon as I’m done with the textures, I export them and go back to Max to pose the model (in this case, I did one where the barrels are halfway open and shells are ejecting from it).
Then I export those meshes and start assembling the scene in Marmoset Toolbag, importing texture maps in a shader and setting up lighting. I don’t want the scene to become too complicated, especially for just a single model, so I go with a basic lighting scenario. I used two versions here.
With the first scene, I had a single white spotlight facing the front and one directional light from the back, along with an orangish one specifically to highlight edges. All this with the Tomoco HDRI I ported from Substance’s library.
For the second scene, I used White Umbrella, again from Substance’s library, which had more natural but bright whitish studio lighting and one extra spot/directional light facing the model from below.
I tweak post-processing settings, turn on ray tracing and things such as depth of field, sharpen and bloom, depending on how well they work with specific shots.
After that, I take screenshots with a transparent background to later merge them using Photoshop. I also render a 360-degree turnaround of Full Lighting, AO and Wireframe in order to overlay them in Premiere afterwards.
Conclusion
To conclude, I would say that this project allowed me to step out of my comfort zone, learning new tools and developing a better approach towards how I go about creating high-poly and textures for video game assets.
My goal was to mix different styles together, and this pushed me to be more creative and take necessary risks, hopefully creating something unique in the end.
It took me about a month and a half from start to finish. I was constantly running back and forth, trying to decide how things should look and what parts I could improve upon. Even though it got slightly difficult at times, the result most definitely was worth the time and effort, a rewarding experience that made me more passionate about this stylized art form.
I want to say a huge thanks to Games Artist for giving me an opportunity to showcase my work, and of course to you, the reader. Hopefully, it was useful in some capacity, and you learned some new and interesting techniques.
Good luck to all of you in creating your own beautiful artworks.