To answer the question, because the alpha blend function is set like that.
when texture sampling happens it will multiply RGB with the textures alpha
with pre multiplied alpha it does basically nothing(multiplies it with 1)
=> the average pixel from the texture sampler is not affected by the transparency of the transparent pixel, bcs pre multiplied
So only the framebuffer is still affected by the transparency of the sampled texture
example with full white and full zero pixel
without pre alpha
(1, 1, 1, 1) + (0, 0, 0, 0) = (0.5, 0.5, 0.5, 0.5)
=> (0.5 * 0.5, 0.5 * 0.5, 0.5 * 0.5, 0.5) + (Framebuffer.RGB * 0.5)
with pre alpha:
(1, 1, 1, 1) + (0, 0, 0, 0) = (0.5, 0.5, 0.5, 0.5)
note, no multiply here, bcs pre multiplied:
(0.5, 0.5, 0.5, 0.5) + (Framebuffer.RGB * 0.5)
that's also why dilate will look different than pre multiplied, but i cannot judge what looks better, both have advantages and disadvantages