This page discusses displacement mapping methods within V-Ray for 3ds Max.
Displacement mapping is a technique for adding geometric detail to surfaces at render time. In contrast with bump mapping, which works by just changing the surface normal to create the illusion of surface detail, displacement mapping modifies the surface itself. Here is an example of the same object rendered with bump mapping and with displacement mapping. Notice the round outline of the sphere and its shadow in the case of bump mapping, and the deformed outline produced by the displacement. The displacement map in this case is a 3D Gradient Ramp (procedural) map; the 3D mapping method was used.
In the case of displacement mapping, the surface is actually modified, which leads to correct outline, shadow, and GI. In the case of bump mapping, although the surface appears modified, the outline and the shadow are the same as the original object's outline and shadow.
Displacement is different from other kinds of shading in that it modifies the actual object surface. While other shading activities (such as bump mapping) take place at render time, displacement takes place before rendering.
With V-Ray, there are two ways to perform displacement:
- Displace map - Create a VRayMtl, place the displacement map in the Displace map slot in the Maps rollout, and apply the material to the object. The available settings are the Amount value for the map, and the global displacement settings under Render Setup window > Settings tab > Default displacement rollout.
- Displacement modifier - Apply a VRayDisplacementMod modifier to the object. This modifier includes a wide variety of settings for fine-tuning displacement for individual objects, far more than the standard 3ds Max Displace modifier.
The Displace map method is suitable for simpler displacement tasks that don't need a lot of tweaks. For displacement that requires fine control, use the Displacement modifier.
The only disadvantage to using the Displacement modifier is that it is applied to the entire object regardless of any sub-object selection on the stack below it. If you need to apply displacement to only certain parts of an object, use a VRayMtl with a Displace map and apply it to selected faces only. Alternatively, you can break the object into pieces so you can use the Displacement modifier only on the desired pieces.
Displacement Map Types
A displacement map can be either of two types:
- Monochrome map - A grayscale bitmap or procedural map where whiter areas indicate more displacement from the base mesh and darker areas indicate less displacement. Displacement is in the direction of mesh normals. This is the most commonly-used type of displacement map for the VRayDisplacementMod modifier, and is the only kind possible when using the Displace map slot in a VRayMtl. A non-grayscale map used for displacement is converted to a monochrome map before it is applied to the mesh, except under very specific circumstances.
- Vector map - A bitmap where the red, green, and blue values of each pixel displace the mesh in the U and V directions in addition to the direction of the face normal. This type of mapping is more complex to set up and use, and is available only through the VRayDisplacementMod modifier.
For 3D displacement, the geometry is clipped on a sub-triangle basis - a subtriangle is either clipped away entirely, or completely visible (this is not the case for 2D displacement where clipping is more precise). Therefore, you may get a jagged effect at the clipped edges. You can reduce this effect by producing more subtriangles (see the next section).
V-Ray does 3D displacement by subdividing each triangle of the original object into a number of subtriangles. More subtriangles mean better displacement, but will also take more memory and will increase the render time. To get a better idea of how many subtriangles you have, apply a Standard material to the sphere and turn its Faceted option on. This is important, as otherwise V-Ray will not only smooth the surface normals, but will also automatically apply a normals map that represents the normal of the perfect displaced surface, which will make the surface look a lot more detailed that it actually is.
Here is a blow-up of this rendering to better show the individual subtriangles (click the image for a larger view):
In addition, here is a rendering that shows the boundaries of the original triangles of the sphere. To create a similar rendering, put a VRayEdgesTex map in the Diffuse slot of the material and instance this map into the Self-illumination slot. Set the Color of the edges in the VRayEdgesTex to black and the Thickness to World units:
The quality of the displacement is determined by the size and number of the subtriangles. The main parameter to tweak is the Edge length, which determines the maximum length of a subtriangle's edge. This can be in world units or in pixels, depending on the View-dependent option. Lower values for Edge length mean smaller triangles and better quality. Here is the previous image rendered with various values for Edge length. The View-dependent is turned on, so Edge length is expressed in pixels. Note that the View-dependent option refers to pixels in the original image, not the zoomed-in image you get with a blow-up rendering. This is why we were able to do a blow-up rendering to see the individual subtriangles better.
The images below were rendered with a VRayEdgesTex map in the Diffuse slot of the material to show the original triangles of the mesh. Additionally, we turned on the Faceted option in the VRayMtl. V-Ray not only smooths the surface normals, but also automatically applies a normals map that represents the normal of the perfect displaced surface, which makes the surface look a lot more detailed than it actually is. Click the images for a larger view.