LAUNCH OFFER€25 in free credits when you sign up, no card requiredClaim the offer
    TURNA, Blender render farm
    Back to the Blender guides

    Displacement in Blender: real displacement, maps and bump

    T
    TURNA technical team
    30 October 2026
    12 min

    Short answer

    A displacement map is a height or vector texture that moves the actual surface of a mesh at render time, so the silhouette changes and the detail casts real shadows. In Blender, connect the map (set to Non-Color) through a Displacement node to the Displacement socket of the Material Output, set Material Properties > Settings > Surface > Displacement to Displacement Only or Displacement and Bump, and give the mesh enough geometry, ideally with adaptive subdivision in Cycles.

    • Method: Material Properties > Settings > Surface > Displacement. Bump Only is the default; real displacement needs Displacement Only or Displacement and Bump.
    • Wiring: Image Texture (Non-Color) to Displacement node (Height) to Material Output (Displacement).
    • Geometry: a Subdivision Surface modifier, last in the stack, with Adaptive Subdivision in Cycles (no longer experimental since Blender 5.0).
    • Cost: dense dicing takes memory and render time; Render Properties > Subdivision controls it.

    This guide covers shader displacement in Cycles and EEVEE, the Displace modifier and bump mapping. Menu names and defaults match Blender 5.2 and were checked against its manual and source code.

    What is a displacement map?

    A displacement map is a texture that moves the actual surface of a mesh at render time. A height map is grayscale and pushes each point in or out along the surface normal; a vector displacement map stores a full offset in its three color channels and can push points in any direction. Displacement mapping is the technique that applies the map to real geometry, which is why artists call the result real displacement or true displacement.

    Because the surface really moves, the silhouette changes, raised parts hide what lies behind them and the detail casts shadows on itself, all things bump, normal and parallax mapping can only fake. The flip side: Wikipedia calls displacement mapping the most costly technique of the group, because of all the geometry it adds.

    Real displacement vs bump map vs normal map

    TechniqueWhat the texture storesMoves geometrySilhouette and self-shadowingCost
    Bump mapA grayscale heightNoNoLow, shading only
    Normal mapA direction per pixel, in RGBNoNoLow, shading only
    Real displacementA height or a vector offsetYesYesHigh: dense geometry, the most memory

    Bump and normal maps only change the normal used for shading; the guide to normal maps in Blender covers that side. The three are often stacked: displacement for the large shapes that break the silhouette, bump or normal maps for pores and scratches.

    How to set up real displacement in Blender, step by step

    These steps use Cycles, the engine with adaptive subdivision. EEVEE differences follow.

    1. In Render Properties, set Render Engine to Cycles.
    2. In the Modifiers tab of the Properties Editor, choose Add Modifier > Generate > Subdivision Surface. Keep it last in the stack.
    3. Tick the checkbox in the header of its Adaptive Subdivision subpanel, which Blender only shows when the engine is Cycles and the modifier is the last one.
    4. In the Shader Editor, add an Image Texture node, open the displacement map and set its Color Space to Non-Color.
    5. Add a Displacement node from Add > Displacement > Displacement and connect the image's Color output to its Height input.
    6. Connect the node's Displacement output to the Displacement socket of the Material Output node.
    7. In Material Properties > Settings > Surface, set Displacement to Displacement Only or Displacement and Bump. Until you do, Blender renders the displacement as bump only.
    8. Switch the viewport to Rendered shading and tune Scale and Midlevel on the Displacement node.

    The Displacement node

    • Height: the distance to displace the surface along the normal. This is where the texture goes, image or procedural.
    • Midlevel: the value that causes no displacement, 0.5 by default. Lower values push the surface in, higher values push it out. A map that stores signed values, with zero meaning no change, needs Midlevel at 0.
    • Scale: increases or decreases the amount of displacement. A new node starts at 0.01 in Blender 5; in Blender 3.6 the default was 1.0, worth knowing when you follow an older tutorial.
    • Space: Object Space, the default, makes the displacement scale along with the object; World Space ignores the object's scale.

    The Vector Displacement node

    Add > Displacement > Vector Displacement takes a Vector input instead of Height, usually a baked vector displacement image, and displaces the surface along arbitrary directions, so detail can lean sideways in a way a height map cannot. Its Space is either Tangent, for meshes that deform such as animated characters, or Object, which the manual says works for static meshes and renders slightly faster with less memory. Midlevel and Scale work as on the Displacement node.

    Choosing the Displacement method

    • Bump Only, the default, changes only the shading normal. It is the most memory efficient, but the manual warns that silhouettes will not be accurate and the displacement will not shadow itself.
    • Displacement Only: mesh vertices are displaced before rendering, modifying the actual mesh. It gives the best quality on a finely subdivided mesh and is the most memory-intensive method.
    • Displacement and Bump: displacement on a coarser mesh, bump mapping for the final detail.

    EEVEE reads the same setting in Material Properties > Settings > Surface, but Displacement Only is not supported there and falls back to Displacement and Bump. EEVEE moves the vertices the mesh already has and offers no adaptive subdivision, so the detail you get depends on how dense the mesh is. Max Distance, active once the method is not Bump Only, sets how far a vertex may move. Go past it and the manual describes two failures: the object can vanish through camera culling at the edge of the screen, and shadows can stop updating where the displaced geometry is.

    Giving displacement enough geometry

    Real displacement can only move vertices that exist. A cube with eight vertices has nothing to give a brick map, which is why the manual says the mesh must be finely subdivided for Displacement Only.

    Subdivision Surface levels

    Without adaptive subdivision, the modifier's Levels Viewport and Render set how many times the mesh is subdivided in the viewport and in the final render. Each level brings more vertices, and the manual reminds you that more vertices means more memory. The whole object gets the same density, including the parts far from the camera. The guide to the Subdivision Surface modifier covers levels, creases and topology.

    Adaptive subdivision in Blender 5.x

    Adaptive subdivision subdivides objects based on their distance to the camera, which the manual calls particularly useful for fine displacement detail. Up to Blender 4.5 it required the Experimental feature set. Since 5.0 it is no longer experimental and always available in the Subdivision Surface modifier, and the 5.1 and 5.2 release notes list no further change. Its settings live in two places.

    • On the modifier, Adaptive Subdivision subpanel: Space on Pixel subdivides until polygons reach a target Pixel Size on screen; on Object, it targets an Edge Length, which the manual says is required for instanced meshes. The panel then shows the resulting size for Viewport and Render: the Pixel Size multiplied by the scene dicing rates.
    • In Render Properties > Subdivision: Dicing Rate Render (1.0 by default) and Viewport (8.0) multiply the micropolygon size; Offscreen Scale (4.0) raises the dicing rate outside the camera view; Max Subdivisions (12) caps the level; Dicing Camera fixes the reference camera to avoid crawling artifacts when the scene camera moves.

    With the Viewport rate at 8, displacement looks softer in the Rendered viewport than in the final image. And for scattered objects, note that Cycles does not support unique displacement per instance.

    The Displace modifier: displacement in the mesh itself

    The Displace modifier (Add Modifier > Deform > Displace) moves mesh vertices according to the intensity of a texture, procedural or image. Direction can be X, Y or Z, Normal (along the vertex normal), Custom Normal, or RGB to XYZ, which reads the three channels as a vector displacement. Midlevel is the texture value treated as no displacement and Strength scales the result: the offset is the texture value minus Midlevel, times Strength. With the Texture field empty, the modifier uses 1.0, plain white. For an image painted or baked on the UV map, set Coordinates to UV.

    Because it changes the mesh itself, the result shows in the viewport, every render engine sees it, and the modifiers below it work on the displaced shape. Modifiers are calculated from top to bottom, so put a Subdivision Surface above Displace to give it vertices to move. Prefer the modifier when other modifiers or Geometry Nodes must act on the displaced surface or when you model around the result. Prefer shader displacement with adaptive subdivision when an object runs from close-up to far away: the modifier's density is the same everywhere, while the dicing rate follows the camera.

    What displacement costs in memory and render time

    In Cycles, the vertices are displaced before rendering, and the subdivided, displaced mesh has to fit in memory with the rest of the scene. The manual calls Displacement Only the most memory-intensive method. To keep it under control:

    • Raise Dicing Rate Render until the detail starts to soften at final resolution: polygons twice as wide on screen means roughly a quarter as many.
    • Raise Offscreen Scale: higher values use less memory, lower values give better reflections and shadows of off-screen objects.
    • Keep Max Subdivisions as a ceiling for objects that come very close to the camera.
    • Use Displacement and Bump on a coarser mesh, which the manual presents as a good balance to reduce memory. Once the mesh is very finely subdivided, switch to Displacement Only: the bump then only adds memory and slows renders down.
    • Displace only what the camera sees up close; background objects rarely need more than a bump.
    • In EEVEE, displacement is not precomputed and its cost is multiplied by the render sample count, though the manual says it is much faster than doing it with Geometry Nodes or a displacement modifier.

    The cost depends on the camera, so measure it: render one frame with the final displacement settings at full resolution, then feed that time and the frame count into the render time calculator to see what the whole sequence will take.

    Bump map and bump mapping in Blender

    A bump map is a grayscale height texture that changes only the shading normal. Bump mapping dates back to James Blinn in 1978; the surface geometry is not modified, so silhouettes and shadows stay those of the smooth surface. Blender offers two routes. The first is to send the height through a Displacement node into the Material Output and leave the method on Bump Only. The second is the Bump node (Add > Displacement > Bump): the height goes into Height and its Normal output into the Normal input of the shader.

    The node samples the height at the shading point and two nearby points to estimate the slope. Strength fades from no bump to full bump, Distance multiplies the height, Invert pushes into the surface instead of out, and Filter Width (0.1 by default) gives stepped textures a bevel-like edge when raised. Set the Image Texture's Interpolation to Cubic, which the manual recommends for bump maps. When the real shape and the bumped shape drift too far apart, bump produces artifacts: lower its strength or move to real displacement.

    Common displacement mistakes

    • Method left on Bump Only: the surface looks embossed, but edges stay straight and the relief casts no shadow. Change the material's Displacement setting.
    • Map read as Color: with a color space other than Non-Color, Blender transforms the values as if they were colors, the neutral gray no longer matches Midlevel and the whole surface shifts in or out.
    • Wrong Midlevel: the object swells or shrinks evenly. Match Midlevel to the map's neutral value, 0.5 for mid gray, 0 for a signed map.
    • Too little geometry: blurry, blocky or missing detail. Enable adaptive subdivision or raise the levels; a missing Adaptive Subdivision subpanel means the modifier is not last or the engine is not Cycles.
    • Scale too high: spikes and surfaces that cut through each other. With Object Space, an object scaled up also scales its displacement.
    • 8-bit maps: visible terraces, since 8-bit images often cannot represent all the detail. Use 16 or 32-bit float maps.
    • Seams: any break in the map, such as a UV seam where both sides were painted differently or a tile that does not repeat cleanly, becomes a step in the geometry. In EEVEE, displacing flat-shaded geometry also splits adjacent faces.

    Where displacement maps come from

    • Your own sculpt. With a Multiresolution modifier, Render Properties > Bake > Bake from Multires bakes a Displacement map (grayscale heights) or a Vector Displacement map (full 3D offsets), from the Viewport Levels as the base to the Render Levels as the detail. Save it as a 16 or 32-bit float image, such as OpenEXR. The guide to texture baking in Blender walks through the bake settings.
    • Texture libraries. PBR texture sets often include a height or displacement map next to the color, roughness and normal maps. Load it as Non-Color like the other data maps; the guide to textures in Blender explains Image Texture and UV mapping.
    • Procedural textures. Any texture node can drive Height directly, with no image file at all.

    Frequently asked questions

    What is the difference between real displacement and a bump map?

    Real displacement moves the surface itself, so the silhouette changes and the detail casts shadows on itself. A bump map only changes the shading normal: it is much cheaper, but the edges of the object stay smooth and the fake relief casts no real shadow.

    Why is my displacement not showing in Blender?

    Most of the time the material is still on Bump Only, the default: set Material Properties > Settings > Surface > Displacement to Displacement Only or Displacement and Bump. Then check that the mesh is subdivided enough and that Scale on the Displacement node is not too small (a new node starts at 0.01 in Blender 5).

    Where is adaptive subdivision in Blender 5?

    On the Subdivision Surface modifier, in its Adaptive Subdivision subpanel, which appears when the render engine is Cycles and the modifier is last in the stack. Since Blender 5.0 it no longer needs the Experimental feature set. The dicing rates are in Render Properties > Subdivision.

    Does EEVEE support real displacement?

    Yes, through Displacement and Bump: EEVEE moves the existing vertices, and Displacement Only falls back to that mode. EEVEE has no adaptive subdivision, so the mesh needs enough real geometry, from a Subdivision Surface modifier for example.

    Should a displacement map be Non-Color?

    Yes. A displacement map stores data encoded as colors, and Non-Color reads it without any color transform. Prefer 16-bit or 32-bit float files, since the manual warns that 8-bit images often cannot represent all the detail.

    Displace modifier or Displacement node?

    The Displace modifier moves real mesh vertices, so the result shows in the viewport and in any render engine, at the same density everywhere. The Displacement node works in the material at render time and, with adaptive subdivision in Cycles, adds detail where the camera needs it.

    Rendering the animation on TURNA

    When a scene is already well optimised and the frame count is what takes the time, the remaining lever is rendering several frames at once. TURNA does this for Blender: an add-on (Blender 4.0 to 5.2, Cycles and Eevee) sends the scene in one click, and the frames are split across 1, 2, 4 or 8 GPUs in parallel, RTX 5090 first and RTX 4090 when none is free. The add-on shows the estimated cost before anything starts. Prices start at €4.90 per hour, billed on the time actually used, with a 2-minute minimum (30 seconds until November 9), and new accounts get €25 of free credit. A single still image is still rendered by one machine, so the gain is on animations. Tiers and worked examples are on the Blender render farm page.