【问题标题】:How does one choose the seed using noise.py module如何使用noise.py 模块选择种子
【发布时间】:2018-04-29 01:02:14
【问题描述】:

如何在python中为噪声模块选择种子?

我有这段代码:

from noise import snoise2
terrainTiles[varX][varY].set_elevation(snoise2(x=varX/20,y=varY/20,octaves=1))

它确实会产生适当的噪音;但是,我无法更改种子。我一直在寻找几个小时,但还没有找到解决方案。谢谢!

函数的更简单示例:

from noise inport snoise2
print(snoise2(10,10))

解决方案

我找到了一个与noise.py 分开的解决方案。我使用了我在 github 上找到的这个脚本:https://gist.github.com/eevee/26f547457522755cb1fb8739d0ea89a1

这也没有种子函数,但是,它有一个无偏函数,因此远处的坐标仍然有适当的噪声。我使用了 3 维噪声函数,其中 3 维值本质上是种子。此处显示的代码:

#generate world seed
worldSeed = random.randint(0, 100000000)

#generate noise objects. I hate this but im ghettoing it so that the 3rd dimension value is essentially the seed, I hate this but it works
elevationNoise = noise.PerlinNoiseFactory(dimension=3, octaves=1, unbias=True)

并将其应用于一个值:

terrainTiles[varX][varY].set_elevation(elevationNoise(varX/20,varY/20,worldSeed)*1.15)

【问题讨论】:

    标签: python python-3.x procedural-generation perlin-noise


    【解决方案1】:

    可以这么说,没有种子参数,但是有一个可以修改的基本参数,它指定了噪声坐标的偏移量。例如:

    import random
    from noise import snoise2
    
    seed = random.random()
    print snoise2(10, 10, base=seed)
    

    base 需要浮点数

    所以对于您的第一个示例,您应该能够将 base=seed 添加到您的 snoise2(..):

    terrainTiles[varX][varY].set_elevation(snoise2(x=varX/20,y=varY/20,octaves=1, base=seed))
    

    【讨论】:

    • 感谢您的回复,即使我找到了解决方案。我尝试了与您所做的类似的事情,但我没有使用“基础”,而是将 x 和 y 值倾斜了 (512 * worldSeed)。无论如何感谢您的帮助!
    猜你喜欢
    • 2019-01-31
    • 1970-01-01
    • 1970-01-01
    • 2021-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-15
    • 1970-01-01
    相关资源
    最近更新 更多