Gamma

From vegard.wiki
Revision as of 18:54, 22 April 2020 by Vegard (talk | contribs) (→‎See also: add link)
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

Quick rules of thumb, since I can never remember which is which:

  • RGB = linear space
  • sRGB = gamma space
  • most image files store sRGB
  • sRGB is unfit for blending

The corollary is:

  • Image files loaded as textures should be converted from sRGB to RGB (but some decoders do this for you!)
  • Since alpha is linear, alpha premultiplication should happen in linear space, i.e. after converting to RGB [1]
  • The shader responsible for putting the final pixels on the screen should have a gamma correction step doing:
const float gamma = 2.2;

out vec4 color;

void main()
{
    // ...

    color = pow(color, 1. / gamma);
}

Note, however, that OpenGL may also perform this step for you on any on-screen framebuffers (i.e. the default framebuffer) if you do glEnable(GL_FRAMEBUFFER_SRGB).

See also