In this breakdown I'm going to share my process, thoughts, tips and design decisions I've made while creating this walkie-talkie model. Please visit the original post for more renders.
This is not going to be a step-by-step tutorial, and I'm not going to teach you how to use CAD modelling, make game props, how to use a texturing software...etc. I assume you know how to use the software and know the basics of modelling, texturing and making game props.
1- Reference
Gathering reference is one of the most important steps of the project, and it should not be rushed or skipped. It is important to gather pictures from all angles and study the shape until it makes sense. This is a relatively simple blocky shape, but for complex objects (guns, engines...etc) try to also look at assembly guides and tutorials, and think of how it works mechanically.
Product renders are great, make sure to find pictures from all angles, but it's a good idea to find real pictures. Unboxing and review videos are a good resource.
For good Texture and material reference I often use Ebay and filter with the condition "For parts or not working". It doesn't have to be the exact same model, you can use anything for reference if you pay attention to the dirt, scratch and wear patterns.
This is based on the Baofeng UV-5RM, but it is a cheap walkie talkie, so I also looked up higher quality Motorola models for material and finish reference. The grains are much smaller and shallower, and the bevels are sharper, and I'm keeping that in mind.
I also decided to use a simpler monochrome LCD screen, because I feel like a screen is too modern and flashy, and (ironically enough) conveys a more amateur feel. Colored screens are also harder to read under bright sunlight, which makes them terrible for tactical situations. I love orange-backlit monochrome LCDs, so I'm going with that, but green/unlit are also options I was considering.
2- Modelling
Before modelling starts, you have to define your goal. For me it's going to be a high quality hero/cinematic prop, so I'm allowing myself more texture and polygons than I'd normally do for a normal prop. I am going to render it in Unreal Engine with Lumen. So my goal was ~10K triangles and one 4K PBR texture set.
2-1 Highpoly
I'm using CAD modelling with Plasticity for the highpoly, since topology (mostly) doesn't really matter when it's going to be baked to a lowpoly model anyway. it's very similar to Fusion360 and Solidworks.
I start with the big shapes, then boolean and cut and add details progressively.
Be careful of the following :
- Detailing and adding fillets too early
- Unnecessarily breaking symmetry before you've added all the symmetrical features
- Merging shapes before you're sure of their positioning
It's easy to undo most of these if needed, so there's no need to stress too much about it, but it's good to think in advance about it.
Here is the result
Note: I'm going to use the term "bevel" when I talk about a smooth transition between two surfaces, because that's the common term used in polygonal 3D modelling software (Maya, Blender, Max...etc), but CAD modelling tools usually refer to it as "fillet", which is the correct definition.
bevelling the small edges is not necessary, as it can be done in Blender or ZBrush automatically (method explained later).
Be care ful when exporting and examine the wireframe closely. The exported mesh uses custom normals, so it hides low density geometry really well, and you don't notice it until you try to smooth the edges and issues appear. It also breaks the silhouette shape, so keep an eye on that too.
Here is a comparison with the voxel edge smoothing, with low vs high density mesh exports. You can clearly see the faceting issues appearing when using a low density mesh.
The export settings vary depending on what software you're using and the scale of the object, but here are the settings I used in Plasticity for this specific project. I used "Max Width" to get rid of very long triangles and subdivide the shape more. This might be overkill in some cases, but if you have a computer that can work with it then there's no harm in doing it.
When imported to blender, apply scale and rotation, then add a voxel remesh modifier with a very high density (small voxel size) and enable "smooth shading". Then add a smooth modifier, set the factor to 1.000 and increase "repeat" until the edges are smooth enough.
There is no "one size fits all" configuration, it all depends on the size of your mesh and voxel remesh size, as well as how big you want the bevels to be.
It's a good idea to exaggerate the bevels to get better bake and in-game results, especially if you are going to use a small texture size (2K or less, for example)
You can see here how it gives small bevels (and even non-beveled edges) bigger bevels.
Remember the scale of your object. You may have infinite zoom in your 3D modelling and texturing tools, but think of the object in real life scale, its materials and how it's manufactured. Machined Aluminum has very small bevels,
2-2 Lowpoly
There is nothing important to note here, it's just regular retopology, and the usual tips apply:
- Try to avoid long edges
- prioritize silhouette
- avoid very small triangles, except if they're part of the silhouette or a sharp angle (notice the antenna and the knob)
- make sure it doesn't deviate too far from the original shape
Sometimes you'll need to add temporary subdivisions to bake circular shapes and curves, but the polygon budget was generous enough that I didn't need to use it here.
For UV unwrapping, I manually set seams where it makes sense, to minimize stretching as much as possible. I used UVPackMaster3 for packing, keeping objects of the same material (screen, keyboard, body, side buttons...etc) closer to each other, to reduce color bleeding if the model happens to be loaded with a texture that's very small in-game. It's not necessary here, but it's a habit I have from older projects with strict hardware limitations.
I temporarily applied a 2K checker texture on the model to inspect it visually and make sure everything is correct before I proceed.
I used weighted normals in some parts to make the shading as close as possible to the highpoly model. Otherwise if it deviates too much it could cause banding issues with the baked normal maps.
And finally I separated the highpoly and lowpoly into several parts : body, buttons, knob, antenna, and the clip on the back side. I used materials with different colors, which I later use as an ID map when texturing.
Note : The lowpoly model only has one material. The different materials are applined on the highpoly.
3- Texturing
3-1 Project Settings
Before I start texturing, I make sure I have the highest quality viewport settings my computer can handle.
From the shader settings, I set "Specular Quality" to "Very High (128spp)", and from the display settings I set anisotropic filtering to "very high (16spp) and mip-map bias to "2 - sharp".
I also like to set the environment alignment to "camera", so that the lighting follows the camera. This is especially helpful with the bottom parts, since they tend to look dark.
3-2 Base Materials
I used the ID maps with a color selection mask to isolate areas and set the very basic material for them. I made each "material" its own folder, to help me keep things simple and organized, and to only apply the color selection mask to the folder, and not to every layer.
The next step is to add some grain. I did this in two parts : small grain and large grain.
The small grain is subtractive, it "carves" the surface and adds small cavities, and also darkens the base color very slightly and adds roughness. The large grain is additive, it's adds bumps, and also lightens the base color a little bit. You can see the masks below (before the color selection mask, so it's applied on the entire model)
Don't worry too much about the repetitive pattern of the large grains, it's not visible when combined with the small grains. Result below.
I took a screenshot from orthographic top view and used it as a guide when creating the button decals. I used a square texture to keep things simple and to avoid worrying about aspect ratios and things like that when importing to Substance Painter. I exported the result as PNG with the reference removed.

