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 或更高时有效,但低于以下时无效。
以下是导致不同行为的案例列表:
- 0.0022 以灰色结束,不会进一步变亮
- 0.00221 再次亮起。
- 0.00219不亮
从非黑色中减去时:
- 0.00195不减
- 0.00196 确实减去
如有任何提示,我们将不胜感激。
我找到了答案:出于某种原因,Unity 默认使用非常有限的 RenderTextureFormat。我现在已经将渲染纹理定义修改为
renderTexture = new RenderTexture(width, height, 32, RenderTextureFormat.ARGBFloat);
现在一切正常。
当 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 或更高时有效,但低于以下时无效。
以下是导致不同行为的案例列表:
- 0.0022 以灰色结束,不会进一步变亮
- 0.00221 再次亮起。
- 0.00219不亮
从非黑色中减去时:
- 0.00195不减
- 0.00196 确实减去
如有任何提示,我们将不胜感激。
我找到了答案:出于某种原因,Unity 默认使用非常有限的 RenderTextureFormat。我现在已经将渲染纹理定义修改为
renderTexture = new RenderTexture(width, height, 32, RenderTextureFormat.ARGBFloat);
现在一切正常。