Anshul Sharma described step-by-step the modeling and texturing workflows for his 3D gun Remington Derringer.
In case you missed it
You might find these articles interesting
Hi everyone, my name is Anshul Sharma and I’m a 3D artist from Rajasthan, India, specializing in weapons, props, and environments.
I started my career in 2012 as a texture artist at Lakshya Digital, later joined Dhruva Interactive as a game artist, and for the past 4.5 years, I've been working as a senior artist at Sumo Video Games, India. Some of the projects I’ve worked on are Dark Souls II, Bloodborne, Quantum Break, Days Gone, Forza Horizon 3, Forza Horizon 4, and Metro Exodus.
Remington Derringer: Inspiration and Reference
I stumbled upon this beautiful piece while watching a documentary. I searched for some information about the weapon, and there were many variations of it, but the one with an engraved barrel and wooden handle intrigued me the most.
After finalizing the main reference, I had to create a mood board for it. Also, I wanted to make a basic inside mechanism for the gun so that while reloading, it didn't show up as empty.
In my opinion, figuring out the final look and feel of the asset, its story, and environment it has been in helps a lot while going through the asset creation phase.
Pinterest came useful while searching for references and YouTube helped me to understand the gun mechanism.
I always start off with a basic blockout, paying attention to the main shapes and parts of the asset.
In this stage, I finalize the base shape of the individual components, keeping them as low poly as I can so that I can do any required changes in shape easily without distorting it.
It’s easy to get carried away with the details, but I can’t emphasize enough how important it is to finalize the primary details only at this point. If you look at the blockout image, the curves don’t have enough polygons, as it’ll be easy for me to tweak them if needed.
Once the primary shapes and scale get finalized, it’s time to move onto the mid poly version.
This is the stage, where I start adding secondary details and more loops to the curved areas. Also, this is the stage where I decide which details I will keep in the final low poly and which will be baked.
Baked details should be a bit tapered so that a good normal map depth can be baked onto the low poly. The workflow I follow is to create this mid poly mesh with proper polygon count and defined curves and shapes. For indents and any details like on hammer, I’ve kept floating geometry that I’ll boolean in ZBrush. I then took this mesh to ZBrush for high poly. Remember to Reset XForm your model before exporting.
For this asset, I did my high poly in ZBrush. It depends upon what workflow you follow and what you are comfortable with. I didn’t add any supporting loops to the mid poly model.
I’ll thoroughly explain the workflow I practice while doing my high poly in ZBrush.
First, I assigned polygroups by normal angle. Polygroups should change where you want the sharp edges to be beveled, just as I should assign support loops to control the bevel on edges. ZBrush will mostly take care of the polygroups, but make sure to have the separate polygroups where you want bevels. To get the desired polygroups, try to change the Max Angle Tolerance or in some instances, assign polygroup to faces manually.
I haven’t added any boolean mesh as of now. I’ll take care of the boolean meshes in the next steps.
After assigning polygroups, I creased the mesh by polygroups and then subdivided it.
After subdividing, I dynameshed the mesh with the following settings. I kept the blur value in dynamesh to 0 as I still have boolean elements remaining for this mesh. I use blur value to determine the bevel of the edges.
Once the base is dynameshed, it’s time to take care of any booleans.
Here, all the booleans I want are indents, so I changed the subtool mode to subtract, selected the main handle mesh, then merged down. This will create indents in the main mesh.
Finally, for edge bevels, I just change the blur value in dynamesh. The bigger the value you choose, the larger the bevel is.
The reason why I kept this to the very end is to have uniformity in the bevels across the model.
Also, following this, I can define bevel values for different material types in the asset.
Notice the uniform bevels across the model.
Following the same process as above, I finalized all parts of the asset.
Now, the most fun part of this asset creation, sculpting. For most of my assets, I do a basic edge treatment in ZBrush. These minor edge/surface imperfections go a long way in texturing as well. Before doing any edge treatment, I generally save a morph target for each subtool.
I’ve used these 3 brushes for edge treatment, trim dynamic for slight imperfections, dam standard for dents, and clay tube for subtle wear around edges.
For engravings on this model, I created the patterns in Photoshop, unwrapped the mid poly mesh, and placed the pattern.
These engravings can be done in Substance Painter as well, but I wanted to have that hand-engraved feel to it with slight imperfections.
I imported this unwrapped mesh in ZBrush, and added displacement map with the pattern created earlier. Then projected the pattern on the previously dynameshed mesh.
Once the details are projected, I enhanced the crevices of the projected pattern with dam standard brush with lazy mouse turned on. This manual sculpting will break the uniformity and give it a more traditional hand-carved look. I used clay tube brush to break the pattern and get that hand-crafted feel.
For the wooden handle, I dynameshed the base mesh to have even subdivisions across the model. After that, I sculpted the details through dam standard brush, sculpted imperfections and wooden surface details on the corners with trim dynamic brush and clay tube brush.
Some high poly renders:
Low Poly and UV Unwrap
A perk of following this workflow is that the process of low poly modeling becomes very fast.
I just took the mid poly mesh and optimized it to create the final low poly. With this workflow, there will be a very slight difference between low and high meshes.
Low poly holds the utmost place in the video game asset production pipeline. This is the mesh that will be used in-game. So, one should be careful of the proper edge flow and mesh shading.
UV unwrap is pretty straight forward, just breaking UVs at right angles to avoid bad shading with smoothing groups. Another thing that I take care of in UVs is keeping UV seams as straight as possible wherever applicable. This will help in reducing any artifacts created during baking.
For baking, I used Marmoset Toolbag 3. The reason for using Marmoset is the flexibility it gives while baking. You can paint the skew/offset and fix any issues in real-time.
While exporting, I kept the name of my low poly and high poly meshes identical but with _low and _high suffixes, then imported the meshes through Quick Loader in Marmoset. It creates separate groups inside the baker as per the separate mesh names. No need to explode your mesh and import.
I only baked Normal and Ambient Occlusion maps in Marmoset. The remaining maps were baked in Substance Painter.
After baking, I imported my low poly in Substance Painter along with the maps that I baked in Marmoset. After the project setup, I baked the remaining maps in Substance Painter.
I started by setting up my base materials for both metal and wood. It’s very important to set up your base materials before moving on to surface/wear treatment.
Metal: Once the base material is finalized, I started off with subtle surface treatment. I added brushed surface treatment to the metal body. After that, I added some minor damages to the metal body, some dents and pits that will appear with usage and environment. I then added a slight color and roughness variation to enhance the visual appearance when the asset is seen under different lighting conditions. I tend to keep the detail layers very subtle and add them on top of each other rather than having a single layer with high intensity. That way you can control the intensity of each specific detail.
I do a small variation with the metal pieces so that they have subtle differences in-between. I slightly changed the luminosity/roughness on some pieces.
Wood: Wood got a similar treatment. I created the base material for wood, then added surface variations. I wanted the wood to hint at used but a bit glossy at the same time. I added some roughness variation to show how it was handled until now. Then I added some minor damages across edges and convex surface. I divided the damage/weathering across separate layers, from major damages to minor nicks. Layering them on top of each other will help in achieving a better sense of realism.
After base materials are set, I start adding dirt, dust, and used surface treatment. Again, layering is the key here, with subtle details added on top of the base materials. I think of how the surface will look like after continuous use, e.g. around the lock, there will be curved scratches due to movement. Same thing with the top, when the gun will be opened to change the bullets. Subtle things go a long way in texturing and finalizing the look and feel of the asset.
For rendering, I always prefer Marmoset Toolbag 3. I used a standard 3-point lighting setup, a neutral light for front, and a warm and cool light on opposite ends, keeping the intensity to minimal so the texture details don’t fade. I also added a rim light to bring focus to the mode and set up multiple camera angles as per renders.
I did both the turntable animation and reload animation in Marmoset Toolbag.
For reload animation, I key-framed rotation along axis X, first for the lock to unlock the barrel and then to rotate the barrel.
Learning is a never-ending process and there’s always room for improvement. Learn from it and implement your learnings in the next artwork you create.
There are many communities with amazing and supportive artists. I’ll mention some of them here, so you can join their Discord servers and find constructive feedback on your artwork there.