While developing our architectural visualization app for Apple Vision Pro, we faced many limitations due to the PolySpatial SDK provided by Unity and Apple. The SDK was still experimental, poorly documented, and missing essential rendering features. We couldn’t use baked lighting, custom lightweight shaders, occlusion culling, or even standard LOD systems. Updates were slow, and finding technical support was almost impossible since only a few developers were using it at the time.
Because this was a VR experience, users could closely inspect every surface walls, materials, grass so visual flatness became a major issue. For example:
• Brick walls looked completely flat instead of protruding.
• Materials with surface depth appeared smooth and unrealistic.
• Grass and ground textures looked like plain green surfaces.
In a regular game, this might not have been noticeable, but for architectural presentations designed to impress clients, such visual issues were unacceptable.
Inspired by shell-based fur shaders from the PS2–PS3 era, I developed a Fake Parallax Occlusion Mapping system that simulated real depth using stacked transparent geometry instead of traditional parallax or height mapping (which were not supported on Vision Pro).
The shader used alpha clipping and simple masking controls to create layers of depth.
If no custom height or alpha map was assigned, it automatically generated a clipping mask using a default noise texture.
I then created a custom Editor Tool that allowed me to preview and bake results both at runtime and in the editor.
For example, with a quality level of 16, the system generated 16 stacked quads, each with adjustable alpha clip and thickness values. This created a convincing sense of surface depth directly in the geometry.
To keep performance high, I added a Mesh Combine feature to merge all stacked quads into a single optimized mesh after baking.
The final result was visually convincing 3D like walls, materials, and even animated grass, all reacting correctly to lighting and casting proper shadows something even standard Parallax Occlusion Mapping can’t easily achieve, since this method extrudes geometry outward rather than pushing pixels inward.
This approach offered exceptional visual fidelity and performance, becoming a key part of our rendering workflow for Apple Vision Pro.
This system was developed entirely because Unity’s PolySpatial SDK did not support Pixel Depth Offset (POM PDO) or standard parallax methods. The Fake POM approach provided a functional and visually robust workaround until Metal API and hybrid rendering were properly implemented.
Default PBR Heightmapped texture:
Problem of the Parallax Occlusion Mapping:
Solution, Fake Parallax Occlusion Mapping:
Cropping at the end of edges, and there is no shadow.
Parallax Occlusion Mapping shadows problem clearly seem in here. It does not cast or receive shadows.
Fake Parallax Occlusion Mapping with texture:
This method also can be used in complex models:
Also seems very softy and warm with threads. ☕