A simple vector displacement test. You can download the Maya scene here and the ear vector displacements map here.
| Section | ||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
displacementNode UI
Scalar Displacements
For scalar displacements, all parameters are recognised but one: Vector Displacement. It is not used for obvious reason: the displacement vector is implicitly the surface normal. Despite the misleading names, both Vector Encoding and Vector Space are supported in the case of scalar displacements.
For scalar displacements, the Vector Displacement parameter is not used.
Vector Space
This parameter, which also applies to scalar displacements, defines in which 3D space the displacement is defined. The available options are:
Object Space | The displacement magnitude is expressed in the same space as the model. This means that if the object is scaled by some value, the displacement will follow the same scaling. |
World Space | The displacement magnitude is expressed in the world space. This means that displacement magnitude is independent of object scaling. A displacement value of 1.0 with a unit scale corresponds to a magnitude of 1 Maya unit. |
Tangent Space | The displacement takes place in a local coordinate system defined by the tangents on the surface. This mode is useful for vector displacement. |
Vector Encoding
This parameter, which also applies to scalar displacements, defines in which range the displacement is defined. The available options are:
Floating Point Absolute | The displacement range is between 0 and 1.0*Scale. The displacement will push the surface out. |
Signed Encoding | The displacement range is between -0.5*Scale and 0.5*Scale . The displacement will push the surface in and out. |
Vector Displacement Maps
Connecting a texture (or a procedural texture) into the Vector Displacement plug enables vector displacements. In this mode, the Displacement plug is ignored.
Displacement plug is ignored when Vector Displacement is connected.
| Info |
|---|
By default, Maya will connect your |
Here is an example of a network setup to use vector displacement map:
Displacement network to use a vector displacement map (used to render the "ear" scene).
| Info |
|---|
When using vector displacements, check if your map was created in World/Object Space or Tangent Space and set the Vector Space parameter accordingly. |
Adjusting the Displacement Bound
As explained in Displacement Technology, 3Delight needs bounds for the displacements to render properly. 3Delight for Maya guesses the correct displacement bound using the parameters in the displacement shader so in most cases the Displacement Bound is better left untouched. In some cases, however, it is necessary to adjust the bound to avoid artifacts or to optimize render times.
One instance in which the adjustment is necessary is when using floating-point displacement maps (or shading networks) that produce magnitudes larger than 1.0. In this case, the Displacement Bound should be set to the maximum value in the texture map or network. Usually renders which exceed the displacement bound will produce the following 3Delight error :
| No Format |
|---|
3DL R2001 object 'name' (displacement 'shader', surface 'shader') exceeded its displacement bound by 25% A displacement bounds is be specified for the object but is not big enough. This could cut off displaced parts of the object. Maybe the bounds should be enlarged. |
The following render shows the kind of artifacts produced by insufficient displacement bounds:
Correct Displacement Bounds (left) — Insufficient Displacement Bounds (right)
Another instance in which the Displacement Bound should be changed is when the range of the displacement map (or shading network) is much lower than one, in this case the bound should be lowered to reflect the actual range of the displacement map or network. Note this case won't produce artifacts, it is a simple optimization step. When 3Delight detects displacement bounds that are too large, the following warning will be produced:
| No Format |
|---|
3DL R2093 object 'name' (displacement 'shader', surface 'shader') used only 25% of its displacement bound The displacement bound specified for the object is much larger than needed. Performance could be increased by reducing it. |
Displacement Technology
3Delight supports two different displacement algorithms:
- A subsample accurate fine displacement. Geometry is tessellated on-the-fly and adaptively to meet highest quality criteria. This is the default algorithm.
- A vertex based displacement. Geometry is pre-tessellated to a given amount of subdivision prior to running the displacement shader. Vertex displacement is enabled in the displacementShader node in the 3Delight section as show in the screen shot below.
Enabling Vertex Displacement
Both algorithms have their pros and cons as shown in the table below.
| Fine Displacement | Vertex Displacement | |||
|---|---|---|---|---|
| Startup time | Fast startup time because no pre-processing required. | Potentially slower startup time because of pre-tessellation requirement. This depends on the number of Subdivision Steps. The higher the steps the slower is the pre-processing time. | ||
| Overall Render Time | Slower render times. | Usually faster render times. | ||
| Memory Usage | Low Lower memory usage thanks to a smart caching system. This is not always true though: 3Delight keeps in this case, 3Delight needs to keep original geometry in memory and this could be expensive for subdivision surfaces. | Potentially high higher memory usage depending on the Subdivision Steps. Although in the case of subdivision surfaces, this technique algorithm might use less memory overall because final tessellated and displaced geometry is stored as a polygon mesh. | ||
| Overall Render Time | Slower render time. | Usually faster ender time. | ||
| polygonal mesh (which is much more compact than the original subdivision mesh). | ||||
| Quality | Provides very high quality displacement but might be subject to cracking, especially for vector displacement and large displacements. | Displacement quality depends on the Subdivision Steps.
|
Using Mudbox Displacements
3Delight for Maya can render Mudbox displacements (both vector and scalar) using the standard displacementNode shader. The following table explains how to export both scalar and vector displacement maps.
Scalar Displacement Export
For scalar displacements:
- Select the Displacement Map option at the top.
- Make sure that Smooth Target UVs option is OFF.
Vector Displacement Export
For vector displacement:
- Select Vector Displacement at the top of the panel.
- Make sure that Smooth Target UVs option is OFF.
- Regarding Vector Space:
- Non-deforming models with animated transformations, Object space is recommended.
- Completely static non-deforming models can use World space(but Object space will do just fine).
- For deforming models, Absolute Tangent is needed.
Disable Smooth UVs.
Using ZBrush Displacement Maps
Coming soon ...
What Bit Depth to Use ?
This is a very common question and the answer depends on both the type of the map used (scalar or vector) and the type of the displacements used. Disk space consumption can also be a consideration. 3Delight for Maya work fine with all bit depths. The table below provides some hints on what bit depth should be used depending on the situation.
| Type | When to use | Observations |
|---|---|---|
8-bit integer ________________ | Best suited for small scalar displacements. For example, simulation of small surface bumps on: skin, leather, some fruits (orange/strawberry), fabrics, rusted metal, aged wood, etc.. Making sure close to the full range of data is used over the min/max displacement scale is important. | For practical reasons, integer formats are less used than their floating point counter-parts. This is unfortunate. Integer displacement maps are excellent for almost all scalar displacements and have better precision than floating point data for the same bit depth. Unpracticality comes from the fact that the range is implicitly between 0 and 1 and scaling must be specified in the displacement shader to bring the magnitude to the desired range. Integers are not practical for vector displacements. |
| 16-bit integer | Best suited for medium to large scalar displacements. It provides enough precision and uses less disk space than floating point data. | |
| 32-bit integer | Enormous precision suited for special cases. A camera positioned to reveal an extreme enlargement of a displaced surface is an example. | |
| 16-bit floating point | A versatile data format that has both good range and good precision for displacement maps. | Floating point is very good at representing data at different scale, which is generally not the case for most scalar displacement maps. Vector displacement maps, as produced by Mudbox and ZBrush, generally need such precision and floating-point data is advised. One practical advantage for floating point data is that the range can be correctly and directly stored in the data. For example, using a range of 0 to 0.1 in the data is perfectly valid and can correspond directly to the displacement scale as seen on the object. When using integer data, this range would have to be encoded between 0 and 1 and then scaled back to between 0 and 0.1 in the displacement shader. |
| 32-bit floating point | Best suited for vector displacement maps. __________________________________ |










