运动的柏林噪音?
Posted
技术标签:
【中文标题】运动的柏林噪音?【英文标题】:Perlin noise for motion? 【发布时间】:2011-11-22 22:15:39 【问题描述】:我成功地使用 Perlin 噪声来生成地形、云和其他一些漂亮的东西。但是,我现在正在尝试为一群飞虫(特别是萤火虫)制作动画,并且建议我也为此使用 Perlin 噪声。但是,我不确定该怎么做。
我想到的第一件事是,给定这样的噪声图:
-
为每只萤火虫分配一个随机的初始位置、速度和角加速度。
在帧上,按照方向矢量推进苍蝇的位置。
读取新位置的噪声图,并用它来调整角加速度,导致
苍蝇“转向”更亮的像素。
通过其他苍蝇的接近度再次调整角加速度,以避免它们聚集在局部最大值附近。
但是,这不包括苍蝇到达地图边缘的情况,或者它们可能最终只绕一个点运行的情况。第二种情况可能没什么大不了,但我不确定让它们转向以避免与地图边缘碰撞的可靠方法。
建议?教程或论文(请用英文)?
【问题讨论】:
【参考方案1】:这是 2D perlin 噪声的一个很好的来源。您可以遵循完全相同的原则,但您可以创建一维渐变数组,而不是创建 2D 渐变网格。您可以使用它为特定轴创建噪声。
只需按照这个秘诀,您也可以为其他每个轴创建类似的柏林噪声函数!结合这些动作,你的手上应该会有一些好看的噪音。 (您也可以将这些噪声函数用作随机加速度或速度。由于 Perlin 噪声函数是全局单调的,因此您的苍蝇不会飞到疯狂的距离。)
http://webstaff.itn.liu.se/~stegu/TNM022-2005/perlinnoiselinks/perlin-noise-math-faq.html
如果您对其他类型的运动感到好奇,我建议您使用 布朗运动。这与灰尘颗粒在您的房间周围漂浮时所表现出的运动相同。本文最后会介绍一些更有趣的数学,但如果您完全熟悉 Matlab,前几组指令应该很容易理解。如果没有,只需 google 函数,并为您的环境找到它们的本地等价物(或自己创建它们!)这将比 perlin 噪声更现实一些,计算起来也更快
http://lben.epfl.ch/files/content/sites/lben/files/users/179705/Simulating%20Brownian%20Motion.pdf
飞行愉快!
【讨论】:
回答一年前的问题时的尴尬时刻。 不过,这是一个很好的答案。比我最终做的更好,并且将来会派上用场。谢谢。 两个链接现在都是 404 很遗憾。 链接存档在别处 - mzucker.github.io/html/perlin-noise-math-faq.html【参考方案2】:也许您正在寻找博伊德?
Wikipedia page
它在原始概念中没有 Perlin 噪声,也许您可以使用该噪声来生成吸引子或排斥子,就像您尝试使用“飞到更轻”行为一样。
PS:上面链接的页面有一个指向Firefly algorithm的相关链接,也许你会对此感兴趣?
【讨论】:
我看到了萤火虫算法(为了方便谷歌搜索而得名),但也在寻找一些不太特定于萤火虫的东西。我去看看boids。 如果您想避免碰撞,无论是鸟类、鱼类等,都非常适合进行任何群体类型的模拟。如果你想要一些感觉混乱的东西,即不是所有元素都倾向于一个统一的方向,你可以设置为无效的“凝聚力”力的影响。以上是关于运动的柏林噪音?的主要内容,如果未能解决你的问题,请参考以下文章