I have a few goals I would like to achieve by the end of this project:
- Have a high-quality hard surface portfolio.
- Get familiar with Plasticity.
- Practice realistic texturing.
I love tinkering with new workflows. I did this project because I found out about Plasticity. I always wanted to try CAD modeling, but Fusion 360 and Moi3D have always been daunting to me.
Plasticity seems so much easier to learn because of its similarity to Blender.
I also never textured something with such high fidelity before. This was the first time I used stencils in my texturing workflow, as well as applying a lot of color variation/hue shift to the base material.
So, these are the two presenting problems I had before starting this project.
- HighPoly: Plasticity, ZBrush
- LowPoly: Houdini, Blender, Rizom
- Texturing and baking: Substance Painter, Megascans
- Rendering: Unreal Engine (Movie Render Queue)
I was never really a big hard-surface and gun person (obvious from my other portfolio pieces), so I initially struggled to find a gun I wanted to make.
From the start, I wanted to make a gun with a significant wood element because of this article (ArtStation – SKS Breakdown – 80 Level). The planar projection method to get different wood layers seemed very novel to me, and I simply had to try.
I decided to simply go through and stick with SVD Dragunov, the only weapon with wood that I know of from playing Point Blank in Indonesia.
First, I started with collecting references. I categorized my references into a few buckets:
- Real-Life Reference
- Beauty Shots
- Close-up of mechanical functions
I mainly took screenshots from these two videos:
- THE SVD, DRAGUNOV. Russia’s sniper rifle plus Combat accuracy test. – YouTube
- Dragunov | How to Disassemble – YouTube b. 3D References
Below are my 3D references.
Articles that were very useful to get the feel of how you’ll be doing it later down the line.
Some of the articles that I read during this project:
- Creating an Assault Rifle in Substance 3D Painter and Unreal Engine 5 (80.lv)
- Bakelight Magazine AKM – Games Artist
- SKS: Hard-Surface Texturing in Weapons Art (80.lv)
- Making Hyperrealistic Wood Material for Weapon in Substance 3D Painter (80.lv)
Real-Life References Shoutout to Dinusty Empire for providing the best weapon reference in the market for free. Too bad I found it during the texturing phase. It would have been immensely helpful during the modeling phase.
Presentation-wise, I am inspired by Dan Kenton. Clean simple dark/light background, with the focus being on the weapon.
I joined the Weapon Room discord, which has been proven useful in the texturing phase.
Hard Surface Techniques in Plasticity
Plasticity is very fun to learn! It is quite challenging though; it took me around 2 weeks of trial and error every day after work to get comfortable with it. It is a completely different method of working compared to traditional polygon modeling.
The hotkey is a carbon copy with Blender (except the isolate and focus key) made it easier to pick up.
Below are some breakdown pictures and quick explanations of some parts that I think are noteworthy. The gun parts’ names are probably wrong.
Red is Subtract Boolean, Blue is Union Boolean. I love adding colors to my blockout to get the final feel as easily/fast as possible.
- Action_Top Initial Blockout
A simple Extrude Operation from a curve. I cut the back part with a curve too. Then I fillet some of the sharp edges.
The Main boolean Operation
I filleted some of the intersections from the boolean to get that smooth blending look. Doing this kind of thing in Blender would take a lot of time. I added back the thickness in Houdini later on for this specific mesh.
Blocking with curves – I start with some curves. I then Loft the curves to each other.
Unlike traditional polygonal modeling software, combining faces/sheets in Plasticity is perfect! It won’t have those weird clipping where the edges meet.
Curve to Surface
I made some curves in an orthographic view. I then projected the curves to the surface using “I” in Plasticity.
I used the Pipe command to turn the projected curve into pipes. I then chamfer it!
Plasticity | Create Rounded Caps on Cylinders – YouTube Quick tips on how to make cylinder tips perfectly rounded.
Some Additional Mesh
Made with the same curve > loft > solidify method.
Added Fillet on the boolean intersection area.
Definitely the most challenging part of the model. I didn’t really make it 100% in Plasticity as I had to adjust some of the transition parts in ZBrush.
In the image below, I start with Curves.
Splitting the Mesh into two
Since the front top part of the butt is very complex, I decided to split the mesh into 2. Combining the mesh later on in Plasticity is very clean and straightforward, so splitting the mesh like this is very safe.
I use this to make the overall shape soft. This is one of the coolest features of Plasticity. To be able to have different bevel weights. It also allows you to have separate control of the bevel amount in each separate direction.
Meaning you could have an ellipse shape bevel.
I extracted some of the curves after the variable fillet above. Then, use the spline curve to make the flat shape and the unique fillet at the top. Making sure it connects to the main butt is the challenging part.
With the Plasticity 1.2 update, this process is going to be much easier.
Applying some fillet where possible. Notice that the center boolean didn’t get fillet. This is because the topology is not the cleanest. I added the bevel later on manually with ZBrush.
One of the best things about working with CAD is that you can download some pre-made CAD files from websites such as grabcad.com. This particular Bolt Carrier won’t be shown much, so I thought it would be fine to download this part only.
Since I made the Action_Top without the bolt carrier in mind, the silhouette of the bolt carrier does not match with the Action_Top. So I need to cut the top of the bolt_carrier with a curve I extracted from the Action_Top.
This kind of blew my mind. The CAD file you download still has the mathematical information inside.
This means I can adjust the cylinder width, wedge angle, etc.
Below, are images to do with the stock blockout with curves, boolean operation, minor parts and the final mesh.
Initial blockout was done using curves and circles + loft.
Below is the boolean operation and final mesh.
This involves a lot of custom curves, joined with circles. Then I extrude it out, inset, extrude, etc.
Blockout with Curves – Using Loft > Revolve/Lathe > Solidify.
I didn’t fillet the small parts since it’s a lot and it’s too small. I got the nice chamfer from the Houdini voxelization process later on.
Houdini Auto HP and LP
I used Houdini with the intention of making this process faster. This ended up being a pain in the urethra. I will discuss the pros and cons of the automation below.
The useful video that does something similar below: 000 Houdini Game Dev Toolset – YouTube
I exposed 2 Variables for this SubNet
- Voxel Size – the lower the voxel size, the higher the resolution the DynaMesh result
- Smooth Iteration – iteration inside the vdbsmooth node
For some things that have multiple elements combined into a single geometry, I used a for-each-connected-pieces node.
- No ZBrush polish artifact a. Usually, I have to run another clay polish pass after it, which can be pretty time-consuming when there are a lot of different parts.
- This is the initial reason why I wanted to use Houdini for the HP.
- I love the file cache node. It’s so nice to be able to store certain parts of the node tree.
- When I started, I thought I could have 3-5 VDB_Simple nodes for the whole gun. But in the end, I have to do lots of splitting manually. This is because, from Plasticity, the FBX separation is not very clear. In the end, I have 25+ node trees after splitting.
- Troublesome if I want to sculpt manually. Exporting a heavy VDB mesh is very troublesome into ZBrush. In the end, for this project, I did very little manual sculpting.
I exposed 4 Variables for this SubNet.
- Tris Count Target – self-explanatory
- UV Seam Grain Tolerance – the higher the number = the more UV island
- UV Seam Merge Threshold – the higher the number = sew sew-back small islands more
- Rizom Optimize? – a boolean, sometimes if the UV is not nice I enable this.
- VERY. BAD. UV. I’ll show the UV below at the bottom of this post.
- The resulting geometry is all triangles. Very hard to manually adjust.
- Some parts need manual UV cut anyway, especially for the wood.
If I had more time, I would love to sculpt some warp and wobble on some of the edges. However, I did not do that due to time constraints. The only thing I sculpted is this small part at the butt.
For UV, I simply used Rizom to clean up the auto UVed mesh from Houdini. Major cleanup was needed for the wooden parts.
Baking was straightforward. Nothing fancy here.
LookDev (Texturing + Lighting)
Texturing is the most bang for the buck in terms of the “amount of time taken” to the final result in my opinion. Many of my mistakes in HP and LP are covered by the textures.
I start lighting very early in the texturing process. With just the base material applied, I started integrating it into Unreal (Material, Texture Settings, etc). I do these for a few reasons:
- Instant Unreal Checking! Simply export the texture and re-import the texture.
- Camera placement Experimentation
- – Now I know which part of the gun is more or less important for me to texture. I can spend more time on texturing that part instead of the others.
- – Different Focal Length. I used 11 85mm cameras and 3 50mm cameras. I use the 50mm for more dynamic camera angles, while the 85mm one for more texturing showcase.
Lighting and Background Experimentation
- I tried out light and dark backgrounds.
- Different key light locations.
- Different fill light amount.
- Different rim light amount.
Below is a breakdown of my lighting setup.
- Key Lights
- Fill Light + Background Lights
- Rim Lights
- Extra Lights
I added these lights to add some more details to some of the parts that I spend more time texturing.
Here are some stencil packs that I bought for this project. I tried to look for photo-scanned stencils made by an individual.
I found it very daunting when some popular stencils in the ArtStation market are labeled as “48400 MEGAPACK STENCIL LIFETIME OFFER GET YOURS TODAY.”
In the end, I used only 1 or 2 from each pack. But having choices really motivated me to get to texturing.
I made a custom library for my stencils too for organizing. I have a few others from The Weapon Room Discord from Dan Kenton, a few from Megascan Bridge, and some I made myself from photos.
For this project, 90% of my layers are using tri-planar projection. Initially, this is because of the messy UV, but I later found out this is very useful when my other parts have a different texel density. It keeps things even when I copy/paste the smart material to another TextureSet.
This is also useful when I need to keep going back and forth to re-UV the wooden parts. This way, the texture location stays the same.
Below are some noteworthy parts and their layer breakdown:
Base – Since my UV is not properly unwrapped (because of the deadline) I decided to use warp projection to wrap the wood into place.
This is not perfect; if you see the wood from below, you will see a lot of texture stretching. But since I set up my main camera angle already before I even start texturing, I know that that part is not going to be very visible.
For the texture, I use this wood material pack I bought from the ArtStation Marketplace.
To make the wood more interesting, I put the wood albedo as a mask, subtracted by the thickness map. This will result in a soft gradient from the edges of the mesh.
Damage Layer (Stencils)
I start with a smart mask generator. Warp it a little, and hand-paint it with a stencil.
I find adding this layer really helps a lot in the engine. It makes the lighting POP more.
I add a Perlin noise to the height map to make the lighting more interesting.
A Passthrough layer (for all channels) + an Anchor Point. This works as a universal “get whatever channel below this,” which I can reuse in the above layers. I can use any channel below this layer.
Darker Tip 01
I add this layer to make the color variation more interesting. I start with a thickness map again. I put it inside a grayscale conversion fill layer so I have the levels built-in.
Then I subtract it with the GET base color anchor point. This results in a more interesting mask compared to just a simple gradient. However, instead of just using a random noise, I utilize the underlying layers below.
Similar to using a normal map to add more details to the roughness map when texturing a human face.
Darker Tip 02
Same concept, but I wanted a bigger falloff, with more of those nice wood subtractions.
Besides the above layers, I added an overall layer (covering the metal too) which consists of a few dust layers and an AO layer.
I copy these overall layers into all other texture sets too.
Generally, the layers for the Butt are the same as the stock. The difference is how I made the Base Material, which is made from multiple plywood layers pressed together with glue. For this, I was inspired by this article “SKS: Hard-Surface Texturing in Weapons Art (80.lv).”
Below is a breakdown of my plywood layers.
I made an empty layer and filled it in with the mask I needed for the plywood layers. I used the warp projection to project the layering effect from the top. For the fill, I used the Tile Generator so that I could use the checker mask.
For the input image, I used Gradient Linear 2, so that I have some soft edges. This is important so that I can get the AddSub breakup later on (2nd pic).
For the input image, I used Gradient Linear 2, so that I have some soft edges. This is important so that I can use that as a layer to AddSub to a Noise. This is the best way I’ve found to break up the edges sharply, without blurring the edges.
Wood Base Material
For the base material, I use the same wood texture as the stock above.
I then set it up with the anchor point mask made above. While setting it up, I make sure to look at references closely to match the wood direction/placement, wood scale, and where it is placed aesthetically.
For both horizontal and vertical wood direction, I have 2 fill layers with different offsets to prevent repetition between the layers. I simply copy the tile generator from the AP and use that as a subtract, while modifying the fill properties. You can see it in the layers H1, H2, V1, V2.
Additionally, I added an extra layer of normal by wood grain on top to break up the highlight even more. A layer of varnish on top is used to control the roughness overall value and overall color look and feel.
This part of the gun is the one that I used stencil the most.
Below are also closeups of the albedo of the stencils/damages. I hand-painted some of the more specific damages from the locking mechanism (metal part) to the wood.
Same treatment as the stock, I added overall dust and AO layers.
Body (Metal) Base
The base metal for this gun. The other black metal part is a variation of these materials.
I added tons of height maps on top of it. Here are some notable ones.
The below images include, Anisotropic noise, warped, multiplied by noise, and slope blurred. This is the main height map.
BnW Spots 3, to add some height variations
Besides those two, I added some Perlin noise, white noise (big-medium-small), and some very thin fine noise on top.
Grey Metallic Value
So, this material is a metal oxide. I set the metallic value around 0.5 since in my mind, the metal was worn out and lost its black coating over time, so it’s not 100% non-metallic.
I asked this nice fellow, Abderrezak Bouhedda, in my comment section, who is a Senior Material Artist. And he seems to agree too.
As another point of reference, I also bought this GP25 SPP project for reference. I stole some of his noise too, particularly his metal_surface_07 and flakes normal map.
I saw this in the GP25 SPP File; he added an RGB Overlay with different noises inside. Seems quite nice to add some color variations. R, G, B respectively.
On top of that, I added a color balance layer on top of it to have a bit more color on the otherwise black metal. I chose the color based on the reference I saw.
A pass for things that appear only in this part. In this case, the scratches from the turnstile.
The initial mask is using Grunge Wipe Brushed, which was manually masked out, leveled, and blurred.
I copied this folder quite liberally to other parts of the gun.
- Red – Base
- Orange – Base Color Change
- Yellow – Base Extra Adjustment
- Green (2) – Handpaint
- Blue – Procedural Layer On top
- Violet – Adjustment Layers / Procedural Operation
I’m not going through all the layers, but I wanted to show some noteworthy ones:
I set the metallic for this as 1 and a little’ bit of negative height. Some grunges on top of it too. This acts as the metal below it.
A procedural layer to break up the perfectly straight edges. It looks especially nice during a close-up when the lighting hits.
So far, the layers seem to be adding details on a medium or small scale. I added this to break up the lighting/form in a major way. Added big shapes in the form of fingerprints as roughness variation.
Same treatment as the stock, I added an overall dust and AO layers. Plus, an extra Grime/Oil layer mentioned above.
I sharpened the final image in Photoshop. Sharpen More for close-ups and Sharpen regular for zoomed-out scenes.
I could’ve done this in the Unreal Engine, but I forgot to add the CVar in the Movie Render Queue. In the end, I’m glad I forgot about it since doing it in Photoshop gave me more control.
Thumbnail – I always loved making thumbnails for my projects. I always tried to make a custom 2000×2000 JPG for my thumbnail.
Initially, I tried to make a Vogue magazine cover-style thumbnail – hence the white background –, but I found the font distracting.
Dark BG vs Light BG – I can’t decide between a dark background or a light background. In the end, I post both on Artstation. I feel like the wood pops more in the Light BG, but in the dark BG, the metal wear and tear pops more.
I wanted to do a realistic environment render with this gun in the future probably.
I am about 80% happy with the texturing results. It could’ve had MUCH, MUCH more TLC (tender, love, and care). But my full-time job is going into high gear soon, and I just want to get this project done ASAP so I can focus on my full-time job.
I still have plans to do other plasticity-related projects after this. I will focus more on nurbs/organic shapes. Perhaps a more sci-fi gun.
I wanted to share some messy/janky stuff in this project too. A behind-the-scenes look at what’s behind the final render.
In the below images,
Ugly texture. Since this part is not very visible in the engine, I didn’t realize it looked like this until 1 week after publication.
Most of my UVs looked like this, bad topology all around, texture stretching on the wood.