Sign in to follow this  
lipsryme

Deferred Rendering Diffuse/Specular Buffer

Recommended Posts

I've got a small question about what a good approach to this would be. I understand it's probably a tradeoff between quality and performance but what would be a good way to render out the result of the lighting model in terms of diffuse and specular component.
Should I write out the diffuse and specular to separate 8bit or 16bit buffer ? or should I just render it like Diffuse + Specular to a single 8bit or 16bit render target ?
What's a common approach to this ? I reckon doing separate buffers and also in 64bit might be quite expansive...

I currently do it like Diffuse + Specular to a single 64bit target, does that have enough flexibility/precision ? Edited by lipsryme

Share this post


Link to post
Share on other sites
Depends on how High Dynamic Range your engine should be. Two 16-bit per channel textures should definitely be enough in my opinion. You could store values ranging from 6.10352 × 10^?5 klx to 65504 klx. Just be sure to actually make use of this really high dynamic range. Dark nights should be about 0.005 lx while bright days should be 100,000 lx.
Also DXGI_FORMAT_R9G9B9E5_SHAREDEXP and DXGI_FORMAT_R11G11B10_FLOAT might be interesting as well. They have the same high dynamic range, but with less precision and only half the bandwidth.

Update: Oh, these 2 types aren't supported as render target formats :( Edited by CryZe

Share this post


Link to post
Share on other sites
In regular deferred shading, you [b]don't[/b] need to output diffuse/specular separately, because you read albedo/spec-mask from the G-buffer during your lighting shader.

In Light-pre-pass / "Deferred lighting", you [b]do[/b], because you multiply them with albedo/spec-mask after the lighting accumulation.

Share this post


Link to post
Share on other sites
That's right. The composite pass causes additional overhead and separating diffuse and specular causes more bandwidth problems. Some time ago, I always thought, that combining everything in a composite pass would make sense, because you don't need to multiply every light with albedo. Instead you only do it once in the composite pass. But that's just one additional multiplication for each light. That's way faster than writing out both diffuse and specular to global memory.

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