Sign in to follow this  
CombatHammie

A few questions before I give up on deferred rendering

Recommended Posts

I gave deferred rendering a try to at least experience the advantages and disadvantages first hand. XNA's D3D-only support made it a bit of a pain. I gave SlimDX a shot, but the project is for my graduate work, limiting my time, and forcing me to stick with XNA.

For transparent objects, I don't mind doing hybrid rendering (forward for transparent + deferred for the rest).

Unfortunately, it's the anti-aliasing that kills me. I found some techniques here and there (MJP's blog has DX10/D11 stuff), but in the end, XNA's D3D limitation makes everything just plain ugly and unrealistic. The edge detect + buffer blur just doesn't work for me.

Any comments/suggestions before I abandon it and stick with forward renderer's limitations?

Share this post


Link to post
Share on other sites
Quote:
Original post by CombatHammie
but in the end, XNA's D3D limitation makes everything just plain ugly and unrealistic. The edge detect + buffer blur just doesn't work for me.
I am not sure what you mean by this. Do you mean its D3D 9 limitation?

Share this post


Link to post
Share on other sites
Are you doing edge detection on the colour buffer or the depth buffer?


There are two derivatives of 'deferred' rendering, 'light pre-pass' and 'inferred' rendering, that both support MSAA on DX9, and inferred supports transparent objects without a forward pass.

Share this post


Link to post
Share on other sites
Yeah anti-aliasing is pretty much impractical with D3D9-level feature set. The only options that work are some sort of screen-space approach (edge blur, MLAA, or similar), supersampling, or using MSAA when rendering the geometry for a light prepass renderer. Supersampling is usually too expensive to be practical, but if performance isn't an issue it's an easy way to deal with aliasing. Enabling MSAA when rendering geometry for a light prepass renderer kinda works, but isn't so great without applying lighting at a sub-pixel level. Edge blur, as you've already noted, sucks big time. Personally I think it makes it worse. MLAA is a good option, but isn't trivial to implement. Something like what these guys are doing would probably be great, but they haven't released source code yet. You could probably adapt the Intel CPU version to C#, but it would probably be slow without SIMD support. You could also check out what this guy is doing, since he seems to be getting decent results. Another possibility is some sort of temporal AA, where you blend the pixel colors with the result from a previous frame based on either a reprojection or after slightly offsetting your projection matrix. Halo Reach seems to be using something similar to this.

Share this post


Link to post
Share on other sites
Quote:
Original post by Promit
Quote:
Original post by CombatHammie
but in the end, XNA's D3D limitation makes everything just plain ugly and unrealistic. The edge detect + buffer blur just doesn't work for me.
I am not sure what you mean by this. Do you mean its D3D 9 limitation?


Sorry. I meant D3D9.


Quote:
Original post by Hodgman
Are you doing edge detection on the colour buffer or the depth buffer?


There are two derivatives of 'deferred' rendering, 'light pre-pass' and 'inferred' rendering, that both support MSAA on DX9, and inferred supports transparent objects without a forward pass.


Depth (http://http.developer.nvidia.com/GPUGems3/gpugems3_ch19.html). I am yet to look into those techniques.


Quote:
Original post by MJP
Yeah anti-aliasing is pretty much impractical with D3D9-level feature set. The only options that work are some sort of screen-space approach (edge blur, MLAA, or similar), supersampling, or using MSAA when rendering the geometry for a light prepass renderer. Supersampling is usually too expensive to be practical, but if performance isn't an issue it's an easy way to deal with aliasing. Enabling MSAA when rendering geometry for a light prepass renderer kinda works, but isn't so great without applying lighting at a sub-pixel level. Edge blur, as you've already noted, sucks big time. Personally I think it makes it worse. MLAA is a good option, but isn't trivial to implement. Something like what these guys are doing would probably be great, but they haven't released source code yet. You could probably adapt the Intel CPU version to C#, but it would probably be slow without SIMD support. You could also check out what this guy is doing, since he seems to be getting decent results. Another possibility is some sort of temporal AA, where you blend the pixel colors with the result from a previous frame based on either a reprojection or after slightly offsetting your projection matrix. Halo Reach seems to be using something similar to this.


I'll keep an eye on those guy's work (specifically the first mention).

But I think I'll give up on my attempt for now. I'll see what I can do in terms of Light Pre-Pass and Inferred (I think you have a post about it).

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this