This is a process for creating hardsurface game assets, automating the highpoly and lowpoly stages as much as possible. Using this technique the artist can spend more time focusing on form design, less time on tedious operations relating to subdivision or optimization. I've been doing this for a couple weeks and received enough questions that it seemed worth writing down and sharing.
Special thanks to Robert Deleanu, Ethan Hiley, Pedro Amorim, and Azure Midsummer for providing many ideas and tips that went into this structure.I. Create meshes in 3ds Max as Proboolean objects.Any mesh in 3ds Max can be converted to a Proboolean object. While the mesh is selected, click the button in the Create > Geometry > Compound Objects panel:
You can also map this command to a hotkey or quad menu, which I recommend so that you don't have to flip through panels as much.
A Proboolean is an object that contains a list of meshes that are combined, in order, using standard boolean operations. These sub-meshes are referred to as "operands."
This is the Proboolean UI:
Every operand within a Proboolean remains live and editable. In
other words, the object itself is completely nondestructive.
You can
change the order of the operands, change their operation type, remove
them, re-insert them, and edit them even while they're in the
Proboolean.
By doing most of our modeling as Proboolean operations, revisions usually only affect a few operands, and don't require massive remodeling.
Here's an example of a relatively complex object made from a large number of boolean operands:
One thing to note - keep your curves dense at this stage. When using cylinders, use high segment counts. I often use 36 at minimum and 108 or 140 for extremely large cylinders. This will produce better results in Zbrush.
Later, when generating the lowpoly, we'll dial down these segment counts. That's easy to do because they remain live subobjects within the Proboolean.
II. Send the Proboolean object to Zbrush and Dynamesh it.Once the mesh is fully defined as a Proboolean object we can send it to Zbrush to automate the highpoly process.
One quick step first, though. Probooleans have a lot of concave n-gons, and these can be mistriangulated on export or import. It's a good idea to quickly resolve the issue before sending to Zbrush.
There's a few ways to do that, but I recommend that you add the Turn to Poly modifier, set Limit Polygon Size to 4, and enable Keep Polygons Convex.
Once this is done, export the object as an .OBJ and open Zbrush. Choose one of the default Dynamesh projects from the start screen.
Click the Tool, then Import, and navigate to your .OBJ.
Click the Geometry tab, then the Dynamesh tab. Pick a resolution - what you need will depend on your object. You'll find out quickly if you picked too low, and it's easy to undo the Dynamesh process, so I suggest trial by error until you get a feel for what different objects need. I used 256 here.
Note - you can get a plugin, Dynamesh Master, that improves this process. Several people have recommended it to me.
To apply the Dynamesh, hold CTRL and click-drag on empty screen space. If you're unfamiliar with it, yes - the Zbrush UI is bizarre.
Once you regain control, the object has been remeshed. Now go down to the Decimation panel and have a look at the polish options.
The Polish process has a toggle, activated by clicking on the icon to the right. It changes the effect of the process:
To actually apply the process, drag the slider out to some point along the bar. The further you drag it the stronger the effect will be. You can apply it multiple times. Play around with it, try to get the level of edge thickness you want.
And that's it for the highpoly. Now we just need to decimate it and bring it back to Max.
You can use any decimation tool you like. Personally what I do is import it into Max as-is, then apply the ProOptimizer modifier:
III. Generate LP by reducing operand segment counts and applying modifiers.>> Note - for this part I'm changing demo objects, only because I already had these images made for another thread. The same principles apply to any model made with this workflow.To generate the lowpoly we go back to our original Proboolean objects and duplicate them to a new layer in 3ds.
Go through each operand with an eye towards reducing geometric complexity. This is where the live, non-destructive nature of the Proboolean shines. You can click on any operand to select it, and then edit its parameters directly in the stack.
For cylinders, reduce segment counts. For tertiary details, detach and remove them entirely.
The main problems now are stray vertices, n-gons, and concave polygons.
We can solve these problems with a simple modifier stack - Vol.
Select to grab the verts, Vertex Weld to weld them, and Turn to Poly to
divide our n-gons into convex quads.
You can reduce this process to a single button press using this macro script:
macroScript QuickLowpolyStack
category:"Bolton Tools"
toolTip:"Quick Lowpoly Stack"
(
if (selection.count > 0) then
(
modPanel.addModToSelection (Vol__Select ()) ui:on
$.modifiers[#Vol__Select].level = 1
modPanel.addModToSelection (Vertex_Weld ()) ui:on
$.modifiers[#Vertex_Weld].threshold = 0.05
modPanel.addModToSelection (Turn_to_Poly ()) ui:on
$.modifiers[#Turn_to_Poly].selectionConversion = 1
$.modifiers[#Turn_to_Poly].limitPolySize = on
$.modifiers[#Turn_to_Poly].keepConvex = on
modPanel.addModToSelection (Edit_Poly ()) ui:on
)
)
The only remaining issues left by this process are some triangles that are too long, too thin, too small, awkwardly placed, etc. For this reason I also put an Edit Poly modifier on tap of the stack, where we can make final, manual geo edits. If any revisions happen down the line, this is the only destructive part that we have to remove and re-make. Since it's just a modifier, everything underneath is still procedural - a Proboolean object with a few automated processes on top.
I hope this walkthrough proves useful to some, and if anyone has any tweaks or improvements of their own I invite you to share them. I'll be linking people here from now on when they ask about the process I'm using. For those of you finding this thread from the other direction, these are a few assets I slapped together with these methods:
Replies
Amazing demo though, really shows how it's possible for developers to rapidly develop models nowadays!
Great tut!
@edit
You should try use Dynamesh Master for that kind of work. You can set amount of polycount by hand. Really useful addon.
Nice presentation. Same can be achieved directly in Max by quadifying the boolean and turbosmoothing. Hope this isn't hi-jacking @Amsterdam Hilton Hotel but here's a few vids I did showing this technique in Max, one using turbosmooth and one using quad chamfer. Thought they might be useful to anyone interested in this stuff:
https://www.youtube.com/watch?v=upBfCUFDEmc
https://www.youtube.com/watch?v=FIiCMj_8u4o
Quadrify Mesh doesn't work well with intersecting complex curves. Quadchamfer doesn't either. It would be a struggle to produce, for example, a crank case or a car engine with either.
The Dynamesh method works on arbitrary geometry. The more complex the object the more time you'll likely save by using it.
These techniques are great though, really quick, and perfect for baking-purpose meshes. Vitaly Bulgarov made his name on booleans. Funny how they've made a come back in recent years considering most pepole avoided them like the plague in the past. Your example meshes are fantastic. Great work mate.
Anyway great stuff, thank you for sharing as this will be an invaluable time saver to many people
Thanks for posting! I think I'll give this a try at work.
Check out GoZ Plugin for 3DS Max. Blender has it and exports meshes by one click Zbrush <=> Blender.
Yep that about does it, been using it for the last 15 minutes and I don't think it can get faster than this haha.
The stuff for me with bro-boolean is that it doesn't keep UV's (or i didn't found where you can change that)...
I like to use this free tool : http://hocuspocus-studio.fr/tools/product/multimesher/
cause it keep UV and with the primitive you have pre-generated UV that could be more easy to stitch for the low-poly unwrapping phase...
I don't know if its usefull but it could be even faster ...
That way you could optimize the mesh or whatever else you need to do in one go too.
Think thats why people are more and more looking at Cad solutions like Moi or Fusion 360, these apps are made for booleans.
Nice write up thought
Have a good one.
Great, thank you for sharing!
Why decimate your high-poly?
(optimizing baking rendering time maybe?)
BIG THANKS
edit: maybe using masks in zbrush? so you can chamfer a part individually and then another one with a wider angle?
this method can be even more interesting combined with welding brush sculpts for this kind of pieces!
Yes, and keeping save time quick. I have autoback set to every 5 minutes and it gets to be a drag with too much geo in the scene.
Usually I just look at ZB as providing the "minimum" edge width. Any chamfers that need to be specifically larger I'll do with boolean subtractions.
You can also try polishing a small amount in ZB, setting a morph target, polishing more, and then brushing between the morph target and the more smoothed version. But the downside is this is manual work you'll have to redo if revisions happen.
Yes, this video got the Dynamesh craze going a couple years ago.
I want to point out that Dynamesh is only one component of this workflow. In my opinion, doing any modeling in ZB (or CAD, or...) is a mistake. It backfires once you get major revisions, and when you convert the asset into a game-ready model.
The point of using Probooleans is not to worry about topology for the highpoly (you really don't have to). What they offer is better revision capabilities and a way to generate a lowpoly without turning to time-consuming retopology tools.
Zbrush only provides the highpoly side for baking and nice edges.
With the circumstances you've said yes, dynamesh is basically adaptive topology and constantly changes based upon what resolution you chose, or if you decide ctrl+drag as it updates to better distribute polygons. This means it usually doesn't have any form of lower subdivision and is highly destructive.
So by bridging the gap between max and zbrush with their weaknesses, you are providing something much stronger.
Max provides the faster hard surface modeling, booleans with stack history and topology that can be used, and zbrush provides the nice edge highlights.
I'm sure someone will mention mesh fusion, sure it works. But only provides a highpoly result in the end game, as the meshes it leaves you with is almost as bad as using just Zbrush exclusively.
The advantage of a modifier stack is to reify operations as non-destructive, parametric items. Any time you want to change things modifiers are there to help you. That can be fixing inaccuracies, incorporating feedback, AD revisions, etc.
I don't do "creative" work. I make game assets based on concepts and references. Modifiers are an objectively better way to do the job. They're more editable and less destructive.
Oic, thanks again for the reply. It clears up a lot of my questions regarding about the boolean and dynamesh workflow.
@Amsterdam Hilton Hotel
Thanks again for willing to share such an awesome technique to the public, it is really an eye-opening for a newbie like me.
http://imgur.com/gS3nqrj
http://blenderartists.org/forum/showthread.php?336498-BoolTool-0-2