How to combine sculpted and painted displacement maps

 Sometimes it is more efficient to combine various Displacement maps at render time, rather than sculpting all of them. A common example is when you’re creating fabrics, a skin shader, or in this example, paint splotches for your 3d art.

I would sculpt a Displacement map in ZBrush, but leave out the high-frequency details; sculpting just the big shapes. I prefer to paint the high-frequency details (for example, paint drips or skin pores) in 2D so I can use the same information in my Colour map.

It also enables me to go into much more detail. I’m not bound to my eight to 12 million polygons in ZBrush, for example an 8k map has 67 million pixels to exploit. So we end up with a 32-bit Displacement map with a practically infinite value range and an 8-bit image with a value range between 0 and 1.

I prefer to paint the high-frequency details in 2D so I can use the same information in my Colour map.

Zeno Pelgrims

So how do we combine these? It’s really easy with Arnold: first you need to remap the painted Displacement map so the Scalar Zero values of both Displacement maps are the same. When dealing with 32bit extracted Displacement maps, this is usually 0.

The zero value shifting is needed for correct layering of the maps. We will use the alRemapFloat for this. Leave the Bias and Gain as they are; just change the Output Min and Output Max to -1 and 1. Be sure to disable clamping. We can’t clip half our information in the negative values.

Then all that’s left is to layer the shifted 8-bit map on top using an alCombineFloat node using the Add Operation. To control the intensity of the layered map, we can both adjust the Output Min and Output Max values in the alRemapFloat node, or we can create an extra alCombineFloat node and multiply the map with a certain value.

Expert tip: Using the allSurface shader

The alSurface shader allows for under and oversampling of all aspects of the shader – valuable when optimising scenes. Imagine you have two sub- surface scattering shaders; one using the cubic model and another using the directional model.

The latter needs more samples to clear up the noise. It’s better to add samples on the shader level rather than in the global settings, since otherwise the cubic model would receive more samples than needed.