Realistic Gun Production: Modeling, Texturing, Animation
This time, my focus was mainly on the level of realism, so my approach was to gather as many references for the gun as I could. Since I wanted to model every part, it was a bit complicated to get a good photo of every single element. What’s more, my country doesn’t allow you to carry a gun so there are not a lot of gun shops and I wasn’t able to see one in real life. Here is what my PureRef canvas looked like:
I used World of Guns which is a simulation where you can assemble and disassemble weapons. There was a different kind of Colt (Colt Navy) but their mechanisms are close enough so I could use it to understand how it works. I also watched about 20 hours of videos with people disassembling and firing the guns which helped me to understand how materials react to the light in different settings.
I think reference gathering took about 30% of the total time spent on this project and was the most difficult part.
Traditional vs. Procedural Modeling
To my mind, the mindset for doing traditional modeling is very different from procedural modeling. Procedural modeling is all about problem-solving and trying to get your assets to work in various environments and with various settings. Traditional modeling is more about getting the shapes right and since it’s fixed and doesn’t need to adapt, you can really take your time and focus on the little details to get a believable level of realism. Even though these two approaches to modeling are different, I really enjoy doing both.
I think the most interesting challenge was to get each part to interact with other elements realistically and form a functioning mechanism. I had to model every part and take into account every change I made to keep everything fit nicely together.
For this model, I used Red Storm’s workflow.
For the low poly, I used a basic SubD modeling workflow.
Again, references are key for modeling. For example, here are all the different angles I managed to gather for every screw of the gun:
Since the gun is old I didn’t manage to find any blueprint or Autocad print of the model, but I did manage to find an assembly plan which helped me a lot.
Texturing is where I had the most fun! Since I already had references for new and used guns I jumped right into it after I finished baking. I used Substance Painter for baking and texturing since I’m very comfortable with Substance Suite.
During the first pass, I applied really simple materials from the shelf that loosely matched the types of materials used for the gun in real life (i.e. wood for the handle, metal for most parts, etc.) without worrying about realism yet.
Right after that, I jumped into Unreal Engine 4 and started setting up my scene. I really like to set up my scenes very early on – this way I can iterate on the materials and lighting at the same time as they interact with each other very intricately.
Here is what the scene looked like at the very beginning:
Just a basic plane with a texture, two colts with a spotlight and an HDRI (I used dynamic lighting for the scene as I planned to try the ray-tracing feature of UE4 that just came out a week earlier).
At that stage, I saw some mistakes in baking, plus the roughness was wa-a-a-y off on the metal, even though it looked right in SP.
In order to achieve coherence between the lighting in UE4 and Substance Painter, I used a UE4 feature that allows you to render a cubemap from a scene.
I then imported this cubemap in Substance Painter and used it as my lighting source.
When the lighting in Substance Painter and UE4 matched, I started focusing on the realism of the textures.
I used a Roughness/Metallic workflow.
I exploded my gun so that I could work on all parts. Even though I tried to do the gun as realistically as possible, it was still an asset that was supposed to be optimized enough for game production. I used only a 4K texture set and made my UVs so that I had a good texel density on the parts we see the most and a lower density on those which are less noticeable (screws, interior mechanism, etc.).
For me, texturing is a very important part of the storytelling. Good textures can tell a lot about the asset. In my case, I wanted to portrait a gun that had been used a lot but was still in a relatively good shape maintained by its owner.
Below, you can see different stages of scene development:
Here is how I used the built-in tools of Substance Painter to make the wood:
And here is how I made the tempering effect based on real-world data:
For the wooden planks, I used Substance Designer to create the texture. Here is the node graph (it is a bit messy as I did a lot of tests):
The texture rendered with Iray:
What I did in the engine was quite simple. I made a basic Master material that takes 3 inputs (Base color, Normal, and packed Roughness, Metallic, AO ) and used it for everything except the blood and glass print decals.
For this animation, I used an in-house script that a student of mine wrote in order to help with the breakdowns. Basically, what it does is that you select the part you want, enter a distance, and the script creates some animation curve and moves the part on the axis you select. I just grouped the pieces by order, used the script on them and did some manual retake for some special pieces.
Originally, I made animation by hand showing the order of how you disassemble the gun in real life but that was way less dynamic:
In UE4, I used Sequencer to play my animation and bind a camera to a crane. I put keys on the pitch and arm length so that I could edit them while the animation played.
In order to get a good focus, I used an empty object that I called a “Tracker”. I set my camera on tracking mode with this actor selected. It allows me to move the tracker independently and have interesting camera focuses while the animation is playing.
I also played with the play rate to slow down or accelerate my animation at some key points.
It is not a very complicated setup. In the end, all that matters is to get a good composition for the shot.