15
\$\begingroup\$

What's the difference between displacement mapping and height mapping and what is the connection to adaptive tessellation?

\$\endgroup\$
  • \$\begingroup\$ So, lets say when I want to use height mapping on a small object, i.e. a sphere, what techniques do I use to eliminate cracks? Smoothing? Is that more performant than displacment and adaptive tessellation? \$\endgroup\$ – Jinxi Nov 13 '13 at 10:19
10
\$\begingroup\$

Displacement mapping and height mapping are two names for "almost" the same technique, they aim to do the same effect but are used in different contexts.

To explain more:

Displacement Mapping: Is a technique that aims to render bumps as true geometry, in a very fine mesh. Unlike bump mapping, parallax, and relief mapping which tries to "fake" bumps using normal maps, Displacement mapping actually displaces the surface, creating triangles between the texels. .

Height Mapping: is the same thing, but it's usually used in the context where a displacement map (also called height map) is applied on a terrain where the value are only used to modify the vertex height.

It can be implemented on the CPU or the GPU.

One common CPU approach is to read height or displacement values from a height/displacement map(texture) where each texel directly maps to one vertex. Where each texel encodes a height/displacement value. This is then applied directly to the geometry by displacing each vertex using the looked up value in a unique direction.

Choosing the direction can be in the Up direction (usually in case of terrains), which results in modifying the vertex Y value, or could be in the direction of the face normal usually used on objects other than terrains.

A GPU alternative is to use the vertex texture fetch feature (introduced in Shader Model 3.0) to have a the terrain mesh modified by accessing a displacement/height map The height retrieved from the texture is used by the vertex shading program to modify the vertex's location.

Other uses for Using a texture allows for faster manipulation of data for wave simulations and other animations to apply to the mesh.

Regarding adaptive tessellation:

One draw back of displacement mapping is that for large terrains you need a lot of polygons and vertices to model a detailed terrain which makes displacement maping somehow inefficient for large terrains.

This is where adaptive tessellation and level of detail techniques come to play to make displacement mapping more feasible, especially with the advancement of the GPUs and introducing geometry shaders, performing tessellation on the fly with this advancement has become the dominant technique. It is simple to program and on newer GPUs and has few drawbacks.

Other techniques like relief and bump mapping offer additional realism at a generally reasonable cost, but the fact that the base surface is unperturbed makes collision detection, and therefore object interaction, more challenging.

As a conclusion Displacement mapping and adaptive tessellation brings superior detail and quality with less draw backs at a feasible performance cost.

\$\endgroup\$
  • \$\begingroup\$ Don't forget the last part of the question "and what is the connection to adaptive tessellation?" \$\endgroup\$ – MichaelHouse Nov 12 '13 at 18:11
  • \$\begingroup\$ @Byte56 thanks for notifying me I updated the answer. \$\endgroup\$ – concept3d Nov 12 '13 at 18:44
12
\$\begingroup\$

Displacement mapping can mean (but doesn't always mean) a vector displacement at each point on the surface. Height mapping implies only a scalar displacement value, i.e. each point gets pushed along its normal. The term "displacement mapping" can also be used for scalar displacements, though, so when vector displacements are discussed, people often explicitly say "vector displacement mapping".

Tessellation can be used to apply a displacement map, by subdividing a surface into small polygons and applying a displacement (looked up from the map) to each vertex of the subdivided surface. The level of subdivision you need depends in part upon how noisy/detailed the displacement map is, so adaptive tessellation can be used to subdivide more finely in the areas that have more detail, but less in the areas that are flatter, improving performance.

\$\endgroup\$
  • \$\begingroup\$ This is the objectively correct answer. The subtle difference will become vastly more important as beginners find more tessellation code to copy paste. (Procedural vector displacement has already been showcased by nVidia) \$\endgroup\$ – MickLH Nov 15 '13 at 13:37
3
\$\begingroup\$

Basically, they are the same thing.

Displacement mapping is a technique for adding surface detail, like bump mapping. Unlike bump mapping, however, displacement mapping is about actually deforming the geometry based on some input height map (essentially a grid of elevation values).

"Displacement mapping" is basically another, more technically accurate, term for what is colloquially known as "height mapping" (strictly speaking, "height mapping" probably should refer to the process of generating the grid of elevation data from some source material, such as a 3D scanner, that will be used in a displacement mapping implementation -- but in practice most people just use the terms interchangeably, if they even say "displacement mapping" at all).

The technique is not directly tied to adaptive tessellation, which is itself about controlling the breakdown of a mathematical description of a mesh (such as a sphere) into the concrete collection of triangles that will be used to render that mesh. The "adaptive" bit means that the tessellation detail will change based on some input criteria, such as view distance.

In the sphere case, for example, you can tessellate that sphere very crudely (effectively as a cube) when that sphere is very far away, but use more detail when the sphere is close.

Often you will see techniques like displacement mapping discussed in conjunction with tessellation because the tessellation will affect how you want to map the elevation map to the geometry to perform the displacement (or which resolution of the elevation map you want to select, et cetera).

\$\endgroup\$
2
\$\begingroup\$

They are the same concept.

EDIT: Displacement can be composed of heights in more than one dimension!

Don't start any semantic wars over this, but realistically, height mapping usually refers to large scale / tessellation based techniques, where displacement mapping usually refers to small scale / raytracing techniques.

\$\endgroup\$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.