[Resolved] Multisampling

Started by
4 comments, last by Kaptein 9 years, 10 months ago

Quick question,

is there any way to have multisampling not disturb the alpha channel?

I have tried disable any/all of the sample coverage states.

Advertisement

what multisampling? hardware multisampling or your own mutisampling?

If you are experiencing alpha bleeding, than antialising color and not alpha will still exhibit this artifat. You should perform all alpha logic before buffer gets multisampled.

I was using alpha for depth, since it didn't have to be very precise. The problem is that I was getting "huge" rectangular artifacts.

So, I refactored some of the shaders and the renderer to not use alpha channel for depth, and now I'm using regular depth textures.

Depth texture is multisampled, and resolved properly (I double and triple checked every stage)

I'm still getting the artifacts:

You can see the greenish artifacts far away, but they are not limited to depth~=1.0

artifacts.png

Might as well add that I have implemented supersampling too, which looks/works like it should. And without both it also works.

I'm on Linux, so maybe it's a driver problem.

EDIT: Just tried my game on my Windows-partition, and the same thing happens. Except better fps.

Now I'm really stumped.

EDIT2: I disabled SSAO and went back to vertex-based shadows (not that SSAO worked well anyways), and it's still the same.

Must be related to the depth-textures, I guess.

Well, that was a day wasted.

To the poor guys who come after me trying to do the same thing:

Keywords: OpenGL, Rectangle, Rectangular, Artifacts, Multisampling, RGBA16F

The multisampling artifacts go away when replacing GL_RGBA16F with GL_RGBA8. Guess I'm stuck with 8bits per channel, for now.

in great distances, z depth values differ much more than in close distances for the neighbouring pixels, due to non linear division character of depth buffer. Weighting them means producing a very "traveled" chaotic depth. The further the better for artifact to occur (it also depends on difference between the pixels themselfs, so it can occur closer if condition met).

But let me ask in first place, why do you weight/antialias the depth information? You might consider working with w depth, for the purpose?

in great distances, z depth values differ much more than in close distances for the neighbouring pixels, due to non linear division character of depth buffer. Weighting them means producing a very "traveled" chaotic depth. The further the better for artifact to occur (it also depends on difference between the pixels themselfs, so it can occur closer if condition met).

But let me ask in first place, why do you weight/antialias the depth information? You might consider working with w depth, for the purpose?

I was already doing depth textures at the time, so I just refactored some shaders. It didn't affect the result, because the artifacts still happened. Not to mention I measured the channels of every single texture at every stage to try to track the artifacts down to the root. It was just always in the colorbuffers from the very beginning.

And yes, I understand the problems with sampling different depths. It's not a noticeable problem for me after getting things working. My current issues are with render-ordering, and I don't know if I even want to solve these issues, since it means I have to sacrifice 50% of the potential early Z-culling, and probably too much frametime.

Anyways, I disabled absolutely everything except the terrain colorbuffer, and the artifacts still happened same as before. No change.

The only fix was to change the texture formats from RGBA_16F to RGBA8.

And I'm really not going to enter the "edge-smoothing" business. I'll leave that to the realtime JPG emulator people. I jest, but I really dislike "edge-smoothing" overall. Not that there's any alternative. sad.png

This topic is closed to new replies.

Advertisement