Unity3d HLSL奇数行为加/减小数值

Unity3d HLSL奇数行为加/减小数值,unity3d,shader,hlsl,compute-shader,Unity3d,Shader,Hlsl,Compute Shader,在HLSL计算着色器中添加/减去0.002左右的数字时,会出现一些非常奇怪的行为 #pragma内核淡入淡出 rwd结果; [numthreads(8,8,1)] 无效衰减(uint3 id:SV_DispatchThreadID) { 结果[id.xy]=结果[id.xy]+0.001; } 结果是显示的纹理,它最初作为黑色传入。其想法是实现缓慢的白色渐变,当我将数字设置为0.0023或更高时,效果会更好,但低于0.0023时则不会 以下是导致不同行为的案例列表: 0.0022以灰色结束,

在HLSL计算着色器中添加/减去0.002左右的数字时,会出现一些非常奇怪的行为

#pragma内核淡入淡出
rwd结果;
[numthreads(8,8,1)]
无效衰减(uint3 id:SV_DispatchThreadID)
{
结果[id.xy]=结果[id.xy]+0.001;
}
结果是显示的纹理,它最初作为黑色传入。其想法是实现缓慢的白色渐变,当我将数字设置为0.0023或更高时,效果会更好,但低于0.0023时则不会

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

  • 0.0022以灰色结束,不会进一步变亮
  • 0.00221再次亮起
  • 0.00219不亮
从非黑色中减去时:

  • 0.00195不减去
  • 0.00196减去

任何关于这方面的提示都将不胜感激。

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

renderTexture=新的renderTexture(宽度,高度,32,renderTextReformFormat.ARGBFloat);

现在一切都完美无瑕。

这可能是一些精确的怪异行为。结账最好将一个范围为0到1的变量传入着色器,然后直接返回该变量或将其与任何纹理相乘。@Pete这真的会有区别吗?那些文档说,在PC硬件上,我总是使用32位浮点,对于这个操作来说,应该足够高的精度。特别是当我加上0.0022时,它停止在灰色(~0.4)这一事实似乎表明这不是一个精度问题。很高兴看到你找到了一个解决方案,但请注意,使用这个解决方案,衰减速度可能取决于帧速率。@Pete哦,是的,当然。我在这个例子中犯了很多错误,在最初的例子中,这个过程要复杂得多,但最终我不想因为试图理解它而打扰人们。因此,我能找到的最基本的例子。