This post contains solutions to some of the scaling issues between Zbrush and other programs. It also contains some of the explanation, or the why, behind what’s going on. I believe in teaching the why as it helps others to think of other solutions and problem solving better ways to doing things in their future projects. Teach a man to fish and all that.
The information and solutions in this post may not be 100% correct. It is based on my own observations and experimentation. If anyone finds an error or false information let me know and I’ll update the corrections.
[HR][/HR]Some Explanation:
Usually in 3D the output is a rendering. This means the actual units of the model is not important but the proportions are, i.e., a character sitting in a car needs to be properly porportioned to the car. However sometimes in 3D it’s just as important (or sometimes more important) that the actual units are correct, for example making a 3d print of the car at exact physical dimensions required by a client.
The Zbrush floor grid is only 14x14 units or +/- 7 units from the origin point of 0,0.
If you look at the example models that come with Zbrush you’ll notice their dimensions are within a small area of Zbrush units.
Listed below are a few models’ rough estimate size in Zbrush units:
Demo Head: 1 x 2 x 2
Demo Solder: 5 x 2 x 8
Dog: .5 x 2 x 2
You’ll notice that even with high details these models are fairly small in dimension. Most of Zbrush’s 3D Meshes (Cube, Cone, Ring, Polymesh star, etc.) are within 2 x 2 units. You’ll also notice they look good in the Tool->Preview window.
Zbrush’s brushes, transpose, and other tools work best at certain range of scale. This is great if your model fits within these units. However if you work on a model much larger than this range you may notice a problem with different brushes and tools. On a very large model brushes like the move brush don’t have the full effect of the intended stroke. In other words a very long stroke of the move brush may only move points on the model a small amount as if the stroke were much shorter. The same effect happens with tools like the transpose scale. The opposite effect also happens when a model much smaller, i.e., the transpose scale will scale much bigger than the intended stroke. Some brushes and tools are not affected as they are dependent on the screen scale and not the model scale. Some brushes are dependent on both screen and model scale, i.e., the move brush will only move points within the brush size but only move them based on the model’s actual scale.
To prevent these issues and to keep brushes and tools working consistently as intended your model needs to be within a reasonable range of units inside Zbrush. As noted above this range is reasonably small in terms of Zbrush units. This is fine if a model is 14mm x 14mm (1 unit = 1mm) but what if a model is 100mm x 100mm?
How does Zbrush get around this issue? Simple, it automatically readjusts the scale of the model to fit within Zbrush’s ideal unit range for its brushes and toolset. At least it usually automatically make these adjustments. GoZ is one of those processes that does not make these adjustments.
To find these automatic settings try the following:
- Select the Polymesh 3D star tool.
- Check the Tool->Export section settings.
*The settings should be Scale: 0, X Offset: 0, Y Offset: 0, Z Offset: 0 - Import an .obj file.
- Check the same scaling and offset settings under the Tool->Export section.
You’ll notice the Scale, X Offset, Y Offset, Z Offset now have different values. These new values are calculated when the model is imported into Zbrush. The scale and offset settings will vary based on your .obj model. The auto scaling will usually adjust the model to fit a 2x2 area. The offset is to set the model’s center point to be the same as Zbrush’s origin point.
This is great as it puts a much larger model within the ideal scale for Zbrush’s brushes and tools. However if you transfer the model as is to another 3d package the size and position will now be different than the original. To set the model back to its original size and location Zbrush looks at the export settings (Tool->Export).
Example:
A model 100mm x 100mm x 100mm imported into Zbrush will be scaled down to 2 x 2 x 2 Zbrush units. The Tool->Export settings will have a scale set to 50 (50 x 2 = 100). When exported the 2x model will be scaled at 50 back its original 100mm size.
*Note: The scale setting also applies to the offset number. So a scale of 2 and an offset of 1 would be the same as a scale of 1 and an offset of 2.
This automatic adjustment can be turned off but the setting isn’t where you would expect it to be.
- Select the PolyMesh 3D star tool.
- Change the Tool->Export->Scale setting to 1 instead of 0.
- Import the same .obj model as before.
Check the Tool->Export scale settings and instead of being automatically adjusted it will be whatever settings you set for the PolyMesh3D tool.
*Caution!
Once you change this setting to anything above 0 it won’t let you change it back to 0. To change this setting back to 0 you need to reset or initialize Zbrush. It also means you don’t want to save ui or other custom settings when this value is not set to 0.
On import Zbrush will do one of two options:
If you don’t have a polymesh selected as your current tool, such as one of Zbrush’s standard 3D shapes or even any of the 2.5 brushes, then Zbrush will clone the PolyMesh3D star and then import the model using the settings from the PolyMesh3D star. The cloned PolyMesh is replaced with the imported model.
If you have a polymesh selected then it will use the currently selected polymesh Tool->Export settings and replace the current polymesh with the imported model.
When a standard Zbrush shape is converted to a Polymesh (Tool->Make PolyMesh3D) its Tool->Export settings are set to a default of 0.
On import Zbrush will check to the Tool->Export Scale setting. If it is set to 0. then it will run the automatic adjustment and set the settings according to the model. If the scale is anything greater than 0 it skips the automatic adjustment and leaves the settings as they’re currently set. Even a scale of 0.00000000001 will ignore the automatic adjustment even though the setting may display a single 0 due to too many zeros after the decimal.
However GoZ ignores the automatic scaling and adjustment step. Instead it just sets the scale to 1 and has no offset (or a setting of 0).
This means our 100mm model when imported will get a scale of 50 a model transfered through GoZ will get a scale of 1.
Also note that changing the Tool->Export scale settings will adjust your Zbrush units when measuring with the transpose tool. My 100mm model is 100 Zbrush units at a scale of 1 but too large to work properly with Zbrush’s brushes and tools. My same 100mm model at a scale of 50 will show up as 2 units on the floor grid but will still show at 100 units while measuring with the transpose tool.
[HR][/HR]
[HR][/HR]SOLUTIONS:
[HR][/HR]Solution 1: Export the model out of your other 3d software first and then use GoZ between them.
- Save or Export the model at actual size into an .obj file in separate 3d package.
- In Zbrush import the model.
- GoZ from Zbrush back to original 3d software.
Once you do these steps you should be able to GoZ back and forth between Zbrush and your other software without any issues.
On import the model is scaled to be within Zbrush’s ideal unit range of work (approximately 2x2). The settings are saved in the Tool->Export section. When GoZ out of Zbrush the model is scaled according to its scale settings back to its original size. When you GoZ back into Zbrush it replaces the named subtool, which should already have the correct scaling options.
[HR][/HR]
[HR][/HR]Solution 2: Setup a .ZTL with preset settings and append models as subtools.
- Open your presaved Ztool file:
- Import or GoZ a model into Zbrush.
- Append the imported model as a subtool of the original Ztool file opened in step 1.
Once you do this you can select the subtool and GoZ as neccessary.
When you append a model as a subtool it checks the models’ Tool->Export settings and adjusts the model back to its original size. It then adjusts the subtool to match the appropriate size of the tool it is being appended to.
For my models I’ve created a .ZTL file with a 100mm x 100mm x 10mm cylinder. I set the Tool->Export Scale to 50 and the X,Y,and Z offset to 0.
[HR][/HR]
[HR][/HR]Solution 3: Manually set your scale option
- Select the PolyMesh3D star tool
- Change the Tool->Export->Scale setting as desired.
- Import your .obj or Append a GoZ model.
To find a proper scale setting take your actual model size (or close approximate) and divide by 2. Remember the 2x2 range of most default Zbrush models? That’s where the 2 comes from.
Example:
A model that is 100mm x 100mm x 75mm would be a scale setting of 50 (100mm / 2 = 50).
[HR][/HR]
Hope this helps and again post any corrections or point out misinformation and I’ll update the post. I may also update some of the formatting if this is hard to read.