2

我试图让我的单纯形噪声(基本上是复杂度更高的 perlin 噪声)工作并给我一些像这样的好东西:

柏林噪声

然而,我得到的只是看似随机的东西:

蚂蚁大战

我正在使用这里的单纯形代码,并像这样使用它:

def generate(self):
    columns = []
    for x in range(0, self.width):
        rows = []
        for y in range(0, self.height):
            val = simplex.scaled_raw_noise_2d(0, 254, x, y)
            rows.append(val)
        columns.append(rows)
    return columns

相当简单,但似乎我错过了一些东西。不知道是什么

4

2 回答 2

0

这是一个古老的问题,但不能不回答!当然,对于访客来说,即使你自己已经弄清楚了。

我对python没有太多经验,但在我看来问题是频率太高,准确地说是1.0。或者换句话说,噪声被缩小得太远导致噪声混叠。

要“放大”,需要降低频率。假设在您的库中没有其他方法可以做到这一点,这看起来像这样。

def generate(self):
    columns = []
    frequency = 1 / 10  # zoom in 10 times
    for x in range(0, self.width):
        rows = []
        for y in range(0, self.height):
            val = simplex.scaled_raw_noise_2d(0, 254, x * frequency, y * frequency)
            rows.append(val)
        columns.append(rows)
    return columns

只是为了说明,这就是多倍频程噪声(看起来像浮云的东西)的工作原理,它在多个倍频程或 2 的幂(有时被错误地称为 octaves 的空缺的幂)上操纵噪声的频率变量)然后将它们加在一起并标准化或缩放到适当的范围。

于 2013-02-14T00:23:43.400 回答
0

我想你应该简单地把你的代码写成

def generate(self):
    return simplex.scaled_raw_noise_2d(0, 254, range(0, self.width), 
                                       range(0, self.width))
于 2012-05-07T20:17:02.320 回答