Sign in to follow this  
hflong325

Does alpha blending shall be gamma corrected?

Recommended Posts

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?

Share this post


Link to post
Share on other sites
Which API are you using?

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

Share this post


Link to post
Share on other sites
[quote name='Hodgman' timestamp='1347436932' post='4979216']
IIRC, D3D9 does all it's blending without taking sRGB into account ([i]which means it's incorrectly blending in gamma-space[/i]), but D3D10 does it correctly ([i]i.e. decodes the texture to linear, blends, re-encodes to sRGB[/i]).
[/quote]

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

Share this post


Link to post
Share on other sites
[quote name='Hodgman' timestamp='1347436932' post='4979216']
Which API are you using?

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

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?

Share this post


Link to post
Share on other sites
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: [url="http://msdn.microsoft.com/en-us/library/windows/desktop/bb172583%28v=vs.85%29.aspx"]D3DPMISCCAPS_POSTBLENDSRGBCONVERT[/url]. 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.

Share this post


Link to post
Share on other sites
[quote name='MJP' timestamp='1347510625' post='4979578']
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: [url="http://msdn.microsoft.com/en-us/library/windows/desktop/bb172583%28v=vs.85%29.aspx"]D3DPMISCCAPS_POSTBLENDSRGBCONVERT[/url]. 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.
[/quote]

Thanks a lot!

Share this post


Link to post
Share on other sites
Valve has a [url="http://www.valvesoftware.com/company/publications.html"]publication [/url]about this issue over [url="http://www.valvesoftware.com/publications/2008/GDC2008_PostProcessingInTheOrangeBox.pdf"]here[/url].

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this