Feature #15
Order Independent Transparency
100%
Description
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.
http://stackoverflow.com/questions/28153207/opengl-alphablending-surface-with-itself
Related issues
History
Updated by Leszek Koltunski about 7 years ago
Currently reading some scientific papers (see the open source 3D engine 'guacamole'!) on how to implement this.
Updated by Distorted Admin almost 7 years 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).
Updated by Distorted Admin almost 7 years ago
- Status changed from New to In Progress
Blocks #7.
Currently studying theory. ( 'guacamole' rendering system, https://github.com/vrsys/guacamole )
Updated by Leszek Koltunski over 6 years ago
Commit examples|664a0e45 adds an application checking this feature.
Updated by Leszek Koltunski over 6 years 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
Updated by Leszek Koltunski over 6 years ago
- % Done changed from 0 to 20
Theory understood, app checking functionality written. 20%.
Updated by Leszek Koltunski over 6 years ago
- Related to Bug #29: Postprocessed surface incorrectly merged added
Updated by Leszek Koltunski over 6 years ago
- % Done changed from 20 to 70
OIT branch fully implemented and working, at least on Adremo GPUs.
Updated by Leszek Koltunski over 6 years ago
- Blocked by Bug #31: various issues with OIT branch on Mali GPU added
Updated by Leszek Koltunski over 6 years 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)
Updated by Leszek Koltunski almost 6 years ago
SSBO is adjustable now. This leaves two things:
1) PowerVR shader compiler situation: even the latest update to the system still keeps the old driver, unable to confirm.
2) Mali: ditto, stuck with r12.
Updated by Leszek Koltunski over 4 years ago
- Status changed from In Progress to Closed
- Assignee changed from Distorted Admin to Leszek Koltunski
- % Done changed from 90 to 100
PowerVR kept in a separate issue, Mali also - closing this.