Olivier Pflaum shared a detailed breakdown of his project AKS-74U Zenitco covering every step from the boolean workflow in 3ds Max and ZBrush to presentation in Toolbag.
Hello! My name is Olivier Pflaum, I’m a freelance 3D Environment Artist currently working at Next-Gen Dreams 3D with an awesome team of other talented artists. I got into 3D art over two years ago, and I’ve been entirely self-taught up to this point, learning from online tutorials and videos from other amazing artists out there.
AKS-74U Zenitco: Beginning the Project
With this project, I was heavily inspired by the weapons in Escape from Tarkov. The customization in that game is unreal and after creating a nice build in the game I decided to recreate it in 3D for fun and as a portfolio piece.
When starting any weapon project, it’s important to gather references of the real counterpart so you can study the forms and figure out the scale of the parts. Fortunately for me, I was lucky enough to have access to an all-metal gas blowback airsoft model of the AK74U. I was able to have it sit next to me and I could just pick it up and look at it as I worked. Hence why my reference board below looks a bit bare! For the rest of the parts and attachments, I created a reference board to see what was needed. I use PureRef for this, it works great and is free.
The next step after gathering reference is to do a simple blockout and figure out the scale in your modeling software. I use 3ds Max, I find that the stack modifier works great for me and it’s just what I started learning with so I stuck with it. I’ll start by finding an orthographic side view of the gun that I’m creating and put an image over a plane as a jumping-off point. My blockouts are often very crude as I usually jump into the high poly soon after. It’s mostly to just get the width of the gun correct.
For the high poly, I work with a boolean workflow using ZBrush primarily and 3ds Max for the shapes. This is a workflow that I’ve picked up about a year ago, and it works extremely well for a project like this due to how non-destructive it is. Basically I will create the main shape for a part, then create all of the boolean operations for it for ZBrush to subtract, so I am always going back and forth between the two.
Below you can see what happens after I’ve imported all of the shapes and I turn on the live boolean operation. For the smoothing and subdivisions preview, I use dynamic subdivision.
Once I have completed all of the parts and attachments for the gun, I am about halfway done with the high poly. The next step is doing the boolean mesh and dynameshing the resulting mesh to get millions of polygons to work with. To get nice smooth edges, I use the polish features. At this stage, it is also where I sculpt and chip away to create edge damage if my mesh requires it.
The process is quite simple. First, I simply set the polycount that I need (depending on the size and complexity of the part), which is typically around 1-4 million polygons and I let dynamesh do its thing. Afterwards, I use the Polish Crisp Edges feature to smooth out the edges, and sometimes I will use the polish feature too. I usually use increments of 1 so I can control exactly how much smoothness I’m getting.
If the mesh calls for it, this is the perfect step to sculpt in some wear and damage details on the mesh. For this AK project, I did not need it, but for an older weapon or something that has a lot of wear, it would be ideal. I use only a few brushes for this as seen in the picture below. Make sure to store a morph target beforehand! I use the morph brush to restore the mesh if I damage it too much, and I also use it with a square alpha to add harsh edges for the damage itself to make it more interesting. This is from one of my older projects:
Once I have finished polishing the edges and doing an optional damage pass, I move onto bringing the high poly back into Max. This is also pretty simple but just takes a bit of time to compute everything with decimation and reimport.
Now I will move onto the low poly. I will do this by either using the pre-existing meshes that I made before for the high poly in Max, or I will re-import my boolean shapes and use the ProBoolean modifier in Max to create a new mesh. The second method is much more time consuming, as the boolean modifier in Max is not very good and will often leave you with a mess to clean up.
I will also think about how I will mirror certain areas of the UVs as I work on the low poly. It will also save me time with fixing my vertices by only doing the work once for mirrored faces. I’ll separate mirrored faces and give them a different material so I will remember that they are mirrored later for the UVs.
The next step is unwrapping. I use a combination of the Unwrap UVW modifier in Max, UVLayout, and RizomUV for this. For the initial unwrap I’ll manually relax and flatten my UV islands in Max or work in UVLayout. Once I’ve fixed all of the UVs, I’ll resize and do a quick pack in Max to get ready for Rizom. Rizom has an amazing packing algorithm that I use for packing the final UV map.
As I mentioned above, RizomUV has an incredible packing algorithm that works very well for me and is very fast. I’m sure that the actual unwrapping tools are also very good, I just haven’t had the time to learn them yet. I only change a few settings, pack it, and I’m good to go.
Once this is all packed, I will mirror my mesh and shift the UV islands that need it.
For baking, I use Marmoset Toolbag. I find it works great and is fast, and the ability to change the cage sizes easily is excellent for me when I need it. Before I bake, I rename all of my high poly and low poly parts in Max so that the cages are all correct when I get ready to bake. After changing just a few settings, I bake the Normal map and AO map so I can get ready for Substance for texturing.
Once I have baked the Normal and AO map in Marmoset, I move onto texturing in Substance Painter. This is by far my favorite part of the whole process because the textures just really elevate the baked details and let you tell a story with the asset that you’ve spent so much time working on, like its history, damage, who might’ve used it, etc.
When I work on texturing, I build up the material step by step and try to not focus on the details too much until the end. It’s very important to get a strong foundation and base material before delving into the nitty-gritty details. Before I work on the materials I’ll create a lighting scene setup in Marmoset so that I can go back and forth and preview the final material as I work on it.
It’s important to give your materials a subtle blend of variation in color, roughness, and metalness. A good balance of these three values will bring your materials to the next level and make them visually appealing.
For rendering, I use Marmoset once again. I will typically create plenty of shots that focus on different aspects of the presentation: storytelling, showcasing, detail highlights, and sometimes minor breakdowns. It’s important to create a new lighting scenario and setup for every shot because every camera angle is different and will require a different lighting setup for the subject. I typically focus on having a fill light, background light, and rim light. I’ll then place various lights around to give edges and details highlights and be more visible.
Lately, I have been using the Megascans library for creating interesting backdrops in my storytelling shots. It’s 100% free for people who have an Epic account and with Mixer, I’m able to easily import them into Marmoset for my renders.
I tend to play around and typically find interesting angles and figure out what parts I’d like to highlight and showcase in my final renders and portfolio. I’ll also play around with different configurations for my weapons as shown below.
In the end, I was very happy with how my project turned out as I could push my texturing and presentation further. I strongly suggest for anyone who is learning 3D art to look at the many paid and free tutorials, videos, and breakdowns out there created by other amazing artists. These tutorials are incredibly cheap for the knowledge that you get and are in my eyes invaluable for anyone starting out. Join artist Discord servers and communities, get involved with others, and take on contests and challenges with other artists to improve, learn, and get feedback.
Thanks for reading, I hope you could learn something! If you have any questions, please feel free to reach out to me!