Moritz Mayer did a breakdown of his 3D weapon Sabre Assault Rifle talking about the specifics of the modeling workflow in CAD software, retopology, texturing in Substance Painter, and more.
In case you missed it
You might find these articles interesting
Hello, my name is Moritz Mayer. Currently, I’m working at FlowFire Games in Berlin as a Hard-Surface Artist. Before, I did an internship at elite3d creating weapons and props for Call of Duty: WW2 and Black Ops 4 as part of my studies of Media Informatics in Mittweida.
My passion for 3d modeling started by discovering Blender back in 2013 and messing around with the fluid simulations. Soon I began creating various models for mods, especially Fallout NV. Recently, I have started to get more into the direction of learning to create my own vehicle and weapon designs because it’s more fun for me than just remodeling an existing concept. Vehicles and Weapons are interesting to me because they combine my fascination with technology and design.
Sabre Assault Rifle: About the Project
The scope of this project was to get to know Fusion 360 better, try out retopology workflows to quickly produce game ready meshes from Fusion models, and also work on my concepting skills.
The main modeling software was Fusion360, Blender was used for smaller details and creating parts of the low poly and the high poly render. ZBrush was also used for the high poly. The textures were created in Substance Painter. Rendering and baking were done in Marmoset Toolbag.
At first, I start with some silhouette sketches to find a good silhouette and specify the design more after having a general idea. In this case, it should be a sci-fi assault rifle with a weird magazine.
A big inspiration was efficient modern manufacturing methods like CNC machining of metals and plastic injection molding.
A believable functionality is important for the realism of the design, so I tried to not make it too unrealistic. On the other hand, however, this approach is more limiting and time-consuming. I tried to find a good tradeoff between the two.
The feeding mechanism of the magazine for example is a part that probably wouldn’t work in real life, because there is no way for the cartridges to be pushed out of the magazine.
It’s not very visible though, so I focused on the more visible parts that the player is able to see all the time.
In the end, I used the last silhouette, however, I changed the proportions in the blockout phase. I also added a scope and a strap to balance out the weight of the scope during the blockout stage.
After the silhouette sketch, the design will be further developed in Fusion 360.
Modeling Blockout and High Poly
Modeling of the blockout was done in Fusion 360, with a polish pass in ZBrush afterward to add some details to the magazine and get a proper high poly. Only a few pieces like the cloth of the strap, the electric wire, or buttons were traditionally modeled in Blender.
Modeling in a CAD software solution works differently than polygonal modeling. Traditional polygonal modeling is more abstract and you start directly with 3D objects instead of technical 2D drawings. There are some different tools, but also many tools polygon-based packages have too.
Like with polygon-based modeling, it’s a good idea to start with the major shapes and work down to the details.
I will breakdown the modeling of some of the parts.
For the grip, first, the silhouette was traced with the sketch tool and extruded to give the sketch thickness. After that, big bevels were added to smooth out the grip. The cutouts for the fingers were subtracted with cylinders. Next cutouts to assemble the grip were created with the sketch tool and cut out with the boolean tool set to intersect and “new component” checked. This slices a part only and doesn’t delete the piece. As the last step, small bevels around the edges were added.
I created the main body the same way as the grip. First, the rough shape was drawn with the sketch tool and extruded. The shape gets refined by subtracting cubes from it. For the Picatinny rail, I used a model I already created in Blender and imported it. However, it’s made from polygons which you can only import as reference, so I had to remodel it.
After that, the body was hollowed out with a scaled-down copy of the main body shape. The silhouettes of the holes were drawn with the sketch tool and subtracted from the main shape. Next, the smaller details like the cylinders around the screws, the sling mount, and more were modeled and booleaned together with the main body.
As the last step, small bevels were added again at the edges, but this time with a smaller radius than at the rubber handle to create a bigger difference between the materials.
Modeling the scope followed the same principles but this time I had no silhouette sketch so it was designed directly in Fusion 360. So far, I like designing more in Fusion than in polygon-based software because the workflow CAD software solutions provide makes it easy to adjust the model in new useful ways.
After the blockout was finished, the model was exported in .stl format from Fusion 360 and imported through Blender into ZBrush. The model was split into subtools. The subtools were remeshed with dynamesh and polished to smooth out the model. The line around the magazine which simulates the creation of the magazine by injection molding was added in ZBrush. Smaller details for the magazine like the extractor pin markings and the date markings from the mold were created in Photoshop as height map and applied in ZBrush too.
After another weaker polishing pass and decimating the meshes, they were imported back into Blender.
In the following picture, the difference between the blockout mesh before and after the ZBrush pass is visible. The smoothing effect is subtle, but adds much to realism and also removes little shading errors from the blockout.
At the end of the process, I did a first rough blockout of the materials consisting of just flat colors with the appropriate roughness and metallic values. Also, the ID texture bake in the next step was created from these materials.
The most challenging part of the modeling phase was to adjust to the Fusion 360 workflow because it differs from the traditional polygon workflow. Another challenge was to create a balanced and functional design.
Retopology and UVs
I planned to use MoI3d to retopo the blockout from Fusion 360 to create the low poly. However, I made the mistake and added small bevels to many edges which makes it very hard for software to create clean optimized meshes.
Another possibility I wanted to try was to retopo the model in ZBrush with ZRemesher. Getting good results on hard-surface meshes, however, requires polygroups which define the surfaces between hard edges. Setting this up automatically proved impossible because of the beveled edges.
In the end, I traditionally modeled many parts of the low poly in Blender because it was just quicker. The workflow is adjusted for next time to save out the finished model before the small edge bevels. Without these, it should be pretty straightforward to get a good low poly out of the blockout in either MoI3d or ZBrush.
Because the model is only used as a portfolio piece and I didn’t want to waste too much time at the low poly stage, the polycount is higher than needed for an FPS weapon model. It’s around 80k tris.
After creating the low poly, sharp edges were marked to get a correct shading. Placing them in hard to see places minimizes visible seams. At all sharp edges and additional edges, seams were marked to create the UV map. The “area stretching” color overlay of Blender is helpful to detect too much stretching in the UV map and incorrect unwrapped pieces.
The model was split into parts with attention to similar texel density.
A UV checker map was displayed on the model to eyeball the same density over all parts.
The texel density is evenly distributed because the model is only used on the portfolio. For FPS games, the parts close to the camera usually have a higher resolution than the rest of the model.
Packing the UVs was done with the help of the “UVPackmaster” plugin for Blender. It’s able to pack the UV islands automatically with very good results. This saved a lot of time playing Tetris.
In the beginning, several maps were baked from the high poly onto the low poly. Usually, I bake both object and tangent space normal map, AO, cavity, position, and ID map. I used Marmoset Toolbag because it allows me to set up baking groups and painting out skewed details. The first is useful for a clean bake on parts that nearly intersect each other like the suppressor and the frame.
As the first step, I collected more reference pictures of the different materials to help with the texturing process. PureRef is a great way to create an image collage for an easier overview.
Texturing usually starts by setting up base materials. In this case, I continued to tweak and refine the colors and roughness values I already set up during the high poly stage.
Then, I add more details to the materials. This includes macro and micro materials grain and smudge, fingerprints, small scratches, gradients. Studying the texture reference is really helpful here.
After the top layer base materials are set up, damage can be added. This requires first to set up a lower layer that will get visible where the damage occurs. In the case of the main body, the top layer is the anodizing. The second layer is an oxide coat to simulate older damage and the third layer is bare aluminum metal.
To create more realistic multi-layered (metal) damage, anchors are a huge helper. With one mask it’s possible to mask different materials at the same time. Because it’s possible to change the contrast of each individual sub mask, masking starts at a different brightness value. In this case, it was the top anodized layer, an oxide layer, and the base metal layer. This simulates the different ages of the damage. The freshly chipped away anodization reveals straight the bare metal, while aged wear is already coated in an oxide layer. The effect is pretty subtle but makes the material much more interesting.
The damage mask gets created by both smart masks and manually painting extra damage in. For a quick start, I used one of the Smart Mask presets for the appropriate material type. I tweaked it to match the reference more closely.
For damages that go over an edge with seam, it’s helpful to set the mapping of the damage map in the texture dropdown menu inside the Smart Material to triplanar. This helps to minimize weird looking damage cutoffs at the seams. A position map is needed to use that feature. For more natural damage, it is useful to stack two mask editors, with the top one set to subtract the lower mask. After this, extra scratches get painted in manually, and excess ones painted out with the help of a paint layer over the generators. I used a black and white scratches texture as stencil mask while painting.
I like to give my metals subtle color variations manually painted in or as a tileable texture. This simulates the oil coating and helps to break up the texture a bit and makes it more interesting. Also, rough/glossy variations are hand-painted over the model to break up the gloss variations generated by textures and smart-masked textures. These additional gloss details like fingerprints and smudges are added on the surfaces that get touched. Subtle dust that accumulates in crevices was also added with the help of a smart mask.
The magazine was textured the same way as the receiver, it consists of a grainy upper layer and a brighter lower layer without grain. Again, the different macro and micro structures of the material reference photos were identified and tried to replicate in Substance. A suitable premade Smart Mask was used and further tweaked. The goal is to create a mask with softer edges and without metal chips. The blur filter is really helpful here. In the end, I added deeper damage at the edges to emphasize the difference to the metal.
I usually try to model as much height detail into the high poly as I can so that it also gets baked into the cavity and AO map. Only very small details like the plastic grain, triangle pattern of the grip, and the labeling were added in Substance Painter into the heightmap.
The rendering of the low poly is done in Marmoset, the high poly renders – with Blender Cycles. The composition of the scene was arranged in Blender and imported in Marmoset.
For the main render, a scanned concrete floor texture from Quixel Megascans was used. However, I would choose a less distracting background next time to focus the view more on the weapon itself and not the hole in the concrete tiles.
For the magazine, the subsurface scattering feature of Marmoset Toolbag was used to make the thinner parts semi-translucent. The GI and local reflection features were a great help for archiving a more realistic rendering of metals and also the interaction of the light with the ground.
For the lighting, I used an outdoor image as skybox and set up additional directional lights to highlight interesting parts of the model. In the detail shots, an additional directional light with high brightness illuminates the model from behind, so the subsurface scattering effect on the magazine can be seen better. For tone mapping, the Hejl model was used. Image sharpening and subtle bloom were added also in Marmoset.
In the end, final adjustments to brightness, saturation, and contrast were done in Photoshop. For the detail renders a low contrast backdrop that doesn’t distract from the gun was also added in Photoshop.