top of page

Dynamic Transparency: Fixing False Occlusion, Lighting Artifacts and Outlines

Writer: Daniel Bellido Chueco
Daniel Bellido Chueco
Oct 19
4 min read

In my previous devlog, I explained the first implementation of Dynamic Transparency in Bound by Death: selectively revealing players through walls while preserving a soft transition around them.


The system worked when players were clearly behind an obstacle. However, testing it near walls and corners exposed problems with activation, lighting and outlines.


A player standing in front of a wall could produce an unwanted transparency patch. During attacks, a weapon or limb passing through the geometry could briefly open a hole. Other situations produced visible blocks in the transparent region. These issues required changes to several stages of the rendering pipeline.




Deciding when a player needs to be revealed


The original implementation used the animated target mesh to generate a depth texture. This preserved the character’s exact silhouette, but it also made every animated extremity part of the visibility decision. A weapon crossing a wall could therefore count as an occluded target surface, even though the player’s body was not occluded.


The surrounding bubble had another limitation: comparing wall fragments against a representative target depth did not establish whether the wall actually blocked the character.


The new OcclusionOccluderDepthPass renders the nearest surfaces of eligible occluders into a separate depth texture, before any transparency is applied. Each target then projects three reference points along its torso and compares their depths with the occluder depth at those screen positions.


A single occluded reference point is insufficient to activate the effect. The combined coverage controls its strength, with a small depth margin to avoid reacting to near-contact intersections.



That margin is defined relative to body height and projected for the current camera, instead of relying on a fixed device-depth offset.



Keeping the bubble independent from animation


The transparency region now comes from an upright body proxy attached to the movement root, rather than the animated silhouette.

Its projected bounds define an elliptical region with a clear core and a smooth falloff. Body height can be derived from the main mesh or configured explicitly for unusual character hierarchies.

Turning, swinging a weapon or extending an arm no longer changes the reveal region through the animated vertices.

This also establishes an intentional gameplay rule: the system protects visibility of the character’s body. An isolated weapon or limb behind a wall does not need to make that wall transparent.

Both players retain independent influence and depth values. The mask also uses 32-bit floating-point channels, avoiding the additional depth rounding introduced by the previous 16-bit format.

The existing rendering approach remains: affected fragments are removed from the opaque pass, and the wall is rendered again with blending in the falloff region.



Tracking down the block-shaped artifacts


After stabilizing activation, some transparency regions still showed strongly pixelated lighting.

The cause was the interaction between the transparent wall and tiled light culling.

The renderer builds light lists for 8×8-pixel tiles, using the depth range of the opaque scene. Inside a transparency opening, the wall has already been removed from that depth buffer. The recorded depth therefore belongs to the scene behind it.

However, the falloff pass reused those same light lists to illuminate the wall in front.

A nearby light could illuminate the wall while failing to reach the background. The culling pass would correctly exclude it for the opaque scene, but the transparent wall would then lose that light too.

Neighbouring tiles could retain different lists, creating abrupt blocks of lighting across a continuous wall surface.

The falloff pass now evaluates local lights at the wall fragment’s actual world position, independently of the depth-culled tile lists. It retains the same material and PBR lighting calculations, including directional shadows and volumetric fog.

This increases the potential lighting cost within the falloff region, particularly in scenes with many lights. The opaque scene continues using tiled light culling.



Preserving the wall’s outlines


The outline effect introduced a separate problem.

Using the cut scene depth caused the bubble boundary to appear as a geometric edge. Removing outlines too aggressively also removed something visually useful: the contours of the wall that had become transparent.

Those contours are part of the game’s artistic style and help communicate that the player is behind an obstacle.

The outline pass now reads a matching pair of depth and normal textures from the uncut SSAO geometry pass.

These textures describe the original surfaces, so wall silhouettes and creases remain available for outlining. Because they contain no transparency opening, the bubble itself does not introduce an artificial depth edge.



Verification


The lighting issue was reproduced in a controlled WARP rendering test using the actual culling and lighting shaders.

The previous path produced the expected eight-pixel lighting discontinuity. The revised path maintained continuous illumination across the same tiles, for both point lights and spotlights.

Additional checks verified that structural wall outlines remain visible without generating a bubble contour. All nine checks passed, and the updated engine and shaders compiled successfully.

The main visibility fix has also been confirmed in gameplay. The latest lighting and outline changes still need visual verification in the affected scene positions.

This revision gives each stage a clearer responsibility: torso references decide when visibility assistance is needed, the stable proxy defines the reveal region, wall fragments receive lighting appropriate to their own position, and outlines preserve the original environment’s structure.

Comments

Rated 0 out of 5 stars.
No ratings yet

Add a rating

Let's build something great

  • LinkedIn

©2022 
Last update: 14/10/2026

bottom of page