Share

Displacement Attributes - Arnold User Guide

Height

Controls the amount of displacement. The displacement_height can have either positive or negative values. This attribute only applies to normal displacement. You can use this value to compensate for any inconsistencies between the exported displacement map and the low-resolution geometry.

Bounds Padding

Padding defines how much to extend the bounding box of the object so that it can include any additional displacement coming from the displacement shader. When the bounding box is hit first by a ray, the displacement will be computed, so an unnecessarily high value will decrease the rendering efficiency. On the other hand, a low value could result in a clipping of the displaced mesh.

The proper workflow for displacement in Arnold is to have the shader give the final displacement value and then to offset the bounding box with the bounds padding attribute.

Below is another example of a situation where bounds padding is required. A checker texture is connected to a displacement shader that is assigned to a sphere. In the image on the left, parts of the render return black. This is because the Bounds padding needs to be increased for the displaced mesh. Increasing the Bounds padding to 3 fixes the problem. This effect may increase or decrease depending on the scale of the object that is being displaced and the amount of displacement used.

Zero Value

This is a floating-point value that is applied as a shift to the displacement amount. It defines the value of the displacement map that is considered to be zero displacement. This value can vary depending on how the displacement map has been generated.

Autobump

Autobump puts the high frequencies of a displacement map into the bump attribute so that you do not need as many Subdivision Iteration values. Autobump is visible to camera rays only by default. The visibility parameters let you make autobump visible to other rays (eg specular and transmission) however that can increase render times.

Note:

The autobump algorithm needs UV coordinates to compute surface tangents. Make sure your polymesh has a UV set applied.

Technical information:

When Autobump is enabled, Arnold makes a copy of all of the vertices of a mesh before displacement (let's call that the "reference" mesh, or Pref). Prior to shading at some surface point on the displaced surface P, the equivalent Pref for that point is found on the non-displaced surface, and the displacement shader is evaluated there (at Pref) to estimate what would be the equivalent normal at P if we had subdivided the polymesh at an insanely high tessellation rate.

The main difference between Arnold's Autobump and using the displacement shader for bump mapping is that Autobump has access to Pref whereas bump2d does not and would be executing the displacement shader on already-displaced points which could "compound" the displacement amounts.

The only extra storage is for copying P prior to displacement. There is no analysis of the displacement map; Arnold displaces vertices purely based on where they "land" in the displacement map (or procedural) regardless of whether it happens to "hit" a high-frequency spike or not.

Auto Bump Visibility

You can selectively disable an object's bump mapping from autobump for the various types of rays in the renderer. The ray types are the same as the 'visibility' parameter. This defaults to all rays except for rays that have undergone diffuse bounces. By disabling it for more ray types (like reflection, refraction, glossy), rendering can be made faster with little degradation in image quality.

Ray type Decimal Value
Camera (Primary Visibility) 1
Shadow (Casts Shadows) 2
Diffuse transmission 4
Specular transmission 8
Volume 16
Diffuse reflection 32
Specular reflection 64
SSS (subsurface) 128

Was this information helpful?