Pixel depth offset
A material output that pushes each pixel's depth back from the camera, so other surfaces win the depth test there; used to soften intersections with a dither and to let parallax-mapped surfaces intersect correctly, at a cost.
Pixel depth offset (PDO) is a material output that changes how far from the camera each pixel is recorded in the depth buffer, without moving any geometry. Epic's documentation says it "can be used to control pixel depth in the shader graph using logic you set up", which "enables you to create your own logic to blend or fade objects based on their scene depth" (Unreal Engine 4.27 documentation: Material Inputs).
Where two surfaces overlap on screen, the GPU keeps the one closest to the camera. If a material pushes some of its pixels back, the surface behind can win in those places. That is all PDO does, and it is enough for two common jobs: softening intersections and making fake depth from parallax occlusion mapping intersect properly.
#Softening intersections with a dither
When a rock is pushed into the ground, the two surfaces cross in a sharp, straight line (see blending meshes into terrain). With PDO, the rock's material can push its pixels back by varying amounts near the ground, so in a band around the intersection some pixels show rock and some show ground.
Epic's example combines PDO with the DitherTemporalAA material function, which sets an "offset" value "that blends the ground with the object intersecting it using a stipple pattern texture" (Unreal Engine 4.27 documentation: Material Inputs). The stipple alone looks noisy; the engine's temporal anti-aliasing blurs it across frames into a soft transition.
On the Polycount thread about Star Wars Battlefront's terrain blending, leleuxart suggests that PDO with DitherTemporalAA in Unreal can approximate the soft blend seen in that game, with the rest coming from world-space textures and detail maps (Polycount: Battlefront's Level Construction - how can…).
#Use with parallax occlusion mapping
Parallax occlusion mapping makes a flat surface look deep by shifting texture coordinates per pixel. The depth buffer still holds the flat surface, so objects placed on a POM floor, and decals projected onto it, intersect the flat plane rather than the visible bumps. Writing the marched depth through PDO lets other objects sink into the fake relief at the right height; see the POM page for how Unreal's POM function exposes this output.
#How to set it up
These steps soften a rock's intersection with the ground in Unreal Engine.
- Open the rock's material and check that its Pixel Depth Offset input is available (it is a standard material input (Unreal Engine 4.27 documentation: Material Inputs)).
- Build a height mask. Create a gradient that is 1 at the bottom of the rock and 0 about 30–50 cm up, for example from world position Z relative to the ground.
- Add DitherTemporalAA. Feed the mask into the DitherTemporalAA function so the transition becomes a stipple pattern (Unreal Engine 4.27 documentation: Material Inputs).
- Scale the offset. Multiply the result by an offset distance (start around 20–50 units for a large rock) and connect it to Pixel Depth Offset.
- Test with temporal anti-aliasing on. The stipple only reads as a soft blend when the anti-aliasing method blends over time.
- Check shadows and other passes. Look at the shadow where the rock meets the ground; in Unity, one user found his depth-offset workaround did not stop an impostor quad affecting shadows (Unity Discussions: Depth output for shader graph -> PDO (Pixel…).
- Profile it. Compare GPU time and, on Nanite meshes, check the cost described below.
#Video tutorials
#Costs and limits
- Nanite. Epic needed a programmable rasterizer for Nanite in Fortnite Chapter 4, partly to "reduce the cost of masked materials and materials with Pixel Depth Offset" (Unreal Engine tech blog: Bringing Nanite to Fortnite Battle Royale in…). Treat PDO materials on Nanite meshes as more expensive than plain opaque ones and profile them; see virtualised geometry.
- Temporal blur. A dithered blend depends on temporal anti-aliasing to hide the stipple, so it can shimmer or smear in motion.
- Engine support. HDRP has a Depth Offset output in Shader Graph, while URP Shader Graph users were still asking for one in 2025 (Unity Discussions: Depth output for shader graph -> PDO (Pixel…).
#Use in shipped games
PDO is an engine feature, so studios rarely mention it in breakdowns. Fortnite Battle Royale Chapter 4 (Epic Games) is a documented case: its move to Nanite had to handle materials with Pixel Depth Offset, which led to the programmable rasterizer (Unreal Engine tech blog: Bringing Nanite to Fortnite Battle Royale in…). For Star Wars Battlefront (DICE, Frostbite), PDO is only a practitioner's suggestion for reproducing the look in Unreal, not a documented technique of the game (Polycount: Battlefront's Level Construction - how can…).
#In different tools
- Unreal Engine: a Pixel Depth Offset input on the material, usually combined with DitherTemporalAA (Unreal Engine 4.27 documentation: Material Inputs).
- Unity HDRP: Depth Offset output in Shader Graph (Unity Discussions: Depth output for shader graph -> PDO (Pixel…).
- Unity URP and built-in: no Shader Graph depth output as of the 2023–2025 discussion; users point to Amplify Shader Editor, which "already supports this feature for URP and built-in shaders" (Unity Discussions: Depth output for shader graph -> PDO (Pixel…).
#Further reading and watching
Related pages: blending meshes into terrain, skirts, parallax occlusion mapping, Z-fighting, opacity, masked and translucent materials, virtualised geometry.
References
- · Material Inputs (Pixel Depth Offset) · Unreal Engine 4.27 documentation · docs · accessed 2026-10-22
- · Battlefront's Level Construction - how can everything just sort of match and blend? · Polycount · forum · accessed 2026-10-22
- · Depth output for shader graph -> PDO (Pixel Depth Offset) -> terrain blending -> billboard shadows · Unity Discussions, 2023 · forum · accessed 2026-10-22
- · Object Blending with Dither Fade, Pixel Depth Offset and Distance Fields · YouTube · video · accessed 2026-10-22
- · Bringing Nanite to Fortnite Battle Royale in Chapter 4 · Unreal Engine tech blog, 2023 · article · accessed 2026-10-22
Also consulted
- · The Gathering Area (Unreal 5, 2026) · ArtStation, 2026 · web · accessed 2026-10-22
Pages that link here
- Skirts (terrain and blend skirts) Key term
- Parallax occlusion mapping Key term
- Blending meshes into terrain Topic
Last updated 2026-10-22