Aliasing

Hyp-X said:
Well, it's possible to render everything to the framebuffer (with or without AA), StretchBlt the result to a texture, and apply the bloom at the end.
This happens to be the fastest solution - and it supports AA.

So why couldn't games do AA and bloom at the same time?


Aren't bloom and HDR different?
 
Hyp-X said:
Well, it's possible to render everything to the framebuffer (with or without AA), StretchBlt the result to a texture, and apply the bloom at the end.
This happens to be the fastest solution - and it supports AA.

So why couldn't games do AA and bloom at the same time?
Well, then, a better question is: why don't they?
 
ChronoReverse said:
Aren't bloom and HDR different?

Yes they are.

Chalnoth said:
While this is a staple for HDR rendering, it is also used for bloom effects in general.

I was reacting to this part.
This method is not neccessarily used in general (non HDR) scenario - and therefore can support AA.
 
Chalnoth said:
Well, then, a better question is: why don't they?

Seeing that you cannot enable AA and/or AF in a lot of games I beleive the answer is that they don't care.
It's sad really.
 
Well, it does seem more efficient with AA to use render-to-texture and enable multisampling for the buffer than to force it via the control panel when using StretchBlt. After all, there's no reason to have the rendertarget using AA when applying a bloom effect.

But if games are going to use render-to-texture, they really should support AA.
 
Chalnoth said:
Well, it does seem more efficient with AA to use render-to-texture and enable multisampling for the buffer than to force it via the control panel when using StretchBlt. After all, there's no reason to have the rendertarget using AA when applying a bloom effect.

I'm not sure I understand what you are saying, but I have a few points that might clear things up:

1. Control panel can only force AA on the framebuffer, not on offscreen / RT-texture rendering.
2. RT-textures cannot be AA'd. To render with AA is to render to an AA'd offscreen rendertarget and StretchBlt the result to a texture.

There's two way to do bloom:
1.
Render scene with normal exposure.
Copy to a texture
Apply some filtering to the texture
Add back the result to the original render

2.
Render scene with normal exposure.
Render scene with low exposure to a texture
Apply some filtering to the texture
Add back the result to the original render

Obviously method 2 can be more correct - but it requires rendering the scene twice which has too much overhead. So the more fake method 1 is likely used.
 
Well, yeah. What I was attempting to say is that it only makes sense to have AA enabled when rendering the scene, not when working with the texture copied from the framebuffer.

So even if you can get AA with a bloom effect when forcing AA in the control panel, I would think you'd be wasting something as having AA forced in the control panel does nothing for you when doing that last part.

As such, I would tend to think it'd be more efficient to render the scene to a texture using multisampling, so that you don't have to spend the extra cost of AA on the final render (which may actually be significant: you'd be likely to be ROP limited, since the final composition is likely to be rather short on shader length).
 
Mendel said:
Well, theoretically you could make a completely jaggie free game.
Use only straight horizontal and vertical lines. And don't rotate them no matter what, like even if the player moves around.
You'd still get a lot of temporal aliasing though - the lines would jump from pixel to pixel.
 
Chalnoth said:
As such, I would tend to think it'd be more efficient to render the scene to a texture using multisampling, so that you don't have to spend the extra cost of AA on the final render (which may actually be significant: you'd be likely to be ROP limited, since the final composition is likely to be rather short on shader length).

Good point.
On the other hand when I StretchBlt from the framebuffer to the texture, the texture doen't have to be in full resolution.

So method A:

1. Render to the (AA'd) framebuffer
2. StretchBlt to the lower-res texture
3. Blend the texture to the framebuffer (inefficiency because of AA)

Method B:

1. Render to an offscren (AA'd) render target
2. StretchBlt to the hi-res texture
3. StretchBlt or render to a lower-res texture
4. Combine the two textures to the (non-AA) framebuffer

I'm not sure which one is faster...
 
Back
Top