Accurate Displacement Workflow from ZBrush to VRay (Maya/3ds Max) and Arnold Render.

Accurate Displacement Workflow

I’ve just finished writing up a displacement mapping workflow tutorial that covers generating an accurate 32bit displacement map from ZBrush or Mudbox, and correctly applying it in VRay for Maya or 3ds Max, and Arnold Render.

There’s often a lot of confusion and misinformation surrounding displacement maps and how they’re supposed to work. You’ll sometimes see artists load a displacement map onto their low resolution geometry and play with intensity and depth values until it looks somewhat similar to their high resolution geometry and assume that’s it’s as close as they can get. But with this workflow you wont have to eyeball any ‘amount’ settings, or rely on normal mapping for fine details, or settle for ‘close enough’ - the correctly generated/applied displacement map will match your high resolution geometry accurately from the start.

So have a look and let me know if you have any feedback. Hope it helps out!



that is pretty comprehensive and a great resource as i am still trying to work out how to get zbrush work out to max and vray. will be testing this out definately.

This is working like a charm. Thanks for taking the time to write this down!

Hi Rockin!

I know this is an old post, but I wanted to thank you for your very thorough and helpful tutorial. I’m struggling with displacement maps and if it weren’t for your page I’d still be floundering. However, there’s still one issue: No matter what I do, I can’t keep Max from reading black as the midpoint. Every character I apply a zbrush displacement map to looks like they’re having some terrible allergy attack. They look the same at Texmap Min -1 as they did at Texmap Min 0. Have you ever run into this before?

Hey SPipes!

Thanks for the kind words! I’m glad the tutorial was helpful for you.

Just for clarification - you DO want black to be the midpoint for your displacement.

Can you share any images or scene files of your issue? You can email me at Akin@CGGallery.com


I am trying to convert 32 bit .tiff displacements generated from Z4R6 to .exr using Nuke 6.0.4. I’m not solid with the workflow for this but I am experiencing an error that I wonder if you might now how to remedy: Read error at scanline 4294967295; got 16372 bytes, expected 16384.

It seems these files are expecting more information than what Nuke is reading. I wonder if it is the version of Nuke. Hvae you experienced this?


Hi Dan,

Yes, I’ve run into that issue before - It’s not a problem on Nukes end, but an issue with ZBrush messing up somewhere in the process of generating your displacement map.

Were the settings you used to generate the map the same as the settings from my tutorial?
If so, try adjusting the dsubpix value and/or adaptive on or off and try generating the map again to see if you still get the error in Nuke.

Let me know if that does it.

Hi Rockin!
First of all thanks for your tutorial! really useful.
I am trying to replicate it, with a big collection of failures. Could you help me to realize what I am doing wrong? Let me explain:
I have created two cubes in maya, one above the other separated for 2 units (centimeters). Export as obj and import in zbrush as two different subtools, making sure that the scale in the export tab (in Zbrush) is set to 1, with no offset. (so if I re-export to maya it will be the same size and position)
First I’ve created a morph target. Right after I have subdivided 3 times. After that I want to sculpt the geometry of the cube below in order to touch the base of the cube above (two units away). It’s time to multimap exporter… I match your tutorial settings but I turn on “switch MT” in order to calculate the displacement from the original mesh… and… the exr that I get it never gets 2 units in the maximum luminance… and when I render in Maya/arnold…matching the settings you show in the tutorial…the mesh doesnt displace so much… just a little…but nothing similar of what I had in Zbrush.

I guess is something related with the morph target…


well I found it… I was storing badly the morh target. I found in the forums this from marcus_civis:

  1. Go to lowest subdivision level.
  2. Store morph target.
  3. Import original base mesh.
  4. Make sure MME>Export Options>Store MT is on and other options set.
  5. Run MME.

and it works perfectly…thnks

Glad to hear you found the issue!

That’s great thanks. Would love to see the same thing but for OctaneRender. Unfortunately, will need to wait till they fix their displacement process :slight_smile:

Hi, there. Any plan to make a tutorial on Vector Displacement Map? That would be of great help!

Hello and thanks for this great tutorial. I am experiencing the same error @DanWhitton explained. Do you know what can be the cause of this? We follow the steps correctly.

Read error at scanline 3924; got 16372 bytes, expected 16384

Daniel1130 - From my findings, vector displacement simply isn’t developed enough to use for production. There are many discrepancies between software on how to generate and interpret it (For instance, Chaosgroup disagrees with how Pixologic approaches it), and in almost all cases except for very simple examples (like vector displacing a plane), there are issues like seams across UVs. In short - stick to regular displacement unless you have a dedicated TD to help you. :smiley:

Docwhite - Unfortunately it’s a tricky problem to isolate and fix - it happens because ZBrush messes up something during the calculation of the displacement map. Experiment with changing the DSubPix value or turning Adaptive off. Also see if you cant isolate what geometry is located in that area of the map and seeing if theres a problem with the geometry of the sculpt.

is there a video tutorial on this ?