View more

View more

View more

### Image of the Day Submit

IOTD | Top Screenshots

### The latest, straight to your Inbox.

Subscribe to GameDev.net Direct to receive the latest updates and exclusive content.

# 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.

6 replies to this topic

### #1dragon.R  Members

Posted 12 September 2012 - 12:48 AM

Hi.Im 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, its 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?

### #2Hodgman  Moderators

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).

### #3phantom  Members

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

### #4dragon.R  Members

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,Im using D3D9. Does this mean that if I dont want to modify the textures, I can`t do gamma correction on the transparent objects?

### #5MJP  Moderators

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.

### #6dragon.R  Members

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!

### #7Ashaman73  Members

Posted 13 September 2012 - 05:11 AM