Home Technical Talk

3ds Max/Zbrush: Proboolean + Dynamesh hardsurface workflow tutorial

134567
insane polycounter
Offline / Send Message
Amsterdam Hilton Hotel insane polycounter
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

  • Falkrum
    Offline / Send Message
    Falkrum polycounter lvl 2
    This is awesome, Ben! Big thank you for the tutorial!
  • yurid9
    Offline / Send Message
    yurid9 polycounter lvl 10
    Haven't given much thought of using Booleans inside Max. Thanks for sharing this. 
  • Justo
    Offline / Send Message
    Justo polycounter
    This should go to the front page in no time :) Thanks man
  • cookedpeanut
    Offline / Send Message
    cookedpeanut polycounter lvl 13
    I'm interested in what cases traditional modelling is still worth doing when you have methods like this which produce complex shapes within such a short space of time. I'm curious to hear what people's thoughts are on this, at what point would you switch back to traditionally modelling this kind of stuff?

    Amazing demo though, really shows how it's possible for developers to rapidly develop models nowadays!
  • Joopson
    Offline / Send Message
    Joopson quad damage
    I'm interested in what cases traditional modelling is still worth doing when you have methods like this which produce complex shapes within such a short space of time.
    There are definitely certain kinds of shapes (very complex non-regular shapes) that this sort of workflow probably wouldn't be ideal for. But for mechanical parts, and a million other types of objects, this saves a lot of time, and has opened my eyes (even if I can't make use of the "low" techique here, in Maya)
  • Veezen
    Offline / Send Message
    Veezen polycounter lvl 9
    Well, I'm pretty excited how you turn out ProBoolean to Polymesh (im not 3ds max user), this low poly looks really acceptable, and tweaks can be done really easily.
    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.
  • Falkrum
    Offline / Send Message
    Falkrum polycounter lvl 2
    Joopson said:
    if I can't make use of the "low" techique here, in Maya
    Why? Maya booleans works same way without any plugins! Just save the history and you good to go!
  • Justin Meisse
    Offline / Send Message
    Justin Meisse polycounter lvl 19
    Nice, this has me looking at all the weird extended primitives in a new light.  I made a bunch of mistakes but I whipped this up in a few minutes:

  • CodeferBlue
    Offline / Send Message
    CodeferBlue polycounter lvl 8
    Cool new way of working.
  • Racer445
    Offline / Send Message
    Racer445 polycounter lvl 12
    good shit my dude
  • Ootrick
    Offline / Send Message
    Ootrick polycounter lvl 6
    I kind of love you for this. 

  • Poinball
    Offline / Send Message
    Poinball polycounter lvl 6
    Nice Tuto !! +1
  • [Deleted User]
    Offline / Send Message
    [Deleted User] insane polycounter
    The user and all related content has been deleted.
  • Norron
    Offline / Send Message
    Norron polycounter lvl 13
    Man I wasn't sure the results that could be had doing this with Zbrush but that's pretty convincing. Thanks for the writeup man will have to try this myself.
  • musashidan
    Offline / Send Message
    musashidan high dynamic range
    Cool new way of working.
    This method has been around for a few years now. :) Joe Drust first demo-ed it on Zclassroom with his military radio project.

    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


  • Amsterdam Hilton Hotel
    Offline / Send Message
    Amsterdam Hilton Hotel insane polycounter
    musashidan said:

    Same can be achieved directly in Max by quadifying the boolean and turbosmoothing.

    Only for simple geometry. We should avoid jumping across two programs when one will work just fine, but not all use cases are ideal.

    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.

  • musashidan
    Offline / Send Message
    musashidan high dynamic range
    musashidan said:

    Same can be achieved directly in Max by quadifying the boolean and turbosmoothing.

    Only for simple geometry. We should avoid jumping across two programs when one will work just fine, but not all use cases are ideal.

    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.

    Yes, staying in Max is a bit of a hack in comparison to dynamesh or a tool like meshfusion in modo, but dynamesh method is a little clunky I feel. Did you see the presentation at Zsummit 2014 showing this exact technique? Some nice examples plus the mask/project trick to clean up the inevitable dirty edges that dynamesh often produces.

    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.
  • tynew
    Offline / Send Message
    tynew polycounter lvl 9
    Great writeup, informative and well presented. This is definitely a fun and faster way to work inside max instead of manual and mundane subD. I don't think there is too much in this workflow that could be improved. Since you can't preview the results inside max and alter results with a script, the next best thing to do is one click export which opens Zbrush and loads the obj. If there was some way that ePoly mod wasn't needed that would be even more glorious.

    Anyway great stuff, thank you for sharing as this will be an invaluable time saver to many people :)
  • Makkon
    Offline / Send Message
    Makkon polycounter

    Thanks for posting! I think I'll give this a try at work.
  • odd_enough
    Offline / Send Message
    odd_enough polycounter lvl 12
    Yup, this method is exactly how I modeled my truck engine a few years ago. Just a buttload of booleans in Max and then dynameshing it together:



  • musashidan
    Offline / Send Message
    musashidan high dynamic range
    Yup, this method is exactly how I modeled my truck engine a few years ago. Just a buttload of booleans in Max and then dynameshing it together:



    Lazy bastard! Why didn't you sub-d model that from a single mesh? :) Excellent model mate.
  • McGavish
    Offline / Send Message
    McGavish polycounter lvl 4
    Awesome tutorial! Thank you!
    tynew said:
    Since you can't preview the results inside max and alter results with a script, the next best thing to do is one click export which opens Zbrush and loads the obj.
    Check out GoZ Plugin for 3DS Max. Blender has it and exports meshes by one click Zbrush <=> Blender.

  • Crazy_pixel
    Offline / Send Message
    Crazy_pixel interpolator
    Thanks for sharing your workflow Ben. I try it and must say that it is a super fast workflow :D
  • tynew
    Offline / Send Message
    tynew polycounter lvl 9
    @McGavish
    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.
  • musashidan
    Offline / Send Message
    musashidan high dynamic range
    @Amsterdam Hilton Hotel good timing as well Ben as the age-old, and good old, original boolean object has been modernised in Max 2017 :)
  • musashidan
    Offline / Send Message
    musashidan high dynamic range
    JoshuaG said:
    Some of the artists from The Division used this method, and this video shows off the other ways it can be used. So you could model in CAD or Fusion360 and import it into Zbrush, and not have to worry that much about topology for the high poly.

    Yes, that's what I was referring to earlier in the thread, from Zsummit  2014. I think it was Paul Gabory/Joe Drust who showed this first a few years back. It really is a great technique for creating high-poly bake meshes. The boolean dynamesh features in ZB are one of those things that fell u der the radar for a lot of people as they didn't see the potential. 
  • yash
    Offline / Send Message
    yash polycounter lvl 7
    Hey Ben! Tried something with this! Its a little confusing in the beginning as I haven't used Booleans much. But here's what I have so far. I'm currently unwrapping the low poly. Hope it turns out to be good! :D
  • meathead
    Offline / Send Message
    meathead polycounter lvl 4
    yeah this type of method has been around for a while now. Its good to see an update on what people are doing with such workflows still.  I remember watching The Division do this live and was amazed! Zbrush is great not only for Organic! 
  • aranis
    Offline / Send Message
    aranis polycounter lvl 12
  • benlem
    Offline / Send Message
    benlem polycounter lvl 4
    Hi ! Thanks for the good Technique share ...
    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 ...


  • Octo
    Offline / Send Message
    Octo polycounter lvl 18
    This should work fine using Houdini vdbs through the houdini engine instead of going through zbrush.
    That way you could optimize the mesh or whatever else you need to do in one go too.
  • odd_enough
    Offline / Send Message
    odd_enough polycounter lvl 12
    @benlem If you're using booleans and then converting to dynamesh, UVs are a moot point. It is a cool script though.
  • Bertmac
    Offline / Send Message
    Bertmac polycounter lvl 17
    Yeah i really likes that Zbrush summit video https://www.youtube.com/watch?v=Fg6QPJ7XirE. it had a lot of info.

    Still it not widely accepted in the industry, i think is because 2 thinks adjustment and precision.
    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.
  • another caveman
    Offline / Send Message
    another caveman greentooth



    Great, thank you for sharing!

    Why decimate your high-poly?
    (optimizing baking rendering time maybe?)

  • McGavish
    Offline / Send Message
    McGavish polycounter lvl 4
    Why decimate your high-poly?
    (optimizing baking rendering time maybe?)

    That's right! Decimated model has almost the same details, but much lower polycount, which means faster operations on it (baking, exporting etc.).
  • Poinball
    Offline / Send Message
    Poinball polycounter lvl 6
    I just Try something and in 15 min I have a piece in HR that could take me 2 hours to do habitually !

    BIG THANKS


  • another caveman
    Offline / Send Message
    another caveman greentooth
    What about controling the chamfer level?

    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!
    http://thebiketube.com/sites/all/files/styles/528w/public/blog-content-image/tig-welded-frame.jpg?itok=5ZQNuGaX
  • Phoenix995
    Offline / Send Message
    Phoenix995 polycounter
    What about controling the chamfer level?

    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!
    http://thebiketube.com/sites/all/files/styles/528w/public/blog-content-image/tig-welded-frame.jpg?itok=5ZQNuGaX
    Oh i like that idea :)
  • Amsterdam Hilton Hotel
    Offline / Send Message
    Amsterdam Hilton Hotel insane polycounter
    Updated the OP with some special thanks to collaborators who helped me figure this stuff out

    another caveman said:
    Why decimate your high-poly?
    (optimizing baking rendering time maybe?)
    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.

    What about controling the chamfer level?

    edit: maybe using masks in zbrush? so you can chamfer a part individually and then another one with a wider angle?
    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.

    JoshuaG said:
    Some of the artists from The Division used this method, and this video shows off the other ways it can be used. So you could model in CAD or Fusion360 and import it into Zbrush, and not have to worry that much about topology for the high poly.
    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.



  • patrickchu
    Offline / Send Message
    patrickchu polycounter lvl 4
    Hi, sorry for asking some basic question here. May I know that how do you guys normally retopo the dense mesh after the dynamesh all the way in Zbrush to create some complex shapes which demo in the Zbrush Summit 2014 by The Division guys? thanks
  • Mossbros
    Offline / Send Message
    Mossbros polycounter lvl 9
    Hi, sorry for asking some basic question here. May I know that how do you guys normally retopo the dense mesh after the dynamesh all the way in Zbrush to create some complex shapes which demo in the Zbrush Summit 2014 by The Division guys? thanks
    The proboolean method leaves a mesh with every bit of the stack editable, so cylinders can have their segment parameters changed for instance.
    Zbrush only provides the highpoly side for baking and nice edges. 
  • patrickchu
    Offline / Send Message
    patrickchu polycounter lvl 4
    Mossbros said:
    Hi, sorry for asking some basic question here. May I know that how do you guys normally retopo the dense mesh after the dynamesh all the way in Zbrush to create some complex shapes which demo in the Zbrush Summit 2014 by The Division guys? thanks
    The proboolean method leaves a mesh with every bit of the stack editable, so cylinders can have their segment parameters changed for instance.
    Zbrush only provides the highpoly side for baking and nice edges. 
    Thanks a lot for the reply. So I just wanna double confirm that if u create a complex shape using dynamesh without using proboolean, just exclusively in Zbrush, so it means that u have to manually retopo the whole object to lowpoly in other software (3ds max, topogun, etc.) in order to be usable in games, am I right?
  • Mossbros
    Offline / Send Message
    Mossbros polycounter lvl 9
    @patrickchu

    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.
  • Polynaught
    Offline / Send Message
    Polynaught polycounter lvl 11
    I would love to try something like this with Modo and ZBrush. As a new Modo user I hope to hear from someone more experienced if that's even possible (can't find a method for keeping a stack of live boolean objects for example).
  • Mossbros
    Offline / Send Message
    Mossbros polycounter lvl 9
    There isn't a method that really works the same way, but modo has a rounded edge shader that pretty much allows you to work from mid poly booles. This method still requires you to re topologse though, as modo doesn't have a history stack. 
    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.
  • Amsterdam Hilton Hotel
    Offline / Send Message
    Amsterdam Hilton Hotel insane polycounter
    There is no need for a modifier stack, if you know what you are modeling. Modifier stack is only useful in creative workflows.
    I don't think you know what you're talking about.

    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.


  • patrickchu
    Offline / Send Message
    patrickchu polycounter lvl 4
    @Mossbros
    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. 
  • pior
    Offline / Send Message
    pior grand marshal polycounter
    For those curious about it, the dynamic boolean aspect is also doable in Blender :
    http://imgur.com/gS3nqrj


  • Macrow
    Offline / Send Message
    Macrow polycounter lvl 8
    pior said:
    For those curious about it, the dynamic boolean aspect is also doable in Blender :
    http://imgur.com/gS3nqrj


    Yeah, looks like BoolTool.  Great visual aid for Booleans in Blender.  Though, Blender still can produce some funky n-gons at times.  Here's hoping they improve the Boolean, as planned.

    http://blenderartists.org/forum/showthread.php?336498-BoolTool-0-2
  • musashidan
    Offline / Send Message
    musashidan high dynamic range
    Macrow said:
    pior said:
    For those curious about it, the dynamic boolean aspect is also doable in Blender :
    http://imgur.com/gS3nqrj


    Yeah, looks like BoolTool.  Great visual aid for Booleans in Blender.  Though, Blender still can produce some funky n-gons at times.  Here's hoping they improve the Boolean, as planned.

    http://blenderartists.org/forum/showthread.php?336498-BoolTool-0-2
    Doesn't Blender also have that slick looking plugin HardOps?
134567
Sign In or Register to comment.