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.
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
- Install MK SSDM+ from Fab and enable it in Edit › Plugins. Restart the editor.
- Open Project Settings › Plugins › MK SSDM Plus. Check Enabled and pick a Mode.
- In a material, add the
MK_SSDM_Heightnode and connect your height (in cm) to its Height pin. See Material setup. - Apply the material to a mesh or landscape. The surface displaces in the viewport.
- Fine-tune in Window › MK SSDM Plus Settings, or set
r.MKSSDMPlus.Qualityto pick a preset.
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.
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.
| Where | What it holds |
|---|---|
| Project Settings › Plugins › MK SSDM Plus | Enabled (master switch: no height pass, displacement or shadows when off) and Mode. |
| Window › MK SSDM Plus Settings | Panel for every tuning value below. |
| Console | All r.MKSSDMPlus.* variables. A console command or scalability setting applied later overrides the Project Settings switches, which keeps them handy for debugging. |
Modes
| Mode | Runs |
|---|---|
| Screen Space Displacement | Height pass and displacement |
| Contact Shadows | Height pass and contact shadows |
| Both default | Height 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.
| Variable | Low (0) | Medium (1) | High (2) | Epic (3) |
|---|---|---|---|---|
Resolution | 0.5 | 1.0 | 1.0 | 1.0 |
FilterQuality | 0 | 0 | 1 | 2 |
LowPass.Radius | 3 | 5 | 5 | 6 |
CreaseSmooth.Radius | 3 | 6 | 6 | 8 |
SilhouetteFade.Radius | 3 | 4 | 4 | 6 |
ContactShadows.Steps | 8 | 12 | 20 | 32 |
ContactShadows.Length | 40 | 50 | 50 | 60 |
ContactShadows.HalfRes | 1 | 1 | 1 | 0 |
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.
No variables match.
Troubleshooting
| Problem | Try |
|---|---|
| Nothing displaces | Check 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 buffer | r.MKSSDMPlus.DebugView 1; raise DebugScale if it looks black. |
| See only the contact shadows | r.MKSSDMPlus.ContactShadows.Debug 1 |
| Fine detail shimmers under TAA/TSR | Raise LowPass.Radius or lower LowPass.Start. |
| Hard edges tear apart | Raise CreaseSmooth.Radius or lower CreaseSmooth.Threshold. |
| Object edges tear as the camera moves | Raise SilhouetteFade.Radius. |
| Seam where terrain meets a buried mesh or a character | Set OcclusionRamp.Radius above 0. |
| Undisplaced strip at the screen edge | Try EdgeClampSlope 0.2–0.4. Higher keeps more displacement but warps more. |
| Seam or aliasing in the far distance | Lower DepthFade.Start and DepthFade.End. |
| Ghosting on displaced pixels with TSR | Set TemporalResponsiveness to 1. |
| Displaced surface looks too dark | Lower ContactShadows.SelfShadow (0 if the material already lights its detail). |
| Too expensive | Use 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.
| Version | Changes |
|---|---|
| 0.1 | First release on Fab. UE 5.8, Win64. |