Tin Toy Pistol: Modeling and Texturing Workflows for 3D Prop

Tin Toy Pistol: Modeling and Texturing Workflows for 3D Prop

Shihab Uddin Alvi talked in detail about his hard-surface project Tin Toy Pistol: low and high poly, texturing in Substance Painter, imperfections, rust, and more.


Hi, my name is Shihab Uddin Alvi and I am an Environment & Prop Artist from Dhaka, Bangladesh. I have completed my 4-year bachelor's degree in Computer Science. 

I am a self-taught artist and used to do art as my hobby. In the beginning, I was into graphic design. Later in 2013, I enrolled in a 3-month “3D Fundamentals” course where I learned the basics, and that was my first step into 3D. Since then I continue to explore and learn to develop my skills for production works.

I have started working professionally in 2016 and completed my bachelor's degree in 2017. Currently, I am working as a Senior Contract Artist at Dekogon. During the job I contributed to the VR project “Motive I.O” and some AAA titles but all of them under NDA at this moment.

I am still exploring the other aspects of Game Art but I really enjoy doing hard-surface stuff and that brought me to environment and prop art.

1 of 3

Tin Toy Pistol: Idea

My target was to create something simple yet interesting, so I was looking for images on Google and found the toy gun photo, thanks to the photographer Joe Haupt. The retro and nostalgic feeling of the concept seemed very appealing to me so I instantly decided to make it.

I started the project by gathering more references and studying them. For searching reference, I used Google’s image search engine which helped me to find relevant images based on my uploaded image. After gathering references, I created a Pureref board and grouped them based on my need. To understand the functionality more I often search for videos. Among the images, I liked the metallic version more and decided to make it for my project.

Modeling Stage


My workflow started with the blockout then moved to the low poly. I followed this process so that I could easily work on my model until I was happy with the overall shape and proportion before moving to high poly. I used 3ds Max for modeling.

At first, I imported a suitable image and used it as my image plane. Since it wasn’t a blueprint I couldn’t blindly follow the image for modeling. Fortunately, I found the actual dimension of the pistol so I quickly made a bounding box following the dimension. Then I started making the basic blockout model. Initially, I started with a cube and cylinder, then manipulated them to get the desired shape.

If we examine the reference we can see the pistol is almost symmetrical except for a few identical pieces, so for efficiency, I made one side first, then duplicated the same mesh on the other side. It also helped me to make any changes at that stage without working on both sides.

Low Poly

Step by step, I continued to add details. For modeling the muzzle, I took a cylinder and with the help of the cut tool, I cut the main body according to the cylinder with vertex snapping on. As I didn’t need the cylinder anymore, I deleted it. With the help of extrude and inset tools, I modeled the muzzle. Since it’s a toy gun, instead of making the inside pipe I capped it to fake the hole in the texturing phase.

All of the details were done by common modeling methods without depending much on plugins. For the attached bolt, I took a cube and applied turbosmooth with 2 iterations to convert it to a sphere, then applied spherify modifier to make sure it’s fully round. Deleted the half of the sphere and applied the FFD modifier to get the final shape. Finally, merged it with the main body. That way, I could get a nice shading of the bolt when subdivided as well as UV without distortion. The process is illustrated below:
The grip of this pistol was really interesting. I decided not to model that cross pattern but to make it in the texturing phase so I would have more control over it. Modeling the handle detail was pretty straight forward, like with the muzzle. I used the cut tool to get the inner shape on the face but this time, I used bevel instead of extrude because I wanted the extrusion to be a bit curvy around the edges. Then I repeated the same technique to get the small shape.

I continuously worked and checked the reference image for the overall shape. When I was happy with the result, I started making the identical parts and broke the symmetry.

Basic primitives like box, cylinder, and plane were used to create unique objects. For that ring, I used a spline to make the shape and turned on “Enable in Viewport” in the rendering option to automatically generate a cylindrical shape following the path I created.

It’s important to keep in mind that in reality there are a lot of imperfections rather than straight lines or solid curves thus, I intentionally applied those on my model a bit rotated, bent, etc. but not too much.

1 of 2
Lastly, I got back to the main body and applied chamfer on the outer edges to get that nice rounding edge. Unfortunately, the chamfering doesn't work well on every area so I had to manually fix those areas like the curve on the handle and the front part of the barrel. My mindset while creating the low poly was to keep the geo higher to get a nice silhouette overall. Besides, it’s my practice work so I didn’t want to spend much time on organizing the edges for more optimization. After adding the rest of the details I got my low poly which was ready for high poly modeling.
1 of 2

