Order Independent Translucency demo

Humus

Crazy coder
Veteran
I'm using a Stencil Routed A-buffer to implement it. I chose a different sorting algorithm though to reduce the cost a bit.

OrderIndependentTranslucency.jpg


I intend to look into the advantages of DX10.1 for this demo once I have the hardware for it.

Download here
 
I'm afraid I need access to the individual MSAA samples for technique, which leaves only DX10 right now. I suppose there will be an extension for that to OpenGL at some point though.
 
I thought it was an interesting presentation when I read it a few weeks back. Too bad I don't have a DX10 card yet.

Humus, any idea of how it performs vs. depth peeling?
 
Interesting demonstration. Although I have a DirectX 10 videocard, I don't have Windows Vista yet so I can't try it out.
 
I miss F-Buffer... ;-) You could do something very similar be sorting the pixels and resubmitting the geometry.
 
Humus, any idea of how it performs vs. depth peeling?

I didn't implement depth peeling for comparison, maybe I should, but my guestimate would be ~2-3x faster than depth peeling. Theorethically it could be up to 8x faster (with 8 layers maximum), but realistically the performance gain is likely smaller, especially since a large chunk of the frame time is lost just setting up the stencil buffer, plus there's a fairly large overhead of sorting.
 
Oh so the F-buffer really existed! I thought was something imaginary! :LOL:

I actually did a paper on the implementation and software model when I was an intern at ATI a few years ago. It just never got pushed out the public driver stack.
 
One thing I've wondered about is how old TBDR's achieved this. Did they just sort the triangles within each bin?
That wouldn't work if triangles intersected each other. (Well, not without clipping triangles against each other which would be deeply unpleasant). The sorting has to be done at pixel level.
 
That wouldn't work if triangles intersected each other. (Well, not without clipping triangles against each other which would be deeply unpleasant). The sorting has to be done at pixel level.
Yup, I know. Just figured that at a tile level the artifacts would be limited enough to make it useful, and transparent intersections are probably rare.

Anyway, how exactly did a TBDR do per pixel sorting? Automatic depth peeling? An A-buffer that sorted on the fly and multipassed during overflow?
 
Yup, I know. Just figured that at a tile level the artifacts would be limited enough to make it useful, and transparent intersections are probably rare.

Anyway, how exactly did a TBDR do per pixel sorting? Automatic depth peeling? An A-buffer that sorted on the fly and multipassed during overflow?
You could look up the patent ;), but IIRC, a TBDR, Dreamcast's CLX2, had storage for several sorted depths per pixel, and it automatically applied a depth peeling-like process to the incoming translucent geometry. Keeping several depths per pixel greatly reduced the number of passes. CLX2 also automatically removed translucent items from the list as soon as they were no longer of interest so that later passes became progressively faster.

Applying modifier volumes (e.g. shadows) to translucent objects added some extra complexity.
 
Back
Top