I've been working professionally for 8 years and I am baffled that I still struggle with scale issues in Zbrush.
It's not just me either, I work for an outsourcing company and I often find that even clients' own assets will be totally off. For example, they will give us a Max scene with the low poly mesh, and a ztool. You open the ztool to find that it's massive on some arbitrary change in scale.
Other frustrations include the brushes. When models are authored to be larger than what Zbrush is comfortable with, everytime you select a brush you're battling the defaulting draw-size (especially the Dynamic size, which it defaults to, is there a way to turn off Dynamic is default?).
Of course one solution is to scale the models down, go to work, then scale back up. But man... this all just seems so stupid.
Basically I'm wondering if the community or anybody on here can link me to some good workflow practices to solve this issue.
Replies
i guess you can play with the scale setting under tool->export to see if that makes any difference. else what we did on past projects was to figure out the scale in max manually and keep a dummy object with these settings around to align our im/exports to.
as long as the vertex order doesn't change it should also be possible to reimport a correctly scaled model from max and have it retain subdivisions, polypaint and layers in zbrush at the new scale. i've always had problems with that in max though ever since they switched to the newer style OBJ exporter. at least maya, blender, probably others will handle that just fine in a reliable fashion.
for the brushes you can simply turn off dynamic for every one you want to use, set a common draw size and oversave the brush defaults in the zbrush directory (there are several but offhand i think it's found under ZData/BrushPresets. don't forget to save smooth and masking pen with the new settings as well or it'll be really irritating to work. you'll need to keep shift and ctrl pressed while clicking on save to catch these two.
marcus civis on ZBC made a script to disable dynamic on all brushes but i think it needs to run every time you launch the application so i just did the manual thing once for all those i actually need.
dynamic is a strange beast in Z, am always struggling with it and usually turning it off whereas in apps like mudbox that's the default and all there is and works so seamlessly that you don't even notice....
I always start in maya, blocking my model out to the appropriate real world size, and then inevitably in Zbrush I end up having to rescale because the brush sizes are off, and when I export who knows what units it will be at. I've tried reading the documentation, but like you I can't find a consistent workflow that delivers predicted results.
Not a huge deal, I just scale the final model in Maya and export, but yeah, it's kind of frustrating.
https://www.youtube.com/watch?v=fKyoBMklNY4
The first thing to note is that ZBrush uses centimeters as its unit scale (or at least the same units that Maya uses by default, which it defines as centimeters), but this is obfuscated by the Floor Grid, which does not represent these units by default. You can correct this by going to the Draw menu and setting both the Grid Size and the Tiles settings to the same number; it doesn't matter what number it is, as the size of the grid squares themselves is directly proportional to these settings, but a larger number will give you a larger grid perimeter. Once these parameters are set to the same number, the floor grid will now accurately represent ZBrush's units; this can be demonstrated by going to the Deformation sub-palette and moving the Offset slider to 1 or -1; the subtool should move exactly one grid space in the specified axis.
The second aspect to note about ZBrush is its tendency to Unify imported geometry. Also under the Deformation sub-palette is a button called Unify; pressing it will scale and translate your ZTool so that it is both in the exact center of the scene and so that it is no more than 2 units in length at its longest point, also demonstrated by a corrected floor grid. I would wager a guess that this is what the developers of ZBrush felt was an optimal size and position for sculpting, and indeed it does fall within the brush size range that allows the brush to be very precise at its smallest yet also a good twice the size of the subtool at its largest (turns out that a Draw Size of 1000 makes the brush 4 units in diameter).
Finally, we have the Export sub-palette, the cause of everything screwing up your model's scale upon both export and import, confusingly enough. When a file is imported into ZBrush, ZBrush will automatically attempt to Unify the geometry to have it put in that optimal 2 cm sculpting space. Fortunately, it records these offsets to the model's original position and scale in the Export sub-palette, and they can be reversed by setting X Y and Z offsets to 0. Doing this and re-importing the model will have it import in the correct position. Setting the scale offset to 1 will import the model in its actual size; something that is 2.3 meters tall in a program like Maya will re-import into ZBrush 230 units tall. Of course, since the the size range of your brushes is fixed from 0.002 cm to 2 cm, actually sculpting on a model that is 230 cm big would be highly impractical. You might want to leave the offset where ZBrush has calculated it, or you might want to set it to a number like 100 to keep it proportional yet still feasible to sculpt on. ZBrush scales a model on import inversely to whatever its Scale offset is, so a model imported at an offset of 2 would be half as big and one imported at an offset of 100 would effectively make the grid seem like meters rather than centimeters.
Once these Export settings are set for a subtool, you should be able to re-import it, sculpt on it, and then export it without it inexplicably changing size in the process. I would recommend setting up a startup script or editing an existing one to have ZBrush configure the grid properly (I personally like to set the Grid Size and Tiles to 5) so that you can easily tell whether things are properly in scale or not. I haven't tested all of this with GoZ very much, as issues with the Maya plugin for it have lead me to prefer a manual import/export workflow, but I would imagine it determines things through the Export sub-palette all the same.
TL;DR: If a model imports into or exports out of ZBrush at a weird scale, mess with the Scale slider in the Export sub-palette and then try re-importing it. It should then export back out at its original scale.
Hopefully this helps you fix or at least understand any issues you have with how things are scaled in ZBrush!
Most of the times the key is the export values. Both are relevant and tool scale will affect proportionally the subtool scale.
If the export scale changes (glitches, errors etc) you can revert to an older version of the file using the export scale values. There is a script that helps to copy export values between tools:
http://www.zbrushcentral.com/showthread.php?195599-Scale-Offset-Copy-Paste/page2
Each tool has his own export value. It is a bit the equivalent to the unit setup if 3d programs, but in this case can be different for each tool of the same program.
Notice that if we copy subtools between tools the export values are also being taken in consideration.
That works for setting up a model from a start in Z. Great for character work. Once the figure is done you can GoZ a decimated version of it to whatever modeling app you intend to use, and use that as a template for modeling externally as everything will be at a perfect scale when imported into the Z character scene.
Working this way you ensure that your model is at a perfect size for working within Z (brushes, deforrmers ect) and a perfect size for the external 3D app (rigging, hair ect) and further app work (texturing in substance for example).
For going the other way, if you start a base mesh in a 3D app and want to detail or sculpt it in Z then GoZ it from your app and once the model is inside Z duplicate and rename the import then hit unify, then go through the above process till its at a perfect size in the 3D app. I hide or delete the original in the 3D app and only use the duplicate from Z to ensure perfect alignment. This works great for game models because the export information from Z (which is saved with the tool) will always align in 3D space with the model in the 3D app. Super for baking.
Anything below will push in the model and above push out. If you want avoid scaling down the model avoid any value below 50%. You can do it easily in photoshop.
For alphas you can set where you want this middle point. I don't think this is possible in displacement maps except for creation (baking) of maps. You are stuck in 50% grey values for 0 push effect.