WWII Frequency Meter: Hard-Surface Modeling in Maya and ZBrush

WWII Frequency Meter: Hard-Surface Modeling in Maya and ZBrush

Bobby Lazarevski did a breakdown of his hard-surface prop WWII Frequency Meter: Maya to ZBrush workflow, texturing in Substance Painter, and scene setup in Marmoset Toolbag.

We've noticed Bobby's amazing work on our 80 Level RFP platform. Join the service and submit your portfolio to help us notice and feature you too.


Hello! My name is Boban Lazarevski and I'm a Prop/Environment Artist from Skopje, North Macedonia.

My first introduction to 3D was back in 2017 and I’ve been actively working on my career since then. Ever since I was very young I was always playing video games and had a thing for art. I started studying Graphic Design at FON University where I received a Bachelor of Arts degree and started to work as a freelance graphic designer for various companies/clients. But around 2017, I was introduced to 3D and instantly fell in love with it, so, slowly but surely my passion for 3D overshadowed the 2D work I did.

I decided to pursue a career in video games and stumbled upon a local academy called M3DS Academy for 3D and Game Design where I graduated as a character artist but as time went by I found my true passion that in making props/environments for games. When I finished the academy I knew deep down that there is so much more to learn so I dedicated myself to learning all about the pipeline and started working on a couple of freelance projects. I’m currently working on my portfolio to hopefully land a job in the games industry.

1 of 5

WWII Frequency Meter: About The Project

The main focus of this project was to get better into all aspects of the pipeline and really push myself to achieve realism through careful observation of how materials react in real life. I chose to make this model because I’m a huge fan of WW memorabilia so this was a unique and fun project to work on. 

Reference Gathering

For references, I like searching mostly eBay and PicClick because you can find a lot of images from different angles/closeups of a particular object that can aid you in the process. For this project, I spent some time watching Youtube videos to better understand how the frequency meter operates and how all its mechanisms are used. After spending several hours browsing for refs I decided to go with a mixture of slightly different looking frequency meters because I wanted to make the model feel a bit more unique. Then imported them into PureRef, labeled, and organized them.

Modeling – General Tips

Throughout my journey I learned two key things about modeling hard surface: don’t ever micro-bevel your edges and always set an angle of the inside of a mesh when you’re doing holes, bolts, etc. That way, the normal map reacts better when it catches light, especially if the mesh is seen from a distance. Let me show you two examples.

