FG42 Rifle – Weapon Breakdown – Anton Bång
Hello everyone! My name is Anton Bång, and I am an aspiring game artist in Malmö, Sweden. I am currently a student at The Game Assembly (TGA) in Malmö, attending my second year of game art.
I am fascinated by the simple, yet complex inner workings of firearms and think they are a great study of storytelling. I prefer to model 20th-century weapons over many modern firearms, due to their crude and elegant nature, which tells a far more interesting story in my opinion.
This project started off as a personal project but later turned into a piece for my portfolio course at TGA. I set out to improve my wood and metal texturing and wanted to do it in the form of a first-person rifle. When researching new weapons to model, I usually just use Wikipedia. I saw an image of the early FG42 prototypes, and immediately found true love!
I use subdivision modeling in Maya to make my basic shapes and Zbrush for booleans and additional high-poly details. The lowpoly is modeled in Maya. Baking & rendering is done in Marmoset Toolbag 4. I use Substance 3D painter for all my textures, and PureRef to organize my references.
In my opinion, research is the most important step of the process. A good understanding of the prop is going to save hours of unnecessary work. I also like to have a basic understanding of how the weapon works beforehand, so if / when I have to make changes to better fit the game environment, I can do so in a believable way.
For my modelling reference, I like to use YouTube and google images as a source. I can especially recommend you check out the Forgotten Weapons (Gun Jesus) YouTube channel, as he often takes you through the story behind the firearm, while also providing lots of camera angles that would be hard to find anywhere else. Another good source of reference is traditional literature. I often referred to “Death from Above” by Thomas B. & R. Blake Stevens Dugelby when I had trouble understanding the individual components or functionality.
For my material reference (not just for weapons), auction sites are a goldmine! They often have a plethora of very high-resolution images, and from a lot of different angles. Restoration videos can also be a good source for understanding how layers of wear accumulate.
I start off modeling by blocking out the primary proportions and basic shapes. I like to spend a little extra time on this step, as it will prevent any major mistakes further down the pipeline. That said, I am always checking my reference, and usually do find proportion mistakes later, but the goal is to catch as many errors as possible early on.
I also set up an FPS camera here, so I could view the model from the player’s point of view.
When the basic blocking is done, I move on to the refined block-out, which is basically a glorified way of saying: good forms with bad topology. My focus here is to establish most of my secondary forms, without necessarily worrying about the topology.
The refined block out provides me with a base to start adding support loops, and get into subdivision modelling. I will use the polish deformer in Zbrush to soften my edges later, so I like to go a little sharper in Maya, just to be safe. I don’t worry about making the models airtight either, because I’m also going to dynamesh it in Zbrush.
Now I start planning out my booleans, and assign another material to the negative shapes, just to separate them in my mind. I use booleans if I think it will be quicker than simply modelling it by hand. The extraction port for example, is an area that would be much harder to model, rather than just subtracting – so I decided to boolean it.
Now it is time to export everything over to Zbrush! I don’t use any special export settings, but just make sure that my scaling is correct.
The first thing I do after importing the models from Maya is to organize the sub-tools into two folders. One for all the prop components, and one for the boolean shapes. I subdivide the meshes a couple of times and dynamesh them together into their respective parts. I highly recommend getting your hands on Dynamesh Utility, as it will grant you way more control over your dynamesh resolution.
I perform my booleans in folders so that I don’t get a brand-new tool for every operation.
After I boolean, I dynamesh it again, making sure to keep my polygroups as they will be useful when it is time to soften the edges. I strongly urge you to avoid polishing the edges until the very end, as it is very hard to sharpen them again later.
(Not like I had to redo the whole receiver because I smoothed it too much… **cough cough**)
With all the booleans done, it is time to smooth the edges with the polish deformer. I save a copy beforehand, so I can always go back.
First, I mask out the area I want to polish, then apply the deformer. This is where the polygroups come in use, so I won’t have to mask everything out by hand. To select a polygroup, hold Ctrl + Shift + LMB. Invert selection by holding Ctrl + left-clicking outside the model. Blur the mask with Ctrl + LMB.
When making high polys for games, I like to exaggerate the softness of the edges. A lot of edge information will be lost in baking & texturing, so I want to make sure that they are still able to catch highlights in-game.
Also notice that I made the handguard smoother than the rest of the weapon since it is made from a softer material.
I get nicer results if I press the “circle” (right side of the Polish button.)
Next up, I like to do a little sculpting to define my materials further. Some areas are too tricky to achieve in texturing, so I just sculpt them instead. It’s a good idea to save a copy before this stage too, just in case.
When the highpoly is finished, I like to import it into Maya, so I have a reference when building the lowpoly. But 40 million polygons are a little too much for Maya to handle, so I use the Decimation Master to reduce it to something like 3 – 5 million polys instead. Decimation optimizes the mesh while preserving the form, so the resulting mesh should look identical to the previous one. I usually set it to something between 10 – 20%.
The last step before exporting is to assign vertex colours to each sub-tool, so that I can bake out some ID masks. I go through all the models and make each separate piece into its own polygroup. This can be done with the Autogroups button.
I then use the Polypaint From Polygroups button to assign each polygroup its own colour.
ID masks save a lot of time, due to the fact that you don’t have to mask everything out manually later. If you right click on a mask in Substance Painter, there is an option called Add Color Selection, which lets you pick a colour from the ID mask, and spare you the trouble of painting everything out by hand.
I export the mesh with FBX Export / Import, under Zplugin. I usually uncheck sNormals to avoid potential normal artifacts.
I reduce the subdivision meshes that I modeled in Maya and build the rest of the lowpoly by hand. I also use a lot of booleans in my lowpoly workflow to speed up the process. Usually, I just reduce the boolean meshes that I made before exporting to ZBrush and use them to boolean the lowpoly. With this workflow, the lowpoly tends to be one of the faster parts of the process for me.
I follow the philosophy, that if a form doesn’t affect the silhouette, it can usually be optimized and baked into the normal map. However, large holes tend to look weird when baked in, so I give some extra topology to those areas too.
Because the FG42 is intended to be used as an FPS weapon, I know which angle the player is most likely going to view it, and can optimize accordingly. The rear sight, for example, will be right up in the player’s face and will therefore need more polygons to refine the silhouette compared to the stock.
To avoid adding edge loops going all the way down the stock, I bevel edges that affect the silhouette, and quickly resolved them into tris. Because the model isn’t going to be deformed by animation, clean edge flow doesn’t matter as much as it does on, say a character.
I then go through the model again, softening and hardening edges. A good rule of thumb is that edges sharper than 45° should be hardened.
I do all my UVs in Maya, but I’ve heard great stuff about Rizom UV too – and will probably check it out in the near future.
I should mention that I use the Automatic Layout tool to place most of my UVs. I don’t intend on wasting hours playing Tetris when Maya can do it for me in a fraction of the time. I leave around 8 pixels of padding between my shells, and make sure to straighten everything out, to save space and avoid antialiasing.
When doing weapons for FPS, I like to give UV shells closer to the camera more texel density. For example, the rear sight has more resolution than the grip, because it will constantly be up in the player’s face.
To save space, I also stack as many shells as possible.
Then, I export the lowpoly to begin the baking process.
I bake in Marmoset Toolbag 4, so I get more control over skewing and general cage difficulties. I create a new baking project and load the highpoly and lowpoly. Marmoset will create baking groups automatically if you have given your models the _low and _high suffixes beforehand.
I set my output path and choose which maps I want to bake. (Normals, AO, Curvature and Vertex Color) I always bake in 4k, so I won’t have to re-bake if I would like to up my resolution in the future. I also set samples to 16x and soften them by 0.02.
The thing I love about baking in Toolbag is that you get a lot of control over skewing. If you press Paint Skew under any baking group, you can paint away from the skewing with black, and bring it back by painting white. You also get control over the cage offset per baking group, instead of just having one slider for the whole model – like in Substance Painter.
I repeat the process for each baking group and also go back to fix any potential mistakes with the lowpoly or UVs.
When I’m happy with the bake, I like to open the normal map in photoshop and fix any artifacts. A tip is to use the smudge tool in photoshop to straighten out wobbly lines! Special thanks to Jakub Mrówczyński for showing me that trick!
I load my lowpoly model into Painter and import all my baked maps. When setting up my scene, I like to change the environment map to something with as few colours as possible, so I can work without always compensating for the environment colours. Studio Tomoco is the one I prefer. I also change the Tone Mapping Function to Sensitometric, and the Colour Profile to sRGBf, for balanced colours and lights.
I like to set up my rendering scene in Marmoset Toolbag as early as possible, so I can easily hop back and forth to compare results.
My texturing process is pretty simple. I start off by making the base material without any wear as if the surface would be factory new. Then I create another subfolder, which contains all the wear and tear.
I also like to add a layer above everything with a sharpen filter and set the blend mode to pass through. This will make your textures just a little sharper, and appear more high-res.
I usually spend most of my time looking at the albedo and roughness map. I like to make sure that both are interesting enough to stand on their own. It needs to look good in the material view also, of course, but when tweaking values, I’m looking at the individual maps.
Texturing the Metal
When creating the base material for the metal, I create a bunch of fill layers to add some subtle roughness and albedo variation. I also create a layer to add subtle noise, which further breaks up the surface.
The brushed metal is pretty simple. I use anisotropic noise and add variation with a paint layer. I only add a little bit of height to the fill layer, but most of the effect will be carried by roughness once I start playing around with dust and dirt layers. I add an anchor point so that I can reference the mask later on when adding wear & tear.
When creating the wear & tear, the reference becomes crucial!
I usually start off by doing some edge wear. What most people get wrong about guns is that they are not painted, but coated. A lot of WW1 / WW2 guns go through a process called blueing, which is performed to protect the metal from rust. A thin layer of black oxide is applied to the surface, making the metal darker. This coating is around 0.002 mm thick.
When making edge wear, or any surface wear for that matter, I don’t use much height information – if any at all. Instead, I let the albedo and roughness do most of the heavy lifting.
I add a few fill layers to create dust and dirt. I start off with a dirt generator and add several fill layers set to multiply, to break it up and make it feel more organic. I also do a lot of painting by hand, to add specific details that I can observe from my references. But the key is to add lots and lots of breakup and avoid the “procedural” feeling that is very easy to fall into.
Next up, I add some grease layers to emulate fat and oil build-up. Guns are pretty oily, which is going to accumulate lots of dust. Combine that with the fact that they are regularly touched, and you get a large range of roughness variation. The grease layers are primarily to
add roughness information, but I will also set my albedo value to something very dark and put the layer at 2-4% opacity. Almost everything done in the roughness is mirrored in the albedo in some way – and vice versa – so that the information is still there regardless of the lighting setup.
The last step is to add specific details, such as dried oil, trigger wear, heat damage, etc. Basically, things that are way too specific for the other layers to achieve.
Texturing the Wood
The wood follows roughly the same process as the metal. The big difference here is the base material. For wood, I usually start off with a base texture, and this time I used one from textures.com.
To tweak the colours of the wood texture, I add a fill layer and set it to pass through. I add a contrast filter and a gradient filter. I up the contrast before applying a gradient so that it becomes easier to tweak the positions of the colours.
Now the texture is pretty flat, but I will rebuild the material with some custom alphas to fit my references better than the original texture did. For this project, I primarily used alphas from Milad Kambari’s “Wood stencil imperfection-vol 03”.
I create a layer for striping by adding a fill layer to the mask. I apply the custom wood alpha and set the fill to the planar project, which lets me play around with different angles to achieve my desired result. Afterward, I tweak the look with some blur & level filters.
To break up the surface even more, I add some soft bumps, or scratches.
The last step before the wear & tear is to do some old varnish. To achieve the saturated effect, I add a Color Correct Filter to a fill layer set to passthrough, and up the saturation. I add a little bit of height, some discoloration and subtle brush strokes.
For the wear and tear I follow the same process as for the metal, observing my reference closely and trying to replicate it to the best of my ability. Below are the layers used for the wood wear.
I prefer to present my props in an environment or context and place it in some kind of story. I like the “floating guns” as much as the next person, but I also like to include at least one shot when the prop is presented in an environment. It also gives me an opportunity to play more with composition, and guide the viewer’s eye.
For the environment, I made a quick carpet in Marvelous Designer and modelled the medal in Maya. For the wood background, I sculpted some planks in Zbrush, then baked them onto a plane.
I usually just use a variation on the three-point light setup when lighting my models. (Key, fill and rim light.) It’s simple, but does the job!
I want to give a huge thank you to the Games Artist team for this opportunity! I also want to give a shoutout to all the awesome and talented people at TGA!
Special thanks to Esbjörn Nord, Jakub Mrówczyński and Kim Stenberg Kristiansson for providing invaluable advice & feedback on this piece! Here are their links:
Esbjörn Nord: https://www.artstation.com/esbjornnord
Jakub Mrówczyński: https://www.artstation.com/mrowahtt
Kim Stenberg Kristiansson: https://www.linkedin.com/in/kim-kristiansson-stenberg-178754108/
You can check out more of my work here: https://www.artstation.com/antonbang
The Game Assembly: https://www.thegameassembly.com/