我需要一个随机数生成器来创建一些图形静态。我不是在寻找噪音算法 - 我只想要白噪音。我需要的只是glsl中的随机数生成器。具体来说,随着时间的推移,我将使用它来创建每个片段的随机亮度偏移。
要求:
想在此重申 - 只需要使用lowp浮点数 。互联网上的单行(fract(sin(dot(...))))不满足这个条件! (至少,我认为这个问题与lowp浮点数有关......也可能是非常虚弱的罪恶实施......所以如果你能避免高数字罪?奖金?)
答案 0 :(得分:1)
您对“ lowp floats”一词的使用含糊不清,因为OpenGL / GLSL的不同实现可以支持lowp
个数字的不同精度。
出于这个问题的目的,我假设您使用“ lowp浮点数”来表示具有10位精度的16位二进制浮点数(通常称为半浮点数)。因此,这种格式的数字可以精确表示[0,1]中1/1024的任何倍数。
因此,对于刚刚定义的“ lowp floats”,您应该找到可以计算的随机数生成器(或哈希函数):
此方法将在[0,1)间隔内生成一个随机数,该间隔是1/1024的倍数。
对于GLSL,可行的选择可能是从均匀分布的随机数组成的纹理中采样。另请参阅“ Free blue noise textures”以获取涉及采样蓝噪声纹理的类似方法。显然,由于“ lowp floats”具有10位精度,因此纹理宽度不应超过1024像素或高度不超过1024像素。
答案 1 :(得分:0)
这是我能够想到的最好的,但我仍然不是100%满意(如果你看起来足够坚硬,你仍然可以看到类似小万花筒的效果......
float rand(float frag_x, float frag_y, float t)
{
float r = t*7.924;
return fract(sin(frag_y+frag_x)*r+sin(frag_y-frag_x)*r*.7);
}
(7.924和.7是我在键盘上捣碎 - 仅此而已)