单纯形噪声似乎给出了随机结果

时间:2012-05-07 19:36:12

标签: python simplex-noise

我正试图让我的单纯噪音(基本上是具有更好复杂性的柏林噪音)来工作并给我一些这样的好东西:

Perlin Noise

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

Ant war

我正在使用here中的单纯形代码,并且正在使用它:

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

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

2 个答案:

答案 0 :(得分:0)

我想你应该简单地将代码编写为

def generate(self):
    return simplex.scaled_raw_noise_2d(0, 254, range(0, self.width), 
                                       range(0, self.width))

答案 1 :(得分: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的幂(有时被错误地称为八度音阶)一个空隙变量)然后将它们全部加在一起并标准化,或缩放到适当的范围。