16-bit floating point compositing [TD 2023.11340]

I am posting this to bugs but perhaps it is expected behavior for this use case- I am not sure.

I am trying to do some compositing in floating point pixel format and am noticing textures ‘bleeding through’ in places where I would otherwise expect them to be occluded in a typical alpha over operation. It does not seem to be an issue in 32-bit floating point mode but I was trying to use 16-bit for the memory savings. I’m assuming this has something to with floating point accuracy but I’m surprised to be having the issue with an ‘over’ composite. Here is a link to the project file.

The artifacts in question:

System:
Windows 11 Pro, Nvidia RTX A4500

EDIT: added TD and system information.

Here is some additional relevant information:

(1) The alpha bleed through seems to have a pattern:


On top right you can see the side-by-side comparison of the 32-bit and 16-bit results.

(2) It also seems to have a fixed pattern regardless of what the source texture is. It almost seems like the artifact is “screen space”. For example:

(3) One interesting thing, with the 16-bit workflow, on the Render Pass TOP in its “Vectors” page, if I add a “uColor” uniform and set its value as if it were multiplied to the color buffer, in this case a 32-bit float (1.0, 1.0, 1.0, 1.0000001), it makes the alpha artifact go away as if it kicks up this pass to 32-bit.

2 Likes

Interesting example! So it seems like the error is introduced by the point color interpolation for the geometry. Even though all the points in the rectangle have a color of (1,1,1,1), some tiny error is introduced as this color interpolates across the geometry. This value is multiplied by the texture color which creates a slightly lower than 1 alpha value, which when applied by the very large HDR values in image background, result in them coming through.
In theory the solution would be to use the Phong MAT’s ‘Apply Point Color’ toggle to turn that off, but currently that actually still interpolates vec4(1.0) across the geometry (and just ignores the attribute, if it exists).
So I’ve fixed that in the Phong MAT. Additionally, I’ll add that toggle to the Constant MAT to allow that to be turned off.
Why this error shows up when rendering 16-bit float only is a bit of a question still, possibly something automagical that is happening underneath for the GPU. I’ll see if I can try this on a non-Nvidia GPU to see if it’s any different.

2 Likes

Ah yeah very interesting- makes sense. Can you recommend or help us with access to a fix until this is released? Thank you for looking into it.

The latest posted build has these fixes now.

1 Like

Thank you!