HLSL 奇怪的行为 adding/subtracting 小数字

HLSL odd behaviour adding/subtracting small numbers

当 HLSL 计算着色器中的 adding/subtracting 数值约为 0.002 时,会出现一些非常奇怪的行为。

#pragma kernel Fade

RWTexture2D<float4> Result;

[numthreads(8,8,1)]
void Fade (uint3 id : SV_DispatchThreadID)
{
    Result[id.xy] = Result[id.xy] + 0.001;
}

结果是显示的纹理,它最初作为黑色传入。我的想法是实现缓慢淡入白色,当我将数字设置为 0.0023 或更高时有效,但低于以下时无效。

以下是导致不同行为的案例列表:

从非黑色中减去时:

如有任何提示,我们将不胜感激。

我找到了答案:出于某种原因,Unity 默认使用非常有限的 RenderTextureFormat。我现在已经将渲染纹理定义修改为

renderTexture = new RenderTexture(width, height, 32, RenderTextureFormat.ARGBFloat);

现在一切正常。