Depth testing without the depth buffer
#1 Members - Reputation: 704
Posted 19 September 2012 - 04:43 PM
you know you program too much when you start ending sentences with semicolons;
#3 Members - Reputation: 704
Posted 19 September 2012 - 05:35 PM
Disabling depth writes does not disable the depth test. Are you sure you actually disabled the depth writes, and not depth testing?
I used glDepthMask(0). The particles are getting tested against whats already drawn but since other particles haven't been written to the buffer that means that they aren't getting tested against each other.
you know you program too much when you start ending sentences with semicolons;
#4 Members - Reputation: 695
Posted 19 September 2012 - 06:00 PM
its too bad, that we "arent there yet", when it comes to 3d graphics
and for at least a decade more the graphics will be rendered in the same exact way..
for most problems you can hack together a solution, like the plethora of anti-aliasing solutions, GI, SSAO.. all hacks
in my experience, i have no solution to your problem except to zsort particles and anything else that uses alpha
the alternative as stated above is to turn off depth writes, however..
what's even harder is fading out the world, because you really don't want to do that in the frag program of each vertex!
so, i had the not so good idea to fade the world in the screenspace shader, which relies on depth testing again!
well, as you can imagine that also creates some interesting problems:
being above clouds ruins depth (can't turn off depth write or the clouds will ignore mountains sticking up over them
being underwater ruins depth (it's not like i can turn off depth write here)
any particles etc. also ruins depth (but you can cheat and turn it off)
so what am i to do? i don't know
edit: oh, i forgot to mention that any object that doesnt depth-write would be faded out with the depth of the object behind it
such a small problem, but no solutions!
i have tried running the screenspace world-fader before any objects.. but then i would lose any depth-information on the screen
Edited by Kaptein, 19 September 2012 - 06:19 PM.
#5 Members - Reputation: 4028
Posted 19 September 2012 - 06:31 PM
Create a second depth buffer. Before the particle pass copy the first to it, then set it as active. Then run particles with depth testing and writing both enabled. Then switch back to using the first for the SSAO pass.
I have to admit that I have no idea whatsoever how well (or not so well) this would run. Copying the first depth buffer to the second gives me the horrors, but the alternative is to write out a second copy of depth during the regular rendering passes, which may well be worse.
It may alternatively be possible to do something with the stencil buffer, but that might not work so well if you're already using it for something else.
Edited by mhagain, 19 September 2012 - 06:32 PM.
It appears that the gentleman thought C++ was extremely difficult and he was overjoyed that the machine was absorbing it; he understood that good C++ is difficult but the best C++ is well-nigh unintelligible.
#7 Members - Reputation: 704
Posted 21 September 2012 - 08:10 PM
Can you just do your SSAO calculation before rendering the particles?
problem is then the depth information from the original scene is lost after having gone through a "musical chairs" of fbo's so the particles cant be depth tested against the original scene.
you know you program too much when you start ending sentences with semicolons;
#9 Members - Reputation: 1408
Posted 22 September 2012 - 01:32 AM
This would guarantee the sort being correct with up to two writes to a pixel. With more writes, the foremost will always be correct.
What i don't know, and it may invalidate the proposal, is how to efficiently manage the "read-modify-write" that is needed for buffers.
#10 Moderators - Reputation: 14288
Posted 22 September 2012 - 04:32 AM
Can you fix this so that you don't lose depth along the way? e.g. use the same depth target with each FBO binding?problem is then the depth information from the original scene is lost after having gone through a "musical chairs" of fbo's so the particles cant be depth tested against the original scene.






