Jump to content

  • Log In with Google      Sign In   
  • Create Account


Does alpha blending shall be gamma corrected?


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
6 replies to this topic

#1 dragon.R   Members   -  Reputation: 247

Like
0Likes
Like

Posted 12 September 2012 - 12:48 AM

Hi.I`m doing gamma correction for our game recently, and it works well on the opaque objects. But when I use alpha blend, especially the add blend, I found the result was brighter than blending in the SRGB space and some soft edges became sharp. Because the SRGB add blend result in linear space was (SRGB0 + SRGB1*alpha)^2.2 , when change to linear blend, it became to SRGB0^2.2 + SRGB1^2.2*alpha . To fix this problem, a lot of textures must been modified, it`s terrible... So my question is, SRGB space and linear space,which is the correct way to do alpha blending? How did other games solved this problem?

Sponsor:

#2 Hodgman   Moderators   -  Reputation: 28518

Like
2Likes
Like

Posted 12 September 2012 - 02:02 AM

Which API are you using?

IIRC, D3D9 does all it's blending without taking sRGB into account (which means it's incorrectly blending in gamma-space), but D3D10 does it correctly (i.e. decodes the texture to linear, blends, re-encodes to sRGB).

#3 phantom   Moderators   -  Reputation: 6875

Like
1Likes
Like

Posted 12 September 2012 - 02:49 AM

IIRC, D3D9 does all it's blending without taking sRGB into account (which means it's incorrectly blending in gamma-space), but D3D10 does it correctly (i.e. decodes the texture to linear, blends, re-encodes to sRGB).


Having spent a lot of time this year looking into sRGB issuesI can confirm this :)

#4 dragon.R   Members   -  Reputation: 247

Like
0Likes
Like

Posted 12 September 2012 - 02:51 AM

Which API are you using?

IIRC, D3D9 does all it's blending without taking sRGB into account (which means it's incorrectly blending in gamma-space), but D3D10 does it correctly (i.e. decodes the texture to linear, blends, re-encodes to sRGB).


Thank you for replying,I`m using D3D9. Does this mean that if I don`t want to modify the textures, I can`t do gamma correction on the transparent objects?

#5 MJP   Moderators   -  Reputation: 10550

Like
3Likes
Like

Posted 12 September 2012 - 10:30 PM

That's not quite true for D3D9, it actually depends on the hardware. DX10+ hardware will do the blending in linear space, while older DX9 hardware will do the blending in sRGB space. There's even a cap bit for it: D3DPMISCCAPS_POSTBLENDSRGBCONVERT. Unfortunately you can only check that cap if you're using an Ex device on Vista or Win7, and there's no way to turn it off. So if you use frame buffer gamma correction, it's possible that your game will look different on DX9 and DX10 hardware. The only safe thing to do is to manually perform sRGB conversion at the end of your pixel shader, in which case you get consistent behavior on both platforms.

#6 dragon.R   Members   -  Reputation: 247

Like
0Likes
Like

Posted 13 September 2012 - 01:53 AM

That's not quite true for D3D9, it actually depends on the hardware. DX10+ hardware will do the blending in linear space, while older DX9 hardware will do the blending in sRGB space. There's even a cap bit for it: D3DPMISCCAPS_POSTBLENDSRGBCONVERT. Unfortunately you can only check that cap if you're using an Ex device on Vista or Win7, and there's no way to turn it off. So if you use frame buffer gamma correction, it's possible that your game will look different on DX9 and DX10 hardware. The only safe thing to do is to manually perform sRGB conversion at the end of your pixel shader, in which case you get consistent behavior on both platforms.


Thanks a lot!

#7 Ashaman73   Crossbones+   -  Reputation: 6885

Like
0Likes
Like

Posted 13 September 2012 - 05:11 AM

Valve has a publication about this issue over here.




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