I then imported it to Substance Painter and used Warp Projection and aligned it as much as possible.
3-3 Wear and Tear
For wear and tear, think of how the object is used. Here it's a tough plastic material with a lot of grain, so it doesn't have a lot of small scratches, but it has a few deep scratches around the edges that are more likely to come in contact with other surfaces.
There is also another type of wear that happens with repeated contact with human hands. The repeated contact and the grease from the fingers tends to smooth the surfaces down, removing the grain.
The way I set it up also removes some of the scratches, so I increased and reduce its strength accordingly, and as a result some high contact areas have less of it than you'd expect, because there will be more scratches there.
For the buttons, I created 3 layers : base, moddle, and text decals. I used anchor points to reference the same mask in different places with different filters. I used a level filter on the top layer (labels) to make it disappear faster, and made the middle layer disappear in a sharp manner (no transition).
I later added a layer of "smooth" dirt. It's just subtle enough to be noticeable under the right lighting conditions, without making it too obvious.

And finally a layer of more obvious cavity dirt. It's a mix of masks and manual painting, especially the small crevices and engravings that the smart mask didn't catch. I also removed some areas that are too "open" and easy to clean.
That's about it for the texturing.
For convenience, I created an empty layer with a mask and an anchor point, and used it as a global control for all the wear and tear effect. This allows me to get a clean and used version with just one parameter.
I exported the textures as PBR : BaseColor Metalli-roughness-AO (channel packed) and OpenGL Normals. I used 8-Bit + dithering for a balance between quality and performance.
Note : generally the more widespread format is Ao-R-M, but I use M-R-Ao for my game. Roughness is in the middle (Red) because the textures are compressed in a 5-6-5bit format in game engines, and roughness retains more detail that way, so technically there is no real difference between Ao-R-M and M-R-AO.
4- Rendering
I rendered the project in Unreal Engine. To get the best results, I enabled Lumen, disabled texture mip-mapping and used a 200% resolution with TSR.
I started with rim lights to separate the prop from the background, then added the key light that contributes the most to the prop. I added fill lights on the sides to light any dark areas without flattening the shape too much, and finally added a very bright and small light source for the reflections.
I added a variant with it sitting on a cutting mat, and with my robot character bemused by it.
That's about it. Thanks for reading, and I hope you found this helpful.
Don't hesitate to leave comments and ask questions.
- Abdou