Yes I have an example project in the works. It is most likely going to make it for 4.10 but there is a slight it will have to wait until 4.11 due to the way 4.10 is branched from 4.9 and not main.
It will look something like although probably converted into a ContentExamples type hallway. A few materials with varying levels of options enabled for each such as Pixel Depth Offset and Shadows:
Also there has been some progress on POM for curved surfaces. I made a debug version of POM that renders a 2d cross section with dots for each step location. Then by creating a curved ring mesh I can debug exactly what it looks like when a ray traces through a curved surface and make sure the math corrections result in a straight line.
To show why curved surfaces do not work with the current simple-POM, look at image:
Here we have a POM material applied to the checkerbox cylinder and then a cross section of a single ray through that cylinder is displayed using a translucent mesh. Using an editable widget I can drag around the cross section in realtime and see where the ray hits for any part of the heightmap as well as rotate the tracing angle. The green line is the initial starting ray that can be rotated by rotating a BP vector widget.
The thing to take note of here is that the line that gets traced in the POM material is curved as shown by the red dots (and the yellow is where the POM material found intersection). But if you look up at the top (which shows a non-curved version of the same exact material), you can see that the ray was actually straight in UV texture space.
If you line up the camera with the debug line, you can see how the bending ray causes the POM material to intersect where the dots indicate, near the bottom corner:
The thing to solve is how much to bend the ray to counteract the curving that the heightmap is doing. For that I am using a radius of curvature defined in UV space. So for example my test cylinder does exactly 1 UV wrap around the cylinder to make things simple. That means that the circumference of the circle is 1 in uv terms, and by definition the radius of the curvature is 1/2pi (since circumference is 2pir and in case we know the circumference is 1 in UV space we have r=1/2pi). So for example the radius of curvature is 1/2pi. For simplicity I use the inverse of which is the length of a circle in radians which is convenient. So a full circle is simply 2pir of curved length. You also have to account for the scaling of the heightmap since the ratio of the outer to inner radii determines how close the ray is to the center of the cylinder at any point.
To make the math a bit cheaper, instead of using full rotate-about-axis matrix for the vector rotation, I instead convert the initial ray into an angle and then perform the vector rotation as a simple 2d rotation which is only a sine and cosine in the loop.
Ray with curved correction (heightmap height is 0.1 here):
Moving the cross section around you can see it hit the various parts of the heightmap. Note that the curvature correction is only being applied to the debug line here, not the actual POM material which is why the POM material is not lining up near the edge of the cylinder (it lines up ok when looking mostly down)
There are also limits to how much height your heightmap can use. In our example case, the maximum height value is literally 1/2pi which is ~0.159. If you go any higher, the heightmap would be taller than the radii and thus the bottom of the heightmap would never be hit. If I set the height to be 0.159 you can see how its perfectly fitting:
Also note that since the inner radius is essentially 0 here, the ray completely veers away from the bottom as it approaches the bottom. To actually hit the bottom requires a perfectly downward ray, even a tiny side direction causes it to bend away from the bottom (here its at around 1 degree)
is still a ways off from being user friendly or fully implemented and tested on wide range of content. Still working on the part where the 3d vector is rotated as a 2d vector but its looking good so far. Right now I am relying on a user specified curvature axis but the radius is being solved using ddx/ddy. So it works for general case cylinders or walls that bend only around X or tree roots etc.