Implementing Scalable Order-Independent Transparency (OIT) in Metal

Hi,

Apple’s documentation on Order-Independent Transparency (OIT) describes an approach using image blocks, where an array of size 4 is allocated per fragment to store depth and color in a tile shading compute pass.

However, when increasing the scene’s depth complexity by adding more overlapping quads, the OIT implementation fails due to the fixed array size.

Is there a way to dynamically allocate storage for fragments based on actual depth complexity encountered during rasterization, rather than using a fixed-size array? Specifically, can an adaptive array of fragments be maintained and sorted by depth, where the size grows as needed instead of being limited to 4 entries?

Any insights or alternative approaches would be greatly appreciated.

Thank you!

Implementing Scalable Order-Independent Transparency (OIT) in Metal
 
 
Q