Jump to content
  • Advertisement
Sign in to follow this  
user88

DX11 [DX11] Why we need sRGB back buffer

This topic is 1490 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

Hi,

 

after reading a couple of resources in web about Gamma Correction I still feel confused.

 

In my experiment pixel shader simply outputs linear gradient to backbuffer.

 

 - First case: backbuffer format is not sRGB, value of linear gradient is outputted without any modifications:

[attachment=22107:ng.jpg]

 

 - Second case: backbuffer format is sRGB, value of linear gradient is outputted without any modifications:

[attachment=22104:g1.jpg]

 

 - Third case: backbuffer format is sRGB, value of linear gradient is outputted with correction of pow(u, 1/2.2):

[attachment=22105:g1div2.2.jpg]

 

 - Fourth case: backbuffer format is sRGB, value of linear gradient is outputted with correction of pow(u, 2.2):

[attachment=22106:g2.2.jpg]

 

As you see, first and last results are almost the same. So, my question is why we need sRGB backbuffers plus modifying final output pixel shader if we can simply use non-sRGB texture? The result is almost the same:

[attachment=22108:pixcmp.jpg]

Edited by user88

Share this post


Link to post
Share on other sites
Advertisement
Hi, in this simple case it can look like same, but whole point of linear vs gamma is when it came to calculations, e.g. when values are multiplied/added together. Normally you would think that 1 + 1 = 2 and 1*1 = 1, e.g when you double light intensity or blend two lights together, result will have doubled brightness, but gamma is not linear so 1 +1 can be 3.

Share this post


Link to post
Share on other sites

Hello Ashaman73, as I understood you are talking about sRGB color space and HDR, but my question is about advantage sRGB backbuffer + pow(u, 2.2) over non-sRGB format  + direct output.

 

What I can guess from comparison image (last one in my first post) the advantage is in precision of Gamma curve applied to final image. With sRGB backbuffer + pow(u, 2.2) it is more precise. Right? Are there any other advantages?

Share this post


Link to post
Share on other sites

Have you read the article "The Importance of Being Linear"?  It does a pretty good job of explaining why you need gamma correction, including the situations when you should use it and when you shouldn't.  I applaud the OP's willingness to experiment, but in this case it seems like you don't get the high level concept just yet - so please try to read through that article and come to a mathematic reasoning for doing this and then the correct operation will be quite clear.

 

Hi Jason,

 

I have read this article (anyway thank you for a link) and understand the mathematic reasoning of Gamma Correction process. All is clear for me with sRGB images sampling and correction for further linear calculations. All intermediate calculations should be outputted to buffers with any correction. That is also clear for me.

 

The misunderstanding actually is with sRGB backbuffer. I thought that sRGB backbuffer is like JPEG in sRGB color space, meaning that all values in sRGB backbuffer are already Gamma Corrected (pow(value, 1/2.2)). If so, then final color values should outputted with pow(value, 1/2.2) correction. But no, it seems the sRGB backbuffer is the opposite of what I thought. Furthermore, final color value should be outputted with pow(value, 1/2.2) correction for non-sRGB backbuffers, right?

Edited by user88

Share this post


Link to post
Share on other sites


I thought that sRGB backbuffer is like JPEG in sRGB color space, meaning that all values in sRGB buffer are already Gamma Corrected (pow(value, 2.2)). If so, then final color values should outputted with pow(value, 2.2) correction. But no, it seems the sRGB backbuffer is the opposite of what I thought.
No, the display/monitor itself does the pow(value,2.2) itself, in the display hardware.

If you do the pow(value,2.2) yourself, then you end with seeing pow(pow(value,2.2),2.2) after the display emits the picture biggrin.png

Share this post


Link to post
Share on other sites

 


I thought that sRGB backbuffer is like JPEG in sRGB color space, meaning that all values in sRGB buffer are already Gamma Corrected (pow(value, 2.2)). If so, then final color values should outputted with pow(value, 2.2) correction. But no, it seems the sRGB backbuffer is the opposite of what I thought.
No, the display/monitor itself does the pow(value,2.2) itself, in the display hardware.

If you do the pow(value,2.2) yourself, then you end with seeing pow(pow(value,2.2),2.2) after the display emits the picture biggrin.png

 

I mean 1/2.2 not 2.2. Already corrected my previous post. Sorry for that..

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!