如何使用 noise.py 模块选择种子
How does one choose the seed using noise.py module
如何选择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)
可以这么说,没有种子参数,但是有一个可以修改的基本参数,它指定噪声坐标的偏移量。例如:
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))
如何选择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)
可以这么说,没有种子参数,但是有一个可以修改的基本参数,它指定噪声坐标的偏移量。例如:
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))