GLSL-ES FP16极限的随机粒状噪声

问题描述 投票:11回答:3

我正在尝试编写一个严格的FP16限制的紧凑而简单的噪声函数。这是到目前为止我得出的结果,但是我认为该操作的某个地方对于fractsin来说,这个数字变得太小了,因为在GPU中,我必须为这些写在 FP16限制。关于我在做什么错的任何想法吗?顺便说一句,我不能使用时间变量,也不能采样噪声纹理。我需要正确实现的功能必须紧凑,小巧且自给自足,并产生简单的粒状噪声效果。注意:下一种算法在任何台式机GPU卡上都能正常工作,但是在“ MALI 400 MP” GPU上完全失败,因为该算法对浮点值有FP16限制。

vec3 noise(vec3 color)
{
    float variation = length(color);
    float dot_product = dot(variation, -0.577350269);
    float sin_result = sin(dot_product) * 1.19245;
    float random = fract(sin_result);
    return color + vec3(random);
}

如果有人可以为GLSL-ES

建议任何其他随机函数,但严格限制为FP16,那也很好。我知道其他随机实现,例如单纯噪声,但是对于我需要做的事情来说,它们太大且太慢。因此,PerlinSimplex噪声算法不是一个选择。

我正在尝试编写一个严格的FP16限制的紧凑而简单的噪声函数。这是到目前为止我得出的结果,但是我认为该操作的某个地方对于fract或...

algorithm random shader 16-bit glsles
3个回答
1
投票

这些是我使用的,但我不知道它们是否都在FP16限制内工作:


0
投票

散列函数就足够了吗? Pearson hashing过去是为8位寄存器设计的,它非常简单:您对一个256字节的查找表进行硬编码(或者如果没有问题,则可以进行某种简单但非线性的排列)。我们将其称为T。对于输入的每个字节,您都将其与哈希值进行XOR运算,然后查找该值以获取新的哈希值。


0
投票

使用Gold Noise,均匀的标准化分布。它是专为以低精度(lowp)运行而设计的。它还接受种子(例如时间)。

© www.soinside.com 2019 - 2024. All rights reserved.