High Poly

For the small unique pieces, I used Subdivision modeling technique to get the highpoly. Since the main body was a bit complex, I decided to move into ZBrush for high poly to save time. Before moving into ZBrush I applied smoothing groups properly and unwrapped the low poly based on the smoothing groups. This technique was nicely explained in Simon Fuchs’s Handgun Tutorial. I got the main body high poly in ZBrush following Simon’s technique, decimated the mesh, and exported to 3ds max. For your reference, I have attached images of the high poly below:

1 of 2


For the next step, I got back to my low poly. Since I didn’t modify/add any extra detail in high poly stage that could affect the low poly silhouette, I moved to unwrapping. Merged all the split objects of my low poly into one, unwrapped it, and applied new smoothing groups based on UV shells. Textools is a very handy plugin for doing that operation. I used another plugin Elements to Objects to split the objects that I merged before unwrapping. I got my low poly ready, then I renamed my high poly and low poly objects accordingly and applied materials properly. After all those steps done correctly, my model was ready for baking in Marmoset.


In Marmoset, I added a new baker and quickly loaded my both low poly and high poly models. The rest of the setup is given below:

I baked my maps at 4k resolution and used Marmoset for baking Normal, AO, and Material ID maps only. I used Substance Painter for baking the rest of the maps like Curvature, Position, World Space Normal, and Thickness maps. With those maps ready I jumped into texturing.
1 of 4

Texturing Stage

In Painter, I imported my model and baked maps, then set the metal-roughness preset.

While checking the reference, I tried to separate the details that were easily noticed at first glance. The first impression was that the pistol had been used roughly. In order to recreate that feel of the base metal, I took Substance's Aluminium material as my base material and adjusted the roughness to match the used feeling. After that, I added the “MatFinish Rough” filter. Then, I reduced the brush intensity to 0.1 and scale to 1 because I didn't want that effect to be too strong. That filter quickly added a very nice used feel to the overall metal and broke the boring look of plain metal.

To bring a bit of variation in albedo, I added slight yellowish discoloration that helped me to illustrate the fact that the pistol had been used for a long time. I used 3 fill layers to establish the discoloration and changed the blending mode to multiply. Next, I used generators like curvature, mg-dirt, and metal edge wear but I tweaked those to get a soft transition. On top of that, I added paint layers to erase the areas I didn’t want. I tend to use soft brushes to erase or paint such details.

For the unique parts like the trigger, ring, etc. I tried to mimic a more used metal feel. To achieve that, I pushed the base metal albedo value to a bit darker. We can see that those values are a bit out of the PBR range but I felt it was okay to break the rules sometimes to achieve the desired look.

To fake the holes, I used albedo, roughness, and AO channel on a fill layer. I pushed the albedo and AO to the darkest value and increased the roughness value to 1.

At that stage, I exported my textures to Marmoset Toolbag and tested with very decent lighting to match the look I was targeting.

Imperfections & Details

If we look at the metal surface, it’s mostly the subtle scratches and very soft dirt on less used areas. For scratches and smudges, I used Surface Imperfections textures. Scratch textures from that pack were used to create the scratches but I tweaked them. To do that, I adjusted the level to modify the scratch intensity. I aimed for subtle and small scratches with very minimum height information. Naturally, the most exposed parts got the most scratches that’s why I also added another layer but applied the scratches on the curvature area only by using the smart mask “Dust Soft Edges”.

The trigger has a very unique directional scratch which is mostly caused by friction. So, I painted those scratches with a “Sharp line” brush. With that brush, I also applied some big scratches on the body but didn’t go crazy because big damages don't occur naturally except for some events.

I was happy with my scratch details so I moved on adding dirt and logically applied soft dirts on occluded areas but not too heavy. At that point, I felt I needed a little strong and big dirt to tell stories and balance between macro and micro details. Texturing Essentials - Alpha pack has some great alphas with interesting shapes which really helped me to push my macro details. I was more careful while applying macro details because it’s a bit risky but with proper application, it can undoubtedly sell the details.

Similarly, I added smudge details but to enhance the feel, I applied smudge brush to smudge a few areas on top of the barrel. That way it felt like someone wiped the surface with fingers. Below, I have attached a shot of scratch, smudge, and dirt roughness:

1 of 2


