This is the result of me tinkering with the way Vision handles parallax mapping. I was attempting to provide for steeper viewing angles, and depth-correct silhouettes without increasing the geometry count. The screenshots below all contain just two triangles for the blocker object, and two triangles for the receiver.
The shadows cast by the blocker object correctly flow over the imaginary isosurface formed by the heightmap texture of the receiving object because the shadow map pixel shader reads the height of the isosurface when determining whether or not the fragment is visible to the light source.
The edges of the shadow are softened by sampling the surrounding 16 texels of the isosurface, and checking for light visibility against the shadow map.
| |