Lecture
Displacement mapping is an alternative computer graphics technique — distinct from bump mapping, normal mapping, and parallax mapping — that uses a texture or height map to create an effect in which the actual geometric positions of points on a textured surface are displaced, often along the local surface normal, according to a value computed by a texture function at each point on the surface. It gives surfaces a sense of depth and detail, allowing, in particular, self-occlusion, self-shadowing, and silhouettes; on the other hand, it is the most computationally expensive of this class of techniques because of the large amount of additional geometry involved.
For many years, displacement mapping was a feature of high-performance rendering systems such as PhotoRealistic RenderMan, while real-time APIs such as OpenGL and DirectX were only beginning to adopt this feature. One reason for this is that the original implementation of displacement mapping required adaptive tessellation of the surface to produce a sufficient number of micropolygons whose size matched the size of a pixel on the screen.


Displacement mapping includes the term mapping, which refers to the texture map used to modulate the strength of the displacement. The direction of displacement is usually the local surface normal. Today many renderers support programmable shading, which can produce high-quality (multidimensional) procedural textures and patterns at arbitrarily high frequencies. The use of the term mapping then becomes debatable, since no texture map is involved anymore. Therefore, the broader term offset is often used today to denote the superconcept that also includes displacement based on a texture map.
Renderers using the REYES algorithm or similar micropolygon-based approaches have made it possible to perform displacement mapping at arbitrarily high frequencies since they became available almost 20 years ago.
The first commercially available renderer to implement the micropolygon displacement mapping approach through REYES was Pixar's PhotoRealistic RenderMan. Micropolygon renderers typically tessellate the geometry themselves, at a granularity suitable for rendering the image. That is: the modeling application supplies the renderer with high-level primitives. Examples are true NURBS surfaces or subdivision surfaces. The renderer then tessellates this geometry into micropolygons at render time, using view-based constraints derived from image rendering.
Other renderers, which require the modeling application to deliver objects pre-split into arbitrary polygons or even triangles, have defined the term "displacement mapping" as moving the vertices of these polygons. Often the direction of displacement is also constrained to the surface normal at the vertex. Although conceptually similar, these polygons are usually much larger than micropolygons. Thus, the quality achieved with this approach is limited by the density of the geometry's tessellation long before the renderer gains access to it.
This distinction between displacement mapping in micropolygon renderers and displacement mapping in non-tessellating (macro)polygon renderers can often lead to confusion in conversations between people whose familiarity with each technology or implementation is limited. This is all the more true because in recent years many non-micropolygon renderers have added the ability to perform displacement mapping of a quality similar to what a micropolygon renderer can provide natively. To distinguish the coarse pre-tessellation-based displacement that these renderers used to perform, the term subpixel displacement was introduced to describe this feature.
Subpixel displacement generally refers to a finer re-tessellation of geometry that has already been tessellated into polygons. This re-tessellation results in micropolygons, or often microtriangles. Their vertices are then moved along their normals to achieve the displacement mapping effect.
True micropolygon renderers have always been able to do what subpixel displacement has only recently achieved, but with higher quality and in arbitrary displacement directions.
Recent developments seem to indicate that some renderers using subpixel displacement are also moving toward supporting higher-level geometry. Since the vendors of these renderers are likely to continue using the term subpixel displacement, this will probably lead to even greater confusion over what displacement mapping actually means in three-dimensional computer graphics.
With regard to Microsoft's own high-level shader language, displacement mapping can be interpreted as a kind of "vertex-texture mapping," where the values of the texture map do not change pixel colors (as is far more common) but instead change the positions of vertices. Unlike bump, normal, and parallax mapping, which can be said to "fake" the behavior of displacement mapping, this way a genuinely rough surface can actually be derived from a texture. It must be used in combination with adaptive tessellation techniques (which increase the number of rendered polygons according to the current view settings) in order to produce highly detailed meshes.
Comments