As you can see the left mesh is micro-beveled while the other one has more consistent and slightly exaggerated edges. This is done on purpose because when you view the model from afar (let's say in a first/third-person game), the left mesh would lose all its detail, while the other one will maintain more consistent edges.

Here is a picture from Polycount that explains this further:

The other example is shown below, where the bolt has a slight angle instead of a 90-degree hole. When you bake, the light will be caught better. There is a blog from Ohle Mathiebe that explains this in more detail. You can check the blog post here.

Modeling Workflow and Tools

For the modeling workflow, I highly recommend watching Simon Fuchs's Military Radio Tutorial. It's one of the best tutorials out there if you want to learn how to use Maya and ZBrush combo for polishing edges, using polygroups cleverly, doing complex boolean operations, etc.

In the blockout process, I usually start with a mid to high poly mesh where I focus on the big to small shapes, the overall design language that's present, and the dimensions of course. I also tend to keep a backup version of the blockout, which, with some modifications and optimization, serves as my low poly later down the line. 

My workflow consists of a mix between boolean use and subd modeling, it really depends on the shape. I use a couple of scripts and tools that aid me in the process. Here are my most used ones: 

I also use other commands and scripts that you can find in Simon Fuchs's tutorial which makes life easier. The example below is just the overall workflow I use for almost every mesh. I will show you an in-depth look at my process below.
So basically what I do is I model the base shape. In this example, I decided to clip one mesh into another because I know I want to dynamesh it afterward in ZBrush. This will also give me a better curvature map to work with later down the line. After modeling the shape in Maya, I run a simple script that shows me all the highlighted hard edges that I need. Then I go to UV > Camera Based and run a command that cuts the shells according to your hard edges. Then I open a tool that basically sends your Maya mesh to ZBrush and vice versa, with a click of a button, easy-peasy.

Back in ZBrush, I use a similar tool that imports that OBJ. Then the first thing I do is go to Polygroups > Auto Groups With UV, which gives me the polygroups that I need for my next step.

After that, I usually split and divide the subtools a couple of times or in this case, I use Polish By Features with the little circle off.

Then I turn on the MaskByFeature option that masks all the hard edges and start using the GrowMask, SharpenMask, and BlurMask to get the desired effect. When I get the mask I want I start using the Polish feature with the little circle on.

After I finish polishing, I just decimate the mesh and send it back to Maya. And lastly, I just smooth the surface since ZBrush doesn’t read normals.

This is usually how I create almost all of the small buttons, knobs, etc. The bigger shapes are done with traditional subD modeling. As you can see most of my workflow consists of tools and scripts that greatly speeds up my workflow.

For the diamond pattern, I made a simple diamond-shaped mesh, duplicated it, and ran a bend deformer to wrap around the bolt, the rest is done in ZBrush.

Low Poly & Unwrapping

My process with the low poly is mostly straightforward, where I use my mid/high poly blackout and just start optimizing it while still maintaining a good silhouette. The focus here was not on making it a fully game ready asset.

After finishing with the low poly, I start unwrapping the model. It's really important that you have UVs as straight as possible because you’ll get aliased or jagged edges when you bake your maps. After I layout my UVs and set the texel density, I decided to use biasing where I give more resolution to smaller parts thus breaking a uniform TD. For my final layout, I set a high number of packing iterations which gives me a better layout to work with, and also, set my padding to be 16 by 2, which is the recommended amount of padding for a 2k pack. Here is a useful article from Polycount about edge padding.


The baking was pretty straightforward: I organized and named all my LP and HP meshes with the correct suffixes, made material IDs and I was ready to go. The baking was done in Marmoset Toolbag, where I created different baking groups to avoid artifacts when baking. The reason I use Marmoset is that you can paint skews and correct artifacts in real-time which saves a lot of time. Afterwards, I decided to explode the mesh because I wanted to have more control while texturing all the pieces.


The texturing process is nothing fancy. I use Substance Painter and I like to start with simple fill layers, then mix up smart masks and grunge maps until I get something interesting going on, then focus on painting it together to get believable surface detail and imperfections. Most of my time is spent in the roughness channel which is the most important in my opinion. I think the more time you spend adding details and storytelling bits to your model, the better it will look. Always try to have some story to tell with your prop. What type of environment has it been exposed to? Is it maintained or not? These are questions that you should keep in mind while texturing which can really push your prop to the next level. 

It's also important that your albedo map has subtle color variations in it, especially in case of old paint like this that's going to pick up lots of staining from all kinds of things, sun bleaching, oil residue, grease, etc. get discolored over time. The key to great looking textures is in subtleties.

For the metal and rust wear, I used simple smart materials and just painted them over. An important part here is to use harsh alphas otherwise the surface will look unnatural. Don't be afraid to lower your opacity on your brushes/alphas when doing wear, because lots of metal/coating wear happens subtly.

The papers were made with a mix of white and yellow color shades and grunge maps to mimic an aged look. The blood detail was a simple fill layer with stains texture tiled over, then painted.

Wood Peeling Effect

The peeling effect was done using anchor points and a couple of tricks. What I did was add a wood material with a black mask and a blur slope filter so I can regulate the amount of peeling intensity, and then add an anchor point.

Then I created a new fill layer and bumped the height channel, referred the anchor point, and added two blur filters with 0.2 and 1.5 intensity to get a larger peeling effect around. I added another fill with the same anchor point but this time on Subtract. After that, I added a grunge map, put the mode to Multiply, and switched from UV to Tri Planar Projection.

This way, the grunge map helps you to get random peeling shapes.

The black internal part was pretty straightforward because I wanted it to be more maintained than the rest of the model, so the focus here was to get correct values of the materials while having minimum wear.

Text & Plates

Adding text, plates, and designs was my favorite part because I got to use Illustrator. For me, it's better to use Illustrator than Photoshop for making alphas because of its vector capabilities. For the circuit board, I was lucky enough to find a manual online for the frequency meters used in WW2, which helped me to extract the exact alpha I needed using ImageTrace. It's a pretty powerful tool inside of Illustrator that converts any raster image to vector.


After I was done with the texturing process it was time to move on my animation in Maya. I animated specific groups and when finished, I just highlighted everything I needed from the channel box and baked my keyframes using Bake Simulation in Maya to ensure I have a smoother animation between frames. Then just exported the mesh with Game Exporter and was ready to go.


Let's move onto my final and most important step, presentation. I decided to model a quick plane that would serve as a backdrop back in Marmoset Toolbag and started from there. The key to great lighting for your props is not to use a lot of lights. I used a three-point lighting setup for my presentation, two more lights from the HDRI itself, and with a few tweaks, I got the desired result. The focus was to make the renders as realistic as I can, and with a simple lighting setup and tweaking, everything came to place.

For the camera, I used a setting of 7 because I like to use orthographic FOV for my props. I highly recommend to play with the FOV setting in Toolbag, it can give you some great results. I also used ACES profile as my post effect and added a bit of exposure. When I was happy with how everything looked I cranked the settings for my final renders.

Final Words

Starting a project like this and getting to the finish line was overwhelming, but getting out of your comfort zone is one of the best ways to progress as an artist. Set your goals, keep going, and ask for feedback whenever possible.

I hope you found this breakdown informative. Feel free to contact me anytime through my pages. Cheers!

Boban Lazarevski, Prop/Environment 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