News for hackers. Stuff that matters.
Re:Premultiplied Alpha vs. Not-Premultiplied Alpha Blending ... by stateoff on Saturday October 22, 2022 @07:59PM (#33303302)
Gamma should not have any effect on the alpha channel, which is linear by definition. The alpha channel represents the average coverage of (infinite) subpixels within the pixel. The color encoding of an object should not have any impact on the coverage within that pixel.

I recommend reading the technical memo "Alpha and the History of Digital Compositing" by Alvy Ray Smith [1] to get a better intuition on the matter.

[1] http://alvyray.com/Memos/CG/Microsoft/7_alpha.pdf

Re:Premultiplied Alpha vs. Not-Premultiplied Alpha Blending ... by im3w1l on Saturday October 22, 2022 @08:03PM (#33303326)
Gamma does however have an effect on blurring. And I suspect that because of gamma correction, applying a blur filter to a premultiplied image is (very subtly) incorrect.
Re:Premultiplied Alpha vs. Not-Premultiplied Alpha Blending ... by ljkbkhvj on Saturday October 22, 2022 @08:14PM (#33303380)
Yes, I think the possibilities, in practice, for bad interactions between gamma-related and alpha-related operations are real.

"PS3 does sRGB conversion before alpha-blending, so the blending is done in gamma space, which is not quite right."

https://tomforsyth1000.github.io/blog.wiki.html

Re:Premultiplied Alpha vs. Not-Premultiplied Alpha Blending ... by Sesse__ on Sunday October 23, 2022 @07:19AM (#33306105)
Applying a blur filter to a premultiplied image is (very subtly) _correct_, at least if the goal is to emulate what happens if you used a physical lens to blur the same image. Not only does postmultiplied alpha mess up the correct pixel values (as the original post shows), but even without alpha, you get a “halo” that is weird and unphysical.
Re:Premultiplied Alpha vs. Not-Premultiplied Alpha Blending ... by im3w1l on Sunday October 23, 2022 @09:39AM (#33306911)
I think corysama had the right of it, you need to do all the operations in linear colors, i.e.

original image -> convert to linear color space -> multiply alpha -> blur -> composite -> possibly convert back to sRGB if needed

The wrong way I meant was

original image -> multiply alpha -> gamma-correct-blur -> composite

where gamma-correct-blur = convert to linear color space -> blur filter -> convert to sRGB