Jump to content

  • Log In with Google      Sign In   
  • Create Account


Deferred Rendering Diffuse/Specular Buffer


Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.

  • You cannot reply to this topic
3 replies to this topic

#1 lipsryme   Members   -  Reputation: 987

Like
0Likes
Like

Posted 16 September 2012 - 04:01 PM

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, 16 September 2012 - 04:24 PM.


Sponsor:

#2 CryZe   Members   -  Reputation: 768

Like
0Likes
Like

Posted 17 September 2012 - 12:54 AM

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, 17 September 2012 - 01:14 AM.


#3 Hodgman   Moderators   -  Reputation: 27883

Like
2Likes
Like

Posted 17 September 2012 - 01:24 AM

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.

#4 CryZe   Members   -  Reputation: 768

Like
0Likes
Like

Posted 17 September 2012 - 02:23 AM

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.




Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.



PARTNERS