Hy;
Today I was thinking about order independent transparency and was munching the way the ATI Mecha demo handles it and I think it's amost a shift towards S-Buffers, just now on OpenCL/DirectCompute. In the early days when full Z-buffers were too bandwidth capped to be applyable (I ported the first Quake-implementation on the Amiga after it's source-leak and I spend a lot of time tweaking the S-buffer implementation, wanna see the source? Don't throw away anything) S-buffers were real cool stuff. Basically it's some form of slope-based Z-buffer compression.
Now the OIT solution via A-buffers is almost in a similar situation as the Z-buffers of the old days, bandwidth limitation. We have fast Z-buffers but A-buffers are almost 3D-textures with a SingleLinked-depth.
I think it's quite streightforward to not order single fragments (towards Z) but fragment-strips (over Y) which then in turn exactly is like our S-buffer again.
What we'd do is a depth-prepass which does create a depthstrip-buffer, carrying startdepth/enddepth/index. Convergence is that when each triangle covers or intersects on exactly every pixel it's become an A-buffer again. Can't be worst. Of course we throw away covered strip-fragments.
Through the fragment-indices a indexed vertex-buffer can be rebuild/reordered such that ordering is back-to front exactly like a BSP-tree, without vertex- or fragment-strip-overlap. It's even possible to mask all non-transparency covered area and render 1x streight, 1x with blending.
I'm actually learning OpenSceneGraph, let's see if I can come around with a deferred renderer with depthstrip-buffer, it smooths so nicely into each other.
I'm not yet sure how the depth-pass and OpenCL are correlated, maybe I'd be forced to do depth entirely in OpenCL.
As AA-coverage sampling isn't available (I know only the theory, so bear with me), it's possible to store the fragment-strip start and stop fractions within the depthstrip-buffer, the size (in bits) of the fraction will define the AA-quality. Also quite streighforward.
And in fact as long as fragment-strips are longer than 1 pixel is a reliable z-buffer compression scheme, as any smooth vertex surface results only in X-coverage number of strips.
Seems like a nice concept to me.
Today I was thinking about order independent transparency and was munching the way the ATI Mecha demo handles it and I think it's amost a shift towards S-Buffers, just now on OpenCL/DirectCompute. In the early days when full Z-buffers were too bandwidth capped to be applyable (I ported the first Quake-implementation on the Amiga after it's source-leak and I spend a lot of time tweaking the S-buffer implementation, wanna see the source? Don't throw away anything) S-buffers were real cool stuff. Basically it's some form of slope-based Z-buffer compression.
Now the OIT solution via A-buffers is almost in a similar situation as the Z-buffers of the old days, bandwidth limitation. We have fast Z-buffers but A-buffers are almost 3D-textures with a SingleLinked-depth.
I think it's quite streightforward to not order single fragments (towards Z) but fragment-strips (over Y) which then in turn exactly is like our S-buffer again.
What we'd do is a depth-prepass which does create a depthstrip-buffer, carrying startdepth/enddepth/index. Convergence is that when each triangle covers or intersects on exactly every pixel it's become an A-buffer again. Can't be worst. Of course we throw away covered strip-fragments.
Through the fragment-indices a indexed vertex-buffer can be rebuild/reordered such that ordering is back-to front exactly like a BSP-tree, without vertex- or fragment-strip-overlap. It's even possible to mask all non-transparency covered area and render 1x streight, 1x with blending.
I'm actually learning OpenSceneGraph, let's see if I can come around with a deferred renderer with depthstrip-buffer, it smooths so nicely into each other.
I'm not yet sure how the depth-pass and OpenCL are correlated, maybe I'd be forced to do depth entirely in OpenCL.
As AA-coverage sampling isn't available (I know only the theory, so bear with me), it's possible to store the fragment-strip start and stop fractions within the depthstrip-buffer, the size (in bits) of the fraction will define the AA-quality. Also quite streighforward.
And in fact as long as fragment-strips are longer than 1 pixel is a reliable z-buffer compression scheme, as any smooth vertex surface results only in X-coverage number of strips.
Seems like a nice concept to me.