Tahnee Peterson Stuart did a detailed breakdown of her realistic weapon project, Antique Flintlock, explained her modeling workflow in ZBrush, and discussed the texturing process in Substance Painter.
Introduction
Hi! I’m Tahnee Peterson Stuart and I’m from Bordeaux, France. Currently, I am working as an Environment Artist.
I started 3D at YNOV in 2013. After finishing my Bachelor's degree, I obtained a job at an independent studio as an Environment and Props Artist Junior in 2016. I worked for 3 years for the French Navy on VR nuclear submarine simulation in Unity. After that, in 2019 I was hired by Ubisoft to work on Riders Republic for one year as a Level Artist Junior. Since March, I've been working at Hangar13 as an Environment Artist on an unannounced AAA project.
My interest in firearms came after participating in the CGMA course Weapons and Props for Games. During these classes, I was able to learn how to model a weapon for real-time from A to Z, we went through all the steps like Blockout, High poly, Low poly, Texturing, and Rendering. I was able to model my Thompson Submachine Gun with all the optimization constraints for video games in mind.
Antique Flintlock: Reference
Since I love all antique guns I wanted to create one for my portfolio. I bought the pack of Antique Firearms on Photobash and I came across the reference that was eventually used for the project. I really liked its shape and said to myself that it would be interesting to recreate it in 3D.
I think it's one of the most important steps in the creation of any asset, to gather as much reference as possible. In my case, I only had one image so I had to go and gather as many images or videos as I could find. I advise using PureRef to gather the references, it's really easy to use.
I also have World of Gun: Gun Disassembly that helps me visualize all the parts of the weapon, which is really practical because you can disassemble and assemble them at the speed you want.
Blockout
I set up my scene in 3ds Max in centimeters and set my reference to 0.0.0. Then I start to work on the blockout following the reference. Starting from a plane with transparency, I extrude the sides in the orthographic view.
The blockout is made of simple pieces that follow the silhouette and have all the necessary information for the animation. In production, this allows the animators to have a general idea of the position of the pieces that are going to be animated.
During the blockout stage, the parts can be easily redesigned and adjusted if necessary.
I created the shape from a plane that I positioned in the right place.
Finally, I extruded the edges following the reference and closed the shape.
During the blockout stage, the wireframe is not very important as long as you have the right shape. It will be modified at the Low poly stage. Once my blockout is finished I switch to the high poly in ZBrush.
High Poly
For the high poly model, I use ZBrush except for small parts such as screws.
Once in ZBrush, I follow Simon Fuch's technique explained in his Handgun Tutorial.
I find this technique very effective and very easy. It allows you to keep sharper edges and better control for the polish while preserving the silhouette of your mesh.
I put hard edges where I want the shape to be sharp and then make a polygroup with UVs. Then I make a Dynamesh and two Deformations, the first Polish by Group with the empty circle and the second – Polish deformation with the full circle.
After polishing I like to break the edges a bit with the Trim Dynamic brush.
Once I have finished I use Decimation Master on the pieces and export them to 3ds Max.
Low Poly and UVs
I think about what the player is going to see in the FPS view and add edges where needed. For example, it's important to add enough edges on the cylinder shapes and I like to put more than enough on small details like screws. In short, I add edges where the geometry creates a silhouette and I remove as much geometry as possible where it doesn't.
For the UVs, I replace my UV borders where the player won't be able to see them and place the UVs in the same position. For the bake, it is necessary to leave the UVs of the element that will have the high poly in the UV tile 0-1 and offset those exactly at the same place in the UV tile on the right.
Once I finish the UVs, I apply new smoothing groups based on UV shells by using Textool, a Max plugin that allows you to do this in one click.
I rename my high poly and low poly accordingly and then I import them in Marmoset.
Baking
Once in Marmoset, I add a new baker and I import my low poly and high poly with the Quick Loader. If the names of the Low poly and High poly match each other, it will automatically create bake folders. This is my setup:
Texturing
I import my mesh and my Normal map into Substance Painter, then set the metal-roughness preset and set it to the Tomoco Studio Environment.
The first thing I do is to add a folder with elements in the Height channel, like the metal patterns that I drew in Photoshop from the reference.
Once I have finished all the height details, I export and reimport the normal map, and replace the old one. Then I bake the rest of the maps: AO, Curvature, Thickness, and World Position.
Afterward, I add the Ambient Occlusion channel, and I put the map in a fill layer with a level to manage the strength of the AO.
I like to use my textures from textures.com, they have a lot of good quality textures and a good base for reworking them. For example, for the wood, I took the basic texture from textures.com and added several variations.
By studying the references, I choose what I can reproduce on the wood, so I add Height map information that I'm not going to bake, such as small cracks where it makes sense – for example, between two materials like ivory and wood. Then I add some colour variation to make the wood more interesting, a fill layer of black.
After that, I always add fingerprints in roughness. I use Painter's alphas and also the texture grunge fingerprints smeared, which I modify with levels to bring out the fingerprints.
Each time I place a fill layer with a texture, I place it in a mask with roughness and then come up with the details I want with a paint layer. Thanks to this method, I can have more control over the details.
For metal, I started the same way as with wood – I put my basic material and then added dust, roughness, wear and tear to the logical places like all the joints and where the different elements rub against each other.
Rendering in Marmoset
Usually, if my gun allows it, I put two copies in the rendering so that I can see both sides at the same time. For the sky, I used the HDRI Indoor Fluorescent because it had a neutral white light and it allowed me to manage the colour with the lights I was going to set up.
For this render, I put 5 directional lights, 3 spotlights, and 7 omni, they are either white or grey and I have two orange and pink omni to bring out the barrels.
I make sure that each part of the gun is understandable and well lit, there shouldn't be any places that are highlighted more than others. The lighting should be consistent over the whole asset and we should be able to see and understand each element.
What's also important is to bring out the details in roughness. I use spot lights where they will stand out the most.
Here is the setup for my rendering:
I output my renderings in Photoshop format so that I can easily modify them in the software. Generally, I increase the brightness and sharpness a little bit.
Tutorials
Here is a list of tutorials that have helped me throughout my learning process:
- Gun Modeling for FPP Games (a complete tutorial on the creation of weapons for games)
- I recommend Chamfer Zone and Simon Fuch’s Gumroad for full tutorials on the weapon creation workflow.
Afterword
I hope my breakdown could help you if you want to get your hands on the weapon creation. If you have any questions, you can contact me through my Artstation and Linkedin pages and I will be happy to answer them!
P.S. Thanks to Henri Patrier for this amazing point light in Marmoset.