"Parallax Occlusion Mapping" does not work in Alembic Geometry Cache

Good afternoon. I faced the problem of “Parallax Occlusion Mapping” not working correctly in any Alembic Geometry Cache. I tested it in:
ue4.26
ue4.27
ue5.0
And this problem is present in all current versions of Unreal Engine.
I think that we need to rewrite “Custom” HLSL in materials and find a problem due to which parallax does not work correctly.
Maybe you will have some better solution to this problem?


On this gif, first cube is a skeletal mesh. Second Cube Geometry Cache.
For testing, you can try the Alembic Cube which I have uploaded below.
If you load it as a static mesh or a skeleton mesh, the parallax will work. If as Geometry cache then no.
cube_test_parallax.abc (3.7 KB)

1 Like

Alembic Static Mesh have same problem like Alembic Geometry Cache.
But ! If we open “Static Mesh” settings and set “Recompute Tangents” and “Use MikkTSpace Tangent Space” everything will work. But how can we do this with the Geometry Cache?
Geometry Cache has no settings like static mesh…

Solved the problem!
The problem arises because Alembic Static Mesh and Alembic Geometry Cache don’t count bi-tangents in the MikTSpace method.
In theory, this can be corrected by “Custom” HLSL node by rotating the bi-tangent vector.
But we solved the problem in a different way. You can project parallax from world coordinates. And then the parallax projection will ignore the tangents and bi-tangets and will be projected along the world coordinates.

I have to mention that it works but world coordinate and tangent space parallax works somehow different and in some cases world coordinate parallax won’t work (for example, I’ve met the problem with parallax for eye pupil) and you actually will need to solve bitangents calculation problem @cortek1 mentioned earlier.