Jump to content
  • Advertisement
Sign in to follow this  
lipsryme

Deferred Rendering Diffuse/Specular Buffer

This topic is 2220 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

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
Advertisement
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 don't 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 do, 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
Sign in to follow this  

  • Advertisement
×

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

We are the game development community.

Whether you are an indie, hobbyist, AAA developer, or just trying to learn, GameDev.net is the place for you to learn, share, and connect with the games industry. Learn more About Us or sign up!

Sign me up!