使用Python和NumPy生成n维Perlin噪声的批次

3

我学会了如何使用这份很棒的PDF实现像素一次的Perlin噪声,但显然它非常慢。

第一个想法是批量生成 - 代替从0.0到1.0遍历每个像素,生成一个numpy.linspace,然后使用numpy的矢量化操作来处理它,但这似乎超出了我的能力范围,我总是迷失方向并删除我的所有代码。

有没有好心人可以帮助我?提供尽可能多的示例代码和详细的每一步解释都将对我有所帮助。

编辑:通过“批次”我意味着包含空间中不同点的Perlin噪声值的数组,而不是我的noise()方法仅一次生成一个像素。


你能澄清一下你的“批次”想法吗?我对Perlin噪声本身一无所知,但我可能仍然能够提供帮助。您是想预先生成纹理,然后将它们插值到目标表面上吗? - Adrian Ratnapala
所谓批处理,是指一次处理多个像素,例如包含噪声的数组,我可以在后续使用它,而不是每次逐像素生成并调用Python函数。 - Llamageddon
啊 - 我明白了,你正在尝试使用numpy的向量化,但效果不佳。这并不太奇怪。你的代码是否足够简单,可以在某个地方发布,以便我们查看?如果事情确实很复杂,你最好编写一个C函数,逐像素执行任务,然后将其包装在向量化的Python函数中。 - Adrian Ratnapala
1个回答

1

如果我猜得没错的话,Asmagedon想要预先计算他的噪声纹理,然后将它们绘制到不同尺寸的其他目标上。

一种方法是使用scipy.signal.resample,它可以插值和子采样信号。从记忆中来看,它只能一次处理一个维度--只需循环处理各个维度即可。

可能有更好的抗锯齿方法,但这种方法很简单。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接