As I already have mentioned before, my plan was to create the pattern in the texturing phase so I made an alpha in Photoshop and imported it into Painter. Then, I took a fill layer and applied the alpha as a mask with only height channel on. Later, I adjusted the level to change the thickness of my pattern. That way, I had more control over the pattern. For creating the used feel I added a paint layer and erased the most used areas like the bottom and very top of the handle.

To make those stones feel more grounded I added a paint layer and applied a normal stamp. The detail was a bit sharp so I added a blur filter to soften it. That detail helped to sell the feeling that those stones were actually engraved to the body.


Even though in the reference we can’t see much rust, to create visual interest I utilized my artistic freedom to push it more. I didn’t want to go crazy, otherwise, it would feel abandoned and non-functional. Initially, I took a fill layer and step-by-step generated base rust with the help of cloud textures, dirt generator, and levels. Usually, rust grows in clusters rather than scattered here and there. So to resemble such a selective feel, I added paint on the next. That time I wanted the rust to be applied only where I painted rather than a fully generator-based result. The process was moving the paint layer below my target generator and setting the generator blending mode to multiply. That way, the generator only applied to the area where I painted on my paint layer. I duplicated the rust layer and changed the blending mode to color burn, then manually painted where I wanted to emphasize my previous rust. Color burn mode was too strong and saturated, so I lowered the opacity of both layers to 50. Here's an image to explain the layer setup better:


Branding is always a crucial part and I wanted to recreate the sticker on my own. I used Photoshop to create the “Atomic Blast” sticker which was used in Painter for projection. Substance's projection tool is amazing and I stamped my sticker using that tool. To get the roughness and height from my bitmap I used a filter called Channel Mapper. There’s also a very nice tutorial on how to use the filter:

When I had my sticker ready, I moved on to creating a shabby look. With the eraser tool, I erased a few parts of the sticker and made an anchor point. The reason behind using the anchor point is to easily add dirt and other details following the sticker mask. I have shared my channel mapping and anchor point setup below:
My target was to put a bit of dirt and torn sticker look. For a gummy and dirty look around the edges, I used a fill layer and adjusted the color and roughness accordingly. I used another fill layer with a bit brighter color value, higher roughness and height information to produce the paper texture. Finally, I applied the torn paper texture only on the area where I erased my sticker.

After finishing the textures, I exported them at 2k resolution. For roughness, metalness, and AO textures I used individual R, G, B channels to pack them into one where roughness used the red channel, metalness used the green channel, and AO used the blue channel.


For the final presentation, I always experiment with my model to find the best angle and proper lighting. I opened Marmoset Toolbag, then imported the model and textures. In this project, I added a curvy ground to get a nice floor shadow. I started by picking the HDRI. I chose an HDRI from the 50+ High Quality Studio HDRI pack. Once I was happy with my HDRI I focused on setting the camera angle. When I got my desired angle I started adding highlights by clicking and dragging over my HDRI. As I already set up my camera, it was easy to find good lighting. I tried to make sure the edges of the pistol were properly highlighted. Later, I added a few indirect lights to pop up the roughness details.

I maintained different files for different angles so that I could get flexibility without making my file too heavy. In the whole process, I only used Omni and Directional lights. When I found good composition with good lighting I rendered those images and imported them in Photoshop for last minor tweaks like brightness, contrast, and sharpness.

Learning Substance Painter

My Substance Painter journey started with ChamferZone's Ultimate Weapon Tutorial which really helped me to start with the basics like Layers, Smart masks, Generators, Filters, and so on.

Understanding anchor points is very helpful to work with custom masks. To discover the possibility of anchor points, you can check Mario Dalla Bona’s Peeling paint smart material and this tutorial:

I would like to recommend a few more tutorials that can help you to dive deeper into the Texturing process like Handgun for Video games and Simon Fuchs's Gumroad tutorials.

Watching texture breakdown sometimes helps to find new techniques. Studying complex ready materials, creating something from references, and experimenting with the tools can help a lot to understand the program better. I would recommend creating some set of props with complexity variation and using them for all kinds of experiments in Painter.


I am really pleased to share the breakdown with you, thank you for reading this. If you have any question or query you can reach me through my email alvi.dcc@gmail.com as well as the following pages:

Shihab Uddin Alvi, Environment & Prop Artist

Interview conducted by Arti Sergeev

Keep reading

You may find this article interesting

Join discussion

Comments 0

    You might also like

    We need your consent

    We use cookies on this website to make your browsing experience better. By using the site you agree to our use of cookies.Learn more