5

所以我仍然对我对这个问题的古老评论表示赞同:这个 GLSL rand() 单线的起源是什么?

这让我开始思考,一个好的 GLSL 哈希函数会是什么样子?它有明显的用例,例如 Perlin 噪声。我会在一个好的实现中寻找一些属性。

  • 在不同精度(中,高)下稳定。这可以是可配置的。
  • 应该可以在 ES2 中使用,所以它不能使用整数支持
  • 仅 ALU,无纹理
  • 不是寻找加密质量,而是寻找大周期和“感知”随机性
  • 理想情况下,应该在最低规范的 ES2 实现上产生相同的结果

实际上,我认为大多数人只是通过将 x,y 输入与一些素数相乘、相加、再次相乘,然后在具有最近采样的随机数平铺纹理中查找结果坐标来混合。

所以这个问题不是关于寻找“答案”而是好奇是否有一个好的方法来做到这一点。我也想知道为什么这是不可能的争论。

4

1 回答 1

0

“杂音”风格的哈希函数似乎在这种应用程序中表现得非常好,请查看https://nullprogram.com/blog/2018/07/31/https://www.shadertoy.com/view/WttXWX . 引用后文:

//bias: 0.17353355999581582 ( very probably the best of its kind )
uint lowbias32(uint x)
{
    x ^= x >> 16;
    x *= 0x7feb352dU;
    x ^= x >> 15;
    x *= 0x846ca68bU;
    x ^= x >> 16;
    return x;
}


// bias: 0.020888578919738908 = minimal theoretic limit
uint triple32(uint x)
{
    x ^= x >> 17;
    x *= 0xed5ad4bbU;
    x ^= x >> 11;
    x *= 0xac4c1b51U;
    x ^= x >> 15;
    x *= 0x31848babU;
    x ^= x >> 14;
    return x;
}
于 2022-01-07T12:02:41.083 回答