为什么制作可以平铺的噪波功能要贵两倍?


13

我已经在几个地方看到,要使Perlin噪声循环无缝发生,就需要以略有不同的方式对它进行两次计算,并对两个结果求和。

此Perlin噪声数学常见问题解答给出了一个公式:

Floop(x,y,z)=(tz)F(x,y,z)+zF(x,y,zt)t

使噪声函数沿方向循环。它还提到将其扩展为在2维中循环将对进行4个评估,在3维中循环将对进行8个评估。ž ˚F ˚FFzFF

我了解这可以使图块之间实现无缝连接,这种连接不仅连续而且可以连续微分,但直觉上希望是这样的情况:如果仅对噪声函数进行一次评估,并以所需的图块大小为模减少网格点。如果噪声函数仅基于紧邻的网格点(2D噪声为4,3D噪声为8),那么当要计算的点超过图块的右边缘时,一定要使用最左边的网格点与其他栅格点之间的噪声质量相同吗?

由于我已经在多个地方看到了这种多重计算方法,因此我认为它必须具有一定的优势,但是我很难看到缺点,当网格点太大时,只需将网格点重新包装回起点即可。我想念什么?

Answers:


19

不幸的是,人们通常会建议这样做。以这种方式在噪声函数的两个(或四个等)转换后的副本之间进行混合是一个非常糟糕的主意。它不仅价格昂贵,而且甚至无法产生看起来正确的结果!

佩林噪音 混合Perlin噪音

左边是一些Perlin噪音。右边是两个Perlin噪声实例,从左到右堆叠和混合。

区别有点细微,但是您可以看到第二张图像在中间垂直的垂直列中对比度较低。在此,噪声函数的两个不同实例之间的混合率为50%。这样的混合看起来不像原始的杂讯功能:看起来像是泥泞的混乱。

好的,所以仅查看原始噪声并没有那么糟糕...但是,如果您随后对图像进行任何非线性变换,则不均匀的对比度可能会引起问题。例如,这是阈值为60%的那​​些图像。(例如,想在海洋中生成岛屿。)

门槛Perlin噪音 阈值混合Perlin噪声

现在,您可以清楚地看到右侧的图像中间有更少,更小的白色区域。

就像您提到的,对于像Perlin这样的基于网格的噪声,更好的方法是在网格点上平铺伪随机渐变。这样做既简单又便宜,然后您可以像往常一样将插值算法应用于渐变(就像平铺纹理的双线性插值一样)。这将产生平铺噪声而没有任何怪异的伪影,因为它基础噪声算法一起工作而不是在其顶部工作。通过将随机特征点作为基础,您可以对沃利噪声(细胞噪声)使用类似的策略。

但是,具有多个八度的噪音并不总是那么容易。如果八度音阶之间的相对标度(即“ lacunarity”)不是整数或简单的有理数,那么您可能无法找到所有八度音阶网格匹配的方便平铺点。您可以独立地平铺每个八度音阶,但是在那种情况下,整体噪声仍然无法平铺。


4
并排图像确实对获得直观的说明有所帮助。对于我自己的答案,我将牢记这一点。
trichoplax
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.