From what I’ve been able to find, there is very little information about POM in general, but according to what I could find, POM is a supported feature on mobile. However, after switching from Shader Model 5 to Default High-End Mobile the effect is completely gone. Do I have to toggle something somewhere, or does it work differently? Is there some other way to fake it on mobile?
For anyone stumbling upon this, I have found a solution. Inside the blueprint for your material, doubleclick the POM-node to inspect it. There are switches for various platforms. Cut ties so that your end result looks like the image below for each output, and save. This will make POM function in the exact same way on Default High-End Mobile (OpenGLES 3.1, Metal and Vulkan). It will not however work in OpenGLES 2 as POM requires DDX and DDY-nodes which are not supported.
Thank you! Your way works on mobile!
Hi, I’m using this solution to deploy a VR project on Oculus Quest 2.
Does anybody know how much does this effect impact performance?
The effect has a highly variable cost depending on the number of samples, heightmap resolution, filtering method, etc. it can be fairly cheap, or extremely expensive.
Also dealing with the same thing, considering if I should use Parallax Occlusion Mapping for a VR project. I removed ties to the the ES3_1 nodes in the Feature Switches, and it indeed made POM work in Quest 2 now. I had 72fps prior to the change, with flat textures, now it is around 40-50fps with bumpy ones. I have 10 cubes around me each using POM based material.
Was wondering if you ended up using POM for Quest 2 or found an alternative solution? @CarlitoMania
Basically I want to reduce 3d workload, and convert 2D art (bas-relief drawings) directly to volumetric assets. Used a program called Materialize to generate heightmaps based on the image, and in UE connected the heightmap to the POM node to make it work. The automatically generated heightmap is not accurate, plus POM seems to incur big performance cost. Was curious if I should just stick with a manual low-poly 3D workflow, or look for an alternative solution. Found interesting discussion here that mentions techniques called Parallel Offset Mapping (in contrast to Occlusion) and Shell texturing. @BananableOffense if you have any recommendations would be glad to hear : )
My suggestion is to use low resolution height map, low quality texture filtering without anisotropic filtering, and a low number of samples which can be compensated for via dithering and TAA. All of this can significantly reduce the per frame cost of the effect.
Thank you very much! I will be doing various tests following days, will share the results.
@BananableOffense made many tests, and the most significant boost was just reducing the step count, from 64 to 32.
Also did the texture filtering optimization and tried various height map resolutions. Though can’t say that height map resolution gave significant effect. But as I know, the lower resolution heightmaps are better for visual purposes anyways.
I have dithering, it fixes the pancakes, but still not very fancy. Currently MSAA is used in the project, need to verify if ok to switch to TAA.
Additional optimization that I did was to make a distance based optimization, so that POM is not costly on distant objects: https://www.youtube.com/watch?v=8hThP-Yni_o&list=LL&index=4&t=248s
But after everything, it seems that just need to block the view angles from level design point of view, and keep the step count around 32 rather than 64 (doesn’t have to be power of two).
We kind of decided that we are able to use POM in our project, just trying to see if we can improve it visually. Will definitely look into TAA, because in 3d party software (materialize), the POM effect is very smooth, but in UE it looks worse.