Hard Surface Modeling, Booleans & ZBrush

Diary of an Indie Game Developer: Chapter 7

Jason Tuttle
5 min readFeb 22, 2018

Hard surface modeling has always been one of my biggest weaknesses as a game developer. For whatever reason, it just never clicked with me. Unfortunately, the game I’m currently making involves a LOT of hard surface modeling, so I’ve been forced to confront my weakness head on.

I started off trying to tackle this problem the usual way: Google. I searched for any tips, tricks, and workflow tutorials that might help improve my hard surface skills. As you might expect, there’s a lot out there on this subject. Unfortunately, much of what I read and watched didn’t really help. I still wasn’t really “getting” hard surface.

What makes hard surface so difficult for me? Well, I think it all stems from my perception that hard surface modeling is needlessly inefficient and time consuming.

Why does it seem that way?

Well, first lets take a step back and look at modeling game assets in general. Big Picture. For any asset you want to put in a game, you generally need 2 models: A high poly version, and a low poly version. Most people I know, typically start by modeling the high poly version.

For organic shapes, ZBrush is typically the weapon of choice for the high poly work. As an added bonus, ZBrush has some nice built in tools (“Decimation Master” and “ZRemesher”) that can help you derive your low poly model directly from your high poly. Sometimes, these tools do pretty much all the work for you. You just click a few buttons and “Boom” you’ve got a low poly version of your asset for free. Most of the time, there is some manual cleanup that you have to do at the end, but it’s pretty amazing how much of the low poly work these automated tools can do for you.

For hard surface assets however, there’s no free lunch. Decimation Master and ZRemesher don’t work at all well on hard surface shapes. Bummer. So what do you do? Typically, you hand retopologize your high poly model using something like Maya’s “Quad Draw” tool. Unfortunately, hand work like this takes a looooooooooooong time, and as I’ve said before, when working as a lone gun indie game developer, time is by far, your most valuable resource. Every minute counts.

Maybe that’s been the crux of the problem for me all along: The idea that you had to model your game assets twice, from scratch, just didn’t seem right. So inefficient. So terribly time consuming. There just had to be a better way!

So, I kept scouring the interwebs looking for a better way, until one day I came across this thread on polycount.com’s forum:

The thread is currently 6 pages long, and I gotta admit, I had to read through all 6 pages two or three times before it really started to make sense, but when it did, it was a total “Eureka!” moment. This was exactly the solution I was looking for.

So, if you’re like me, and you find hard surface modeling “challenging”, I’m going to try to break the technique down for you here. Hopefully then, you won’t have to read those 6 pages over and over again trying to understand what they’re talking about. I do however, want to give full and proper credit to the author of that original Polycount post. His name is Ben Bolton. His Polycount forum name is “Amsterdam Hilton Hotel”, and while he doesn’t know it, he’s been a total life saver.

Ben’s post involved working in 3ds Max, but I use Maya, and the technique totally works in Maya too. The key is booleans. What?!? I know, booleans, especially Maya booleans, have sucked for a very long time. They’ve been super buggy in Maya and have produced pretty much unusable geo, but trust me, they work now. The other key to this workflow is being able to work with booleans non-destructively. Out of the box, Maya doesn’t work that way, but there are a few scripts and plugins out there that can help. I’ve tried many of them, and in my opinion, the best by far is Mainframe North’s “Bool”:

Here’s a brief overview of how Bool works:

So with Maya and Bool in hand, here’s what you do. Unlike starting on high poly organic shapes in ZBrush, you start by building your low poly hard surface model first, using a non-destructive boolean workflow as much as possible. Try to never “Delete History” on any of the primitives you make in Maya. By keeping your history and using a non-destructive boolean workflow, you can easily revise your model over and over. What’s more, working this way makes it possible to derive your high poly model from your low poly almost for free! How?!? ZBrush.

When you’ve finished your low poly, because you’ve kept the history on all your boolean primatives, you just up the resolution on all of them (add subdivisions to spheres, cylinders, etc.) and save off a copy. You then triangulate any ngons and take this quasi high poly copy of your model into Zbrush. Why? Because low poly models don’t usually have nice soft edges. If they did, they wouldn’t be very “low” poly. You need soft edges on your high poly for baking purposes though, and that’s where ZBrush comes in. Once you’ve got your quasi high poly model in ZBrush, you just “Dynamesh” it. Then, you run a few of the “Polish” operations in Zbrush on the model, and “Presto!” you’ve got a finished high poly model, almost for free.

Non-destructive boolean workflow
Dynameshed and polished final high poly

Back in Maya, “Triangulate” any ngons on your low poly and then “Merge Verts”, use the “Target Weld” tool, etc. to cleanup any bad topology on your low poly and you’re good to go!

I’ve found this workflow to be fast, flexible, and very efficient. I used to hate hard surface work, but this workflow really makes it a lot of fun!

P.S. This is by far the best hard surface workflow I’ve been able to find. That said, I’m always on the lookout for a better way of doing things, so if anyone knows of a better way to approach hard surface modeling, please let me know! Thanks!!

--

--

Jason Tuttle

Indie Game Developer. Formerly, Associate Environment Artist at Santa Monica Studio working on God of War. In a previous life, I was the IT guy at TED.