Why? Why disregard areas that have a clearly understood amount of alpha? I am looking at the rendered image in Blender's preview. It looks fine (likely new in v3.0.0 since the question says the preview didn't work). I simply want to export it as is as a PNG. Why can't I?
Because PNGs do not encode alpha correctly.
Think of RGB as the quantity of tristimulus. Think of the A as the degree of occlusion in terms of geometry.
In some cases, the degree of geometric occlusion is zero. Think of a reflection; the light as a quantity of tristimulus is not occluding.
In a PNG, the design is fundamentally broken. The geometry is always in the sidecar A channel. As such, it is not yet associated with the amplitude of the RGB tristimulus. That means that we are missing information in a PNG due to the nature of its broken and woeful design.
In the case of a PNG, there is no way for us to carry the information of an RGB tristimulus quantity of greater than zero, and a degree of occlusion of zero, because PNG must, according to the horrible design, always store the alpha unassociated with the tristimulus.
When a PNG is loaded with an A channel, the encoding must be forced to associate the A with the tristimulus amplitudes in RGB. That means if the wretched encoding carries an A channel, it will be forever forced to scale the amplitudes of the RGB tristimulus with whatever values are present in the degree of occlusion specified. In the case of 0.0
, it scales / gains the tristimulus to 0.0
via a multiply. Always.
It is a broken encoding and should be thrown in the garbage. Worse, Blender’s entire handling at eight bit is also broken in a similar way.
How does an emissive volume 'represent' transparency? To me, I would have assumed it is simply more opaque the farther the rays travel through it, and that using the emission shader simply maintains a constant light color, which doesn't seem to be something Volume Absorption or Volume Scatter will do.
Think of a reflection is the simplest example. If we are standing in front of a window, the window is effectively occluding nothing, plus or minus small amounts of energy being attenuated.
Now think of a reflection on the near surface. It is 100% unoccluding. We know that under our mental model of encoded A that the A represents degree of occlusion. One value solved! A = 0.0
.
Now we isolate the reflection against a black curtain behind the window. We could quantify and measure the reflection now as amplitudes of RGB. Blam! Now we have our amplitudes of tristimulus!
Now we want to composite the reflection over the background outside the window. Dead simple…
We take our amplitude of the background and we gain / scale the background by the degree of occlusion. Given our reflection does not occlude and has an A of zero, we don’t do anything! Now we add on the tristimulus of the reflection and presto! Solved.
If we think of a similar thing, such as something that is virtually identical to the reflection, but it is a sticker that has a neutral density of 50%, we can do the exact same calculation. Only this time, we gain the background down by 50%, and then add the tristimulus of the RGB foreground to it.
TL;DR: There is only one proper alpha encoding. The other one doesn’t encode alpha, and is a broken concept. It also happens to be the concept that the PNG creators thought was a good idea.
They were incorrect.