Michael Kinsey
MK SSDM+ · Documentation

SSDM+ docs

Screen space displacement and height-aware contact shadows for Unreal Engine. Materials write a height through the MK_SSDM_Height node, a custom mesh pass collects it into one height buffer, and both effects read from that buffer.

v0.1UE 5.8Win64Nanite not supported

Requirements

  • Unreal Engine 5.8 on Windows (Win64).
  • Nanite is not supported. Use SSDM+ on regular, non-Nanite meshes and landscapes.
  • A directional light in the level for contact shadows.
  • A Lit view mode. Displacement doesn't run in unlit or debug view modes.

Quick start

  1. Install MK SSDM+ from Fab and enable it in Edit › Plugins. Restart the editor.
  2. Open Project Settings › Plugins › MK SSDM Plus. Check Enabled and pick a Mode.
  3. In a material, add the MK_SSDM_Height node and connect your height (in cm) to its Height pin. See Material setup.
  4. Apply the material to a mesh or landscape. The surface displaces in the viewport.
  5. Fine-tune in Window › MK SSDM Plus Settings, or set r.MKSSDMPlus.Quality to pick a preset.
DemoOpen the SSDM_Plus map in the plugin's content folder to see a landscape set up with RVTs, plus a working landscape material.

Material setup

Add MK_SSDM_Height to any material that should displace. Only materials that use the node are drawn into the height buffer, so everything else costs nothing.

HeightDisplacement amount in world space, in centimetres. Typically HeightMap × Amplitude.
DirectionOptional world-space direction (float3). Leave it unconnected to displace along the smooth vertex normal.
TipIf your material already lights its displaced detail with a matching normal map, set r.MKSSDMPlus.ContactShadows.SelfShadow to 0 so the surface isn't darkened twice.

Decals

Decals can write height too. Use a Deferred Decal domain material with the MK_SSDM_Height node, either on a decal component or on a mesh. Inside the decal, its height replaces the surface height underneath.

r.MKSSDMPlus.Decals turns all decal height on or off. r.MKSSDMPlus.Decals.Deferred turns decal components alone on or off.

Settings & modes

Project Settings holds only the master switches. Every tuning value is a console variable, editable in the settings panel or the console.

WhereWhat it holds
Project Settings › Plugins › MK SSDM PlusEnabled (master switch: no height pass, displacement or shadows when off) and Mode.
Window › MK SSDM Plus SettingsPanel for every tuning value below.
ConsoleAll r.MKSSDMPlus.* variables. A console command or scalability setting applied later overrides the Project Settings switches, which keeps them handy for debugging.

Modes

ModeRuns
Screen Space DisplacementHeight pass and displacement
Contact ShadowsHeight pass and contact shadows
Both defaultHeight pass, displacement and contact shadows. Both read the same buffer, so shadows match the displaced surface.

Quality presets

Set r.MKSSDMPlus.Quality to 0–3. It's a scalability variable, so it can follow your project's scalability levels. A value you change by hand afterwards wins over the preset.

VariableLow (0)Medium (1)High (2)Epic (3)
Resolution0.51.01.01.0
FilterQuality0012
LowPass.Radius3556
CreaseSmooth.Radius3668
SilhouetteFade.Radius3446
ContactShadows.Steps8122032
ContactShadows.Length40505060
ContactShadows.HalfRes1110

Medium is the default. Names above drop the r.MKSSDMPlus. prefix.

Console variables

Every variable starts with r.MKSSDMPlus.. Defaults are the built-in values before a quality preset is applied.

Troubleshooting

ProblemTry
Nothing displacesCheck Enabled and Mode in Project Settings, that the material uses MK_SSDM_Height, that the view is Lit, and that the mesh isn't Nanite.
See what's in the height bufferr.MKSSDMPlus.DebugView 1; raise DebugScale if it looks black.
See only the contact shadowsr.MKSSDMPlus.ContactShadows.Debug 1
Fine detail shimmers under TAA/TSRRaise LowPass.Radius or lower LowPass.Start.
Hard edges tear apartRaise CreaseSmooth.Radius or lower CreaseSmooth.Threshold.
Object edges tear as the camera movesRaise SilhouetteFade.Radius.
Seam where terrain meets a buried mesh or a characterSet OcclusionRamp.Radius above 0.
Undisplaced strip at the screen edgeTry EdgeClampSlope 0.2–0.4. Higher keeps more displacement but warps more.
Seam or aliasing in the far distanceLower DepthFade.Start and DepthFade.End.
Ghosting on displaced pixels with TSRSet TemporalResponsiveness to 1.
Displaced surface looks too darkLower ContactShadows.SelfShadow (0 if the material already lights its detail).
Too expensiveUse a lower Quality, lower Resolution, or ContactShadows.HalfRes 1.

Support

Found a bug or need help? Contact Michael Kinsey through the Fab listing's support link.

VersionChanges
0.1First release on Fab. UE 5.8, Win64.