Denis Chirkov walked us through the Heckler & Koch VP9 Match project, explaining how a real-life pistol featuring scuffs and signs of use was brought to life with Blender, ZBrush, Substance 3D Painter, and Marmoset Toolbag.
Hello everyone, my name is Denis Chirkov. I am a Hard-Surface Artist with 1.5 years of experience. Previously, I worked in a large corporation for more than 7 years, periodically changing positions in finance, logistics, and management departments. Even then, I felt it wasn't my thing, but it took me a long time to realize it and take action.
I've always loved computer games and wanted to do something creative, so when my friend suggested learning 3D modeling, I jumped right in. I started my journey by taking a variety of courses online, both paid and free. My first project was a stylized roguelike top-down shooter in which I was brought in in to make props and environment elements under the guidance of a more experienced artist. It was a non-profit project and we were a group of 15 enthusiasts participating in various contests looking for investors.
I soon encountered that my skills were insufficient for the project and left to focus on improving them. I took another course, then another, continuously working on myself and increasing my artistic and technical skills. I completed project after project, asking for feedback from experienced artists so as not to repeat mistakes. I also took my first freelance job and soon received an offer from a company to work for them as a contractor.
The company sells models to stockists, and even though it wasn't gamedev, I accepted because it was an opportunity for me to work on commercial projects, gain experience, and get paid in a new profession. I created numerous models, picked up topology skills, learned new software, and learned how to work within company specifications. Nevertheless, I was still dissatisfied with my skill level and wanted more. After 6 months, I began working with a mentor to address my weaknesses, tighten up my weaknesses, and, most importantly, refresh my portfolio in order to find a job in gamedev. That's how this project began.
The Heckler & Koch VP9 Match Project
The criteria for selecting the model were as follows:
- I wanted to challenge myself with something to enhance my skills.
- The model didn't have to be too complex, as I wanted to lay it out in a specific timeframe. I'm still learning, and I don't work very fast, so I immediately dismissed the idea of taking rifles, machine guns, and the like.
- I had to like the model. This is very important, considering how much time is spent on the project.
- The model must attract attention. On the advice of my mentor, I tried to find common elements between projects, gathering a lot of attention and feedback on ArtStation. Pistols with different customizations and modifications are more likely to catch an eye. So, I was narrowing down my search.
The Heckler & Koch VP9 Match Perfectly aligns with these goals. First of all, it's a gun. As a kid I had a large encyclopedia of modern weapons, with which I spent many evenings looking at every rifle and pistol. That said, my experience modeling guns was minimal. I felt inspired by looking at gun references and decided it was worth going in that direction.
Secondly, the VP9 Match version is a very beautiful gun with an interesting modern shape. I was searching for customized versions of pistols with various attachments, and the VP9 Match caught my eye the most. It had everything: a beautiful and complex shape, holes in the front of the slider, and modern components. And, most importantly, a large wealth of high-resolution references.
I start my search for references with Google and Yandex because they produce different results. Occasionally, I use Pinterest, but only in the early stages if I don't have a specific query in mind.
When looking for references to design anything, especially guns, finding the original blueprints is advantageous. Searching through Google Patents and documentation on official websites can provide excellent tools to achieve the correct proportions. In my case, I couldn't find any blueprints, so I had to rely solely on images from the official website and data about the dimensions of the firearm.
I searched for as many high-resolution pictures as possible to get a complete picture in my head. The ref board consisted of several sections:
Modeling:
- Basic look and shape. This is where I put everything together to understand every millimeter of the chosen model in terms of geometry.
- Details. All sorts of close-up shots of various details.
Textures:
- Base. Basic information about materials, colors, and surface characteristics.
- Various damages. Scuffs, scratches, dents, and cracks. A special emphasis is given to scuffs and traces of use.
- Accent spots/ Oil marks, paint, dirt, dust, and other noticeable signs of wear.
Ideas for renderings. Before finalizing, I had no idea what the presentation would look like, so I just threw everything that could be useful into this section.
Modeling
The main work on the model was done with Blender. Working through Boolean pipeline allowed me not to be afraid of making inaccuracies in the shape. I could adjust any this or that detail at any moment without unnecessary fiddling with the polygonal mesh. All the work on mesh adaptation was handled by the Triangulate modifier, which stands last in the modifier tree.
Working on the shape through this pipeline greatly helped me to imagine how each element of the shape was created in a real weapon factory. When creating the grip, I combined this pipeline with subdivision to achieve a sleeker and smoother shape. This modifier was applied first, followed by carving the desired shape using Booleans. This posed some technical problems, requiring additional time to optimize the mesh after applying subdivision to create a low-poly version in the future. The biggest difficulty was that, at one point, I had 30-40 unapplied Boolean modifiers on each of the large gun elements, which severely slowed down my PC. In the future, I will definitely reconsider this stage of my work and split the working file into several backup versions. So, in the main project, the modifiers are already applied, and the system works faster. I also want to learn the CAD pipeline to save time.
The high-poly model was done in ZBrush by polishing each individual part. This approach takes a lot of time and allows me to adjust the thickness of the chamfers on each individual component. I tried this method for the first time and was thrilled with its convenience and time-saving. All I had to do was add a subdivision to the model (3-4 iterations for a denser mesh) using crease to maximize the polygonal mesh and then import the model into ZBrush. With just a couple of button presses, I had the high-poly version ready. Fantastic!
To separate large chamfers from sharper ones on large parts I utilized the Morph brush. This tool allows to selectively roll back to earlier iterations of the polish in specific areas. This was particularly useful when working on smaller elements that might otherwise become too soft and lose expressiveness. Such as the top of the slider.
I didn't intend to create significant damage and wear, so I didn't sculpt anything at this stage. Instead, I decided to add all the wear and tear into textures.
Topology
In this project, I wanted to challenge myself and make the most detailed model possible so I didn't have to make a super-optimized polygonal mesh. However, I tried to get the most logical and not overloaded mesh for the low-poly version. I left small elements (like bolts) as geometry rather than baking them in to maintain visual quality
I divided the model into 4 texture sets with equal texel density: a slider, a grip, a magazine, and a bullet, two barrels with a silencer. I did all the UV work in RizomUV.
Previously, I had always completed this task in Blender itself, but since this project served an educational role for me, I decided to try a new software. I was impressed by how incredibly easy and convenient it was to straighten even complex UV elements, such as the removable panels on the handle. For example, such as the removable panels on the handle. Even though the texel is already quite high, straightening all the islands as much as possible minimized the chance of artifacts during baking.
Texturing
I've always admired the textures that some artists create for AAA games. Like many others, I really like the work of Dan Kenton, Dmytro Mykhailyk, Adrien Roose. During this project specifically, I took a lot of inspiration from work done by Egor Kapashylov.
I decided that this was a great opportunity to spend more time with textures and improve my skills on this model. Usually, I divide the creation of any material into the following stages:
- Base
- Texture
- Little scratches and color variations
- Scuffs, medium scratches, and minor wear and tear
- Major wear and tear
- Dirt, dust
I did all the texturing with Substance 3D Painter. Like many artists, I use Tone mapping – ACES. It brings the perception of the picture to the real one better than others. I also recommend building a test scene in Marmoset Toolbag to look at the materials in the engine where you are going to render. This is crucial because the visuals in Substance 3D Painter can differ, and some elements that appear bright may be nearly invisible in the final renders. For my convenience, I took some surfaces and 3D assets from Megascans to increase the contrast of the materials and add more realism to the scene. A neutral HDRI map is sufficient for lightning, but I also added a couple of light sources to highlight the glare of the metal parts. Places where improvements are needed are easier to see in the overall picture.
Sample test scene
The most challenging material for me was the slider itself. I rebuilt its base about 3 times before I achieved the right combination of Metallic/Color/Roughness. When I was a beginner and was going through scattered tutorials on the Internet, I took it as a given that if an object is made of metal, the Metallic value should be set to 1. This turned out to be a mistake because I found my ideal combination of Color/Metallic/Roughness only by lowering the value of metal in the material to 0.3.
My advice to all beginners is to pay as much attention to the material base as possible until you get a result you are satisfied with. Most mistakes and problems arise at this stage, so you have to work hard to get the proper physical properties of the material. Look for as many references as possible in different lighting and angles. Try to avoid absolute values such as "1" or "0," and don't hesitate to go back to the beginning of the project in the middle of it if you need to.
A big contributor to the realism of any material is its understated variation. I added some variation with Color/Roughness noise so that it creates an interesting pattern as the light changes. At this stage, it is crucial not to overdo the contrast. The layers should be barely visible in the overall picture of the maps. This is very important because otherwise, it will be very difficult to add accents in the later stages of texturing.
Next, I added textures using height and normal maps – anisotropic lines along the hull, small bumps, and scuff marks (be careful not to overdo them). Together, these details create a more realistic picture of the material. I also added different noise patterns along the surface to create an even more interesting texture on the Roughness map.
At the end, I recommend adding a Hi-pass filter. As a source of information, you should collect all the information in the Height map from the layers below. Then, slightly increase the Roughness value on this mask so that the protruding areas are emphasized. This helped to add more realism.
The final touch before applying the damage is to select the scuffs. While you can use a curvature or metal edge generator as a starting point, I recommend creating everything by hand. At this stage, I had to revisit an immense number of references to get the desired result.
Scuffs should be placed logically, considering how the object is used in reality, where they occur more or less frequently. I tried to simulate their real appearance using a low-intensity crumbly brush, moving in a gradient from the edges to the center of the surface with fading.
With nearly imperceptible intensity in the Сolor-channel and with high contrast in the Roughness-channel, this layer makes your model more expressive and realistic. I also slightly increased more intensity of the joints with the handle to visually separate the two parts from each other. The major wear is categorized into two types: cracks and scratches.
I created the largest cracks using Stencil, then refined them by hand to add expression based on usage. I recommend always starting with this method, as nothing beats the reality. I also used Stencil to create large scratches from real cracks, though some of them were hand-drawn, like those shown in the screenshots below. I used a very thin, crumbly brush and worked it over the same spot until I had a scratch. This is a method I discovered on my own.
I applied all the damage using masks and added anchors to utilize them further through anchors in the following logic: cracked area with metal and dirt on the edges inside and outside to add realism.
Masks and result
I additionally added variation to the Roughness channel around these cracks to simulate a "wiped" surface. The final touch was to add the overheating. I found references that showcased the overheating marks of this area very nicely, so I was eager to replicate this in my work. I found an explanation online about the physical process of how these marks appear, along with a breakdown of the colors of heat-treating metal. Then, I outlined the selected area in the appropriate colors according to the reference, added a warp filter to vary the shape a bit, and applied a blur filter on top. Next, using anchors, I added a variation roughness map to this mask to make this area more interesting.
Before and after blur:
Then, I added various dust, dirt, and hair to create an even more realistic picture. The dust was of 4 kinds. The first 3 layers consist of small variations in size, color, and height of the regular dust, and the 4th layer creates a light gray dusting around the rest. The 5th layer was large chunks of dust randomly scattered throughout the hull. Exercising restraint is important here. The 6th layer consists of variations of small hairs in the area of the dust accumulations and around the case as a whole. Just like all of the dust and dirt, these were all rendered by hand to avoid generativity.
This group of layers was the most problematic in the final render because they appeared too contrasty in Substance 3D Painter and almost invisible in the Marmoset scene. To address this, I increased their intensity for the final image, even though it looked too bright in Substance 3D Painter.
The most enjoyable part for me was creating the handle pattern. I borrowed my wife's tablet and drew the entire pattern by hand. I started with the bananas, then multiplied them and adjusted the joints of the images to avoid seams. While it may not be the best way to do it, I got a unique drawing and kept myself busy while I waited for my wife at the cafe.
Next, I applied a mask by hand to the areas where the pattern should appear on the handle and added the pattern via anchors, breaking it up slightly with Grunge maps. Lastly, I used anchors again, adding a little wear and tear on top.
Masks
Rendering
Even during the reference selection stage, I realized that in the final presentation I wanted to show the model in different scenes with varying materials in the background. I already knew then that I wanted to make one shot with the gun lying on the ground or rocks to practice creating a composition and other details.
I imagined this shot to be a solitary one, so to avoid spinning around it, I made a simple background of a table and cardboard from the Megascans assets. They complemented the scene perfectly due to the contrast of materials. Since the scene was static, it was possible to present the gun and silencer from different angles with minimal effort.
Since during the texture phase I paid special attention to Color and Roughness variations at different camera angles, I supplemented the presentation with studio shots, taking a normal plane on which I also added a Roughness map with Megascans with low intensity.
Having two series of renders with different lighting allowed me to better show the variation of the maps and the project as a whole.
When determining the order of the renders, I tried to attract and maintain the viewer's attention. General plan, slightly closer shots, a sharp change of picture to relax the viewer, general plan again, change of perspective, close-up shots and again change of scene.
I created many more renders than those found in the presentation. Some of them had to be to avoid overloading the project. However, the render with the red reflection resonated with me so much. So I included it, even though it wasn't perfect.
As I mentioned earlier, I built and created rendering in Marmoset. I started with a simple three-point lighting system. It consists of three sources with a Directional type to highlight all areas and sometimes an additional Omni to target a specific area. In the render below, I used the Plane as a reflector to add a color accent. By adjusting the Roughness of the Plane, I adjusted the light diffusion on the gun, creating soft and diffused illumination.
Tone Mapping is the same as in Substance 3D Painter – ACES. I like the high contrast of the lighting with light and dark areas. This approach draws viewer's attention to specific areas while leaving others shrouded in mystery and encourages them to continue exploring the presentation.
Conclusion
As I mentioned at the beginning of the interview, I am still a beginner and do not have much experience in 3D. I worked this project alongside my main job, apartment renovation and even relocated to another country during this time. I studied new tools, relied on feedback from more experienced artists and spent considerable time studying references and experimenting. I tried to devote about 2-3 hours each day to the project, with the total duration spanning four months.
This project allowed me to gain a new perspective and improve my workflow. The most inspiring stage for me has always been the texture creation stage and the initial loading into the future scene. That's when the model transforms into something almost tangible and takes a step beyond your viewport.
The main lesson is that you shouldn't fear the imperfection. The real problem is getting frozen in fear of uncertainty and not doing the best you can. It's important to continuously remind yourself of what every artist and every instructional article says – always be learning, seek feedback from more experienced artists, and keep moving. Try to watch videos showcasing the work of experienced artists. For example, Dan Kenton's texturing video streams are a free treasure chest of useful information.
And don't blame yourself for failing. The main thing is don't stop. Draw lessons from experience and try again. With persistence and right strategy, you will definitely achieve results.
And, of course, references are key. Many beginner artists, myself included, have made the mistake of trying to make "similar to real life" textures. Instead of "inventing" materials, I recommend using the right references. Combine them competently and learn to repeat them with maximum accuracy. Sometimes, you can make them even more expressive and detailed than in reality.
In conclusion, I would like to express my gratitude to my friend and mentor, Pavel Kuzmin, for his invaluable feedback and support, as well as to the 80 Level team and, in particular, Amber Rutherford, for the opportunity to talk about my project!
Good luck to everyone!