Parallax Occlusion Mapping

Hey guys,

I’m playing around with Parallax and Displacement shaders and I cant seem to be able to achieve the satisfying result.
POM works sort of okay, but it’s extremely expensive. Displacement causes the geometry to be heavily subdivided for a desired effect.

Did anybody figure out to make cheap POM shader with decent results?

Any help is appreciated.

There’s a giant thread on it and an hour long Livestream about it on Unreal Engine’s YouTube channel. If you still cannot get good results after looking at both of those, you should post some screenshots and examples besides “I’m not satisfied”. That gives us nothing to go off of when trying to help.

It’s a very math heavy function and there isn’t a whole ton you can do to simplify it. You’re creating virtual slices and have to calculate everything per slice; in order to fake the depth effect. Too few and it will make it look like you’re looking through a set of blinds. Too many and you’ll suffer in performance.

So, it’s better to go with geometry and aggressive LODs. Just like I suspected, but was hoping to avoid.

POM cost is mainly per-pixel, while Tess cost is mainly per-vertex. At 1080 and below resolutions POM will commonly give you more detailed surface at significantly lower impact. Parallax Occlusion Mapping material function, which is part of engine, is not the most performing one. You can appreciably reduce the cost.

POM is not math heavy at all, and the bottleneck is always the texture read, so reducing the heightmap resolution will give the best performance increase alone.

However, you need changes done to UE4 in order to have proper dynamic shadowing and self-shadowing with POM, which makes tessellated displacement preferable overall in UE4(to be fair, any engine, using deferred shading).

Thank you for the comprehensive and detailed answer.
I’m actually planning this to run on Forward rendering. I’m 99% positive, POM walls won’t run on 90 FPS. I’m going with displacement for now.

When it has to be looped per step, yes, it definitely is math heavy… If you’re using 1 step, no, not really, but the cost goes up linearly based on the number of steps. Rendering 16 steps would cost approximately 16x what it would for a single step. That’s what was meant by math heavy.

PoM works great on small to medium sized objects, due to being on the pixel shader end, but I definitely wouldn’t recommend it for walls or things that are regularly going to be taking up half the screen unless you’re working with a pretty low step count.