Order Independent Transparency
Alphablend is broken - it always takes into account the order with which we draw; thus if we are drawing a DistortedCubes target and happen to rotate it in a way that the Surfaces behind are drawn after the Surfaces in front, stuff looks weird.
Also visible if a large distortion comes out of a DistortedBitmap target.
#2 Updated by Leszek Koltunski about 1 year ago
- Tracker changed from Bug to Feature
- Subject changed from Surfaces sometimes drawn partially obstructed by Surfaces behind to Order Independent Transparency
We need to implement correct drawing of partially-transparent meshes. (currently, if the mesh self-obstructs, results on the screen depend on the order fragments get drawn).
#6 Updated by Leszek Koltunski 12 months ago
Algorithm outlined in 'Per-Pixel Lists for Single Pass A-buffer' (Sylvain Lefebvre, Samuel Hornus, Anass Lasram) - specifically the 'insert_prelin_cas32' way from its implementations.fp will be ported.
This will need to be implemented in 2 places:
- DistortedNode.draw() when we render a single mesh
- the 'Blit with depth' phase when we merge postprocessed surfaces
#11 Updated by Leszek Koltunski 9 months ago
- % Done changed from 70 to 90
Issue almost finished. Commit 6544040f makes non-postprocessed OIT work. Remaining stuff to be done:
1) Confirm that the issues with OIT on Mali T880 is indeed gone on driver r22
2) Somehow resolve the situation with PowerVR GE8*** compiler whose version 1.8 fails to compile OIT pass2 'build' and pass4 'render' shaders
3) Make the size of the SSBO adjustable (currently stuck at 8MB)