
Goals
The main goal for this project was to further improve my texturing as this is the subject I feel I need to work on most.
As a subject, this is pretty large so to break it down into a few points:
- Work on the material definition in steel by using various types (coated, sandblasted, bare steel).
- Create a wood material for the first time.
- Try to get the material weathering to feel real.
Software
- Pureref (Gathering references)
- Autodesk Maya (Blockout, high, low, UV/packing)
- Marmoset Toolbag (Bake and rendering)
- Substance Painter (Texturing)
- Affinity Photo (Post Process)
References
When I start a new project I always take a good few hours researching the gun and gathering references for the necessary components.
This is done through various sources like auctions, museum websites, YouTube videos and marketplaces.
My general approach for setting up a PureRef board is as follows:
Find references for a complete gun (Blueprint, full gun builds, markings, details, etc).
Then figure out what attachments I want to add.
In this case, I wanted to give the rifle a marksman feeling. So I chose a scope, bipod and picatinny rail dust cover. Finally, find references for each individual part that makes up the gun.
Each reference listed above should ideally have interesting details, surface or material qualities, scratching or basically something that can make the gun feel real.
Some of these references you may not use or you might adjust things, but it’s always good to have this base of reference for texturing and modelling.
Blockout
For the blockout, it is essential to get the proportions correct. What I do for this is use the reference I found before. For the FAL I found a factory Blueprint online. So this was the perfect reference for getting the correct measurements.
If a blueprint is not available, a lot of measurements are. Think of barrel length/width, magazine proportions, etc.
Ultimately, you need only 1 or 2 accurate measurements to get started.
Highpoly & SUBD
I use SubD modelling with floaters for the high poly model for specific normal details.
SubD boils down to using support loops with the basic geo in order to control the subdivided result.
Let’s use the bipod here as an example.
First I model the base shape as accurately as possible so you have an excellent base to work from. This includes Booleans and all you would expect from modelling an object. When this is complete, I use the bevel tool with chamfer turned off in order to get 2 support loops on either side of a hard edge.
The narrower or wider these are, the sharper or softer the final result is.
I do this for each edge and add additional support loops where necessary. After all, this is in place, I clean up the geo so it is preferably only quads. In order to avoid pinching it is essential to prevent triangles or Ngons.

Floaters
Certain details like bolts, dents or other variations in height don’t need to be modelled per se. Here on the dustcover instead of modelling the details into the mesh, I created them in a separate mesh.
This saves on modelling time and is flexible to adjust later on.
For the bake, I combined it with the high so the normal and AO details get projected on the low.

What do I add to the high? What do I do in Substance?
Seeing as the details I create now will be baked in Marmoset I need to decide what I do and do not bake.
A few details like in my reference below you can do in Substance. These are mainly patterns, bumps or markings.
So in order to not have to model these tiny details in and save time I later add them through the normal/height in Substance Painter.

Lowpoly
When the highpoly is done and fully cleaned up. I duplicate the high poly mesh and delete everything that’s not important geo, this means all the support loops get removed.
Any detail that can get baked down also gets deleted and areas with too much curvature like the bipod legs get a few segments collapsed so you save on geo.
This can be as optimized as you want, but it’s always good to avoid being able to tell that a mesh is a low poly from the renders, this mostly is due to optimizing curvature too much to the point where you can see jagged edges.

UVs & Packing
The UV unwrap and packing I do in Maya. In this case, I had 3 texture sets, so I assigned each group its own material.
In this case, I chose to map the attachments, receiver, and barrel/stock together. In my case, I kept the texel density consistent across the 3 groups as they are all intended to be 4K.
But depending on what you need you could make say the scope/bipod 2K instead.

For each group, I unwrap the low poly meshes and map them together using the Maya layout tool.
This can of course be as optimized and neatly stacked as you want, but keep padding vs your texture size in mind. For 4K you can pretty safely use 16-32px padding.

Baking in Marmoset
For baking I use Marmoset. Generally, I just use the default process. Here I make sure to bake in exploded view in order to have control over the AO results.
I don’t want to have AO affect other meshes where it should not. The handguard wood can bake on the steel body for example, but I don’t want this to be baked onto the barrel so I separate them.
Any normal or AO issues I usually fix through adjusting the cage size or manually painting out these issues.

Texturing
So with the correct maps exported from Marmoset, we can go on to Substance and assign them.
I use the same mesh export from Marmoset as through the hide/ignore excluded geometry you can isolate whatever part you need.
For the viewport, I change the environment map to Tomoco Studio.

Aside from this, I add a PBR Validate and Sharpen filter on top of my material stack so I can check if things are PBR correct.
It does not 100% have to match, but it is a good guideline.

I have a few base materials affecting everything. These are coded in red and groups affecting normals/height are in blue.
The rest is set up in green (and orange in case I need to adjust something still).
Materials
For the material workflow let’s pick a section of the gun that has a lot of things going on, for instance, the receiver.
The first step here is to assign a base material.
This material is essentially a clean version of the material in reference, stripped from edgewear, dirt, smudges, etc.

After I am happy with this, I get to work on adding heigh details like markings, brushing and stamps.
The brushing is pretty simple, here I project an anisotropic noise based on a manual UV selection and paint out the areas it shouldn’t affect.

For the stamps on the receiver, I create manual alphas in Photoshop and planar project these on the receiver.
To create additional height variation I take the mask created by adding all the alphas together as an anchor point and blur this so you have a gradient effect around the text.
This is then used to create a stamped effect through the height map.

Layering of details
With the base material and height details in place, I can start layering details onto the receiver.
This process follows the logic of what happens to materials when going through weathering stages as well as good observation of the reference material.
This section in Substance I break up into base weathering which is subtle and more severe weathering like edge damage, dirt and noticeable scratching.

Masks
In order to create very specific edgewear I like to create a composited material from various hand-painted masks.
By having this all linked to one layer it is efficient to change and adjust all this edgewear at once.
This same process I use for dirt.

Highlights and Details
For details like scratches, I go with around 80% realism/working from reference and 20% the idea of “Would be pretty neat to add some scratches here”.
These details I like to generate these through Substance masks like Scratch_Gen_Rough and then manually painted them out.
Same as for edgewear and dirt, this map is composed out of individual masks.
Texturing Wood
Texturing wood was new for me, so I used a few resources available online. The breakdown of Simon Mercuzot’s SKS project was a good reference for this.
Also important here was looking up some videos on how rifles get coated in Varnish in order to understand how and why the wood is the way it is on rifles.
So with that done, I got started with the base mask.

In the gif below you can see the setup for the base of the wood + coating. I used the Wood_American_Cherry available by default for the base and layered the wood veins on top of this.
For these veins, I used Wood_01 and Grunge_Wood_Hard and blended between randomized results until there was a nice balance.
A nice trick to create visual interest in long parts on weapons is to use a gradient on each end. In this case, I used it on the stock, but I have this same effect on various other parts.

With the wood base done, I added weathering and roughness variation as I imagined the gun to be used a lot after the initial varnish was applied.
Seeing as a lot of the initial roughness variation was removed by the coating, I wanted to bring this back by letting it shine through by breaking up the coating through edgewear and chipping.
To add further interest I used the leak grunge to add a nice coat of dirt/mud.
Rendering
For rendering I wanted to display the weapon in a way that the focus could be on the materials as well as have the surrounding be something grounded, but not over the top.
So eventually I downloaded a tarp, a wooden floor, and some cardboard boxes from Quixel and built a scene around these assets.
The lighting I like to set up is based around one key light that indicates the direction of the light and shadows. Here I tried to light the scene from various angles and ended up following through on the top right as it gave the nicest results in terms of light and shadow balance.
With the direction established, I add a rim light and a couple of detail lights to further highlight individual parts.
When all this is done, I add an HDRI that fits the setting: in this case interior. To capture some nice bounce and ambient lighting.

Post-Process Affinity
When I have my renders, I adjust them in Affinity Photo to make them feel more like photographs by adding some noise, grain in shadowy areas and other filters that push the tiny details.
For making it feel like a specific type of photograph you can use a colour LUT that suits your needs.
In this project, I did not use this, but in older work, I used a Kodak colour LUT to mimic the type of photos that the camera takes.

Conclusion
That’s the breakdown of some parts of the process! Thank you for reading this article and I hope you found it useful.
A big thank you to GamesArtist for the opportunity to write this and a big thanks to my peers at work that helped me through feedback and taught me a lot of the points discussed in this article.
Feel free to check out my Artstation in case you want to see more of my work or shoot me a message.
https://www.artstation.com/larsvtooren
Thanks!