POM height

Regarding the parallax occlusion mapping, is it somehow possible to offset the height? I’ve got an object that could use POM, but some of the normal map details stick out and others are carved in. If I use the POM node in the material editor, everything is either carved in or extruded out. This is because the entire height map ranges from fully carved in to fully extruded out, so the 0 height is somewhere in between, instead of full white or full black, which means I need to offset the height of the parallax effect, but so far I can’t find anything about it.

I can’t show any pictures yet, because I removed the effect so I could continue to work on other things. Also, the original height map is really bad, but the effect worked.

I was under the impression that the POM node only “pushes in” as of now, making your highest values at the 0 height.

Yep, that was my impression too. Well, if that is the case, parallax occlusion won’t work for me right now.

I do recall RyanB saying something about being able to make it “push out” as well, though. Let me try to find the post.

EDIT:

Here it is: POM material - Rendering - Unreal Engine Forums

Okay thanks, I’ll look into trying that once I’ve finished the textures.

I was offsetting the height by adding a fraction of the height-scaled tangent space camera vector into the UVs before going into the parallax function. Also note that the offset has to be included in the UVs that are added back to the raw offset after the custom node:

6f55494407bc4e5e76f737225521ef968bb627b7.jpeg

Here a value of 0 would represent no offset. A value of -1 would offset by one height value, meaning the POM would push up from the floor instead of down. -0.5 would make it a centered offset. You could probably put a constant subtract 1 in the material so the parameter could be in the 0-1 range.

Note that currently when doing this, if the camera actually goes below the virtual top of the box that this offset creates, there will be a strange upside down projection of the POM. I am not yet sure how to fix that without adding extra instructions. See if it shows up in your use case.