ZBrushCentral

Scaling Issues (GoZ, Blender, Max, etc.) Solution and explanation.

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:

  1. Select the Polymesh 3D star tool.
  2. Check the Tool->Export section settings.
    *The settings should be Scale: 0, X Offset: 0, Y Offset: 0, Z Offset: 0
  3. Import an .obj file.
  4. 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.

  1. Select the PolyMesh 3D star tool.
  2. Change the Tool->Export->Scale setting to 1 instead of 0.
  3. 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.

  1. Save or Export the model at actual size into an .obj file in separate 3d package.
  2. In Zbrush import the model.
  3. 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.

  1. Open your presaved Ztool file:
  2. Import or GoZ a model into Zbrush.
  3. 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

  1. Select the PolyMesh3D star tool
  2. Change the Tool->Export->Scale setting as desired.
  3. 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.

2 Likes

Thank you so much for this long in-depth post! It will be very useful for future use. After I made the thread asking for help regarding this issue, someone from Pixologic Support tried to answer me as well. I figured I might as well share the answer I got here as well.

You are right for what you are describing, ZBrush doesn’t like massive files. That’s why we have the Unify command in the Tool >> Deformation palette to “reset” the files transformation information.

We are thinking of adding in GoZ a scale I/O factor for the target application and make such behavior disappearing. But unfortunately, it won’t be possible before the next major update of ZBrush (5)

So while nothing is set in stone, hopefully this will no longer be an issue in future versions. :slight_smile:

But again, thanks for the help! Having some solutions to the problem is fantastic.

Yay, that was an awesome help. A million thanks :slight_smile:

Kudos

The problem with Unify is that it changes your model size. My 100mm object is now 2mm. If I GoZ a unified model it’s going to be too small in my other 3d software. Unify doesn’t change the Tool->Export scale settings but the actual model.

So it’s a solution only if you need to quickly re-size and offset your model to Zbrush’s ideal unit range and don’t need to transfer it back to another program or scene.

Yupp, I am well aware of that. Just thought the answer was worth sharing so we know there isn’t a “official fix” we’ve overlooked. Unify is nice to know about anyway though.

hopefully this won’t be a problem when Zbrush 5 launches some day in the distant future.

In 3ds Max 2012:

Customize > Units Setup > Display Unit Scale > Metric > Centimeters
Customize > Units Setup > System Unit Setup > 1 Unit = 1.0 Centimeters (Distance from origin: 1.0cm)
Tools > Grids and Snaps > Grid and Snap Settings > Home Grid (Grid Spacing = 1.0cm)
Tools > Grids and Snaps > Grid and Snap Settings > Home Grid (Perspective View Grid Extents = 10)
OBJ scale settings in both the export and import dialogs = 1.0 (YZ flip enabled in both too)

In ZBrush 4R3:

Tool > Export > Scale = 10 (will say 9.9999) - use ZB’s value if you don’t want your mesh resized to preview size

=================================

Those are the settings I start a new project with. They’re for manually exporting without GoZ. When using the perspective view in Max, the visible grid will be the exact same size as the Tool > Preview window in ZBrush which seems to be the size it prefers to work with (the unify option will automatically resize a mesh to fit within this window for example). It gives me a reasonable space to work in that I know won’t give me any trouble and I don’t do any resizing until I’m finished and ready to put the model into the final scene. It doesn’t actually have to be centimeters in Max. Any choice will do so long as both the system unit and display unit types match (inches in both, meters in both, feet for both, and so on). To simply the setup process for beginning a new project, I created my own UV’d non-polar primitives which fit within this space and saved them in .max .ztl and .obj formats. Remembering the size relationship is pretty easy too. For example moving something 5 grid spaces in Max is the equivalent of offsetting 50 units in ZBrush (20x20 grid spaces in Max equals 200x200 deformation units in ZBrush, the exact size of its preview window. Just have to move the decimal point over).

Edit: If starting out in ZBrush instead, export with a scale of 1 and use an OBJ import scale of 10.0 in Max. That way you can avoid using the scale tool in Max (which usually requires the reset x-from modifier to fix).

Thanks for the information, this thread has been a big help.

At our studio we recently decided to standardise the System Units Scale in 3DS Max across all projects, setting it to 1 Unit = 1cm. This resulted in models that appear huge in ZBrush when they’re transferred across using GoZ (I’d noticed some strange behavior when attempting to use NoiseMaker and the Deformation controls).

Setting the System Units Scale in 3DS Max to 1 Unit = 1m appears to bring the models across at a much more ZBrush-friendly scale, so I think I’ll be recommending that we use that scale setting going forward.

A million thanks for this clarification!

Hi,

I have a model that originally began at a much smaller scale in 3DS Max. I sculpted multiple subtools in zbrush and finished up the character. Using GoZ I took it to 3DS Max, rescaled all parts of the model at once using the xform modifier, then GoZ’d that back to Zbrush. The model scaled up as I had wanted, but now the brushes don’t behave as desired, since the model is so large.

I looked at this thread to learn more: http://www.zbrushcentral.com/showthread.php?168239-Scaling-Issues-(GoZ-Blender-Max-etc-)-Solution-and-explanation&highlight=scale

However, the solutions presented here require that I export an obj from 3ds max and then import that into zbrush. How can I do this with multiple subtools and get the higher subdivisions with sculpted details back onto the imported model? Or is there some other way to fix the scale on this?

Thank you,

Adnan Hussain
http://www.madguru.com

This is a great post. I tried the methods explained, particularly solution 3. It works fine but it unfortunately will not work with the multi map exporter. Has anybody had success using any of these solutions with the multi map exporter?

Thank you so much. This scaling issue was driving me crazy. Finally, I can do accurate measurement.

But it looks like there is still a buggy thing. No matter how I try, I just can not set the scale to 30, when I did, it always given me 29.9999. So, instead of 30, I just give it 3. 3D Print Exporter, it says mm, now I know the model actually is in cm, that is why I set the transpose tool unit to cm.

Thank you MentalFrog so much.

Attachments

scale_finally.PNG

I’ve been looking for a clear explanation of this for years (no joke). This should seriously be in the official docs!