【问题标题】:Perlin noise for motion?运动的柏林噪音?
【发布时间】:2011-11-22 22:15:39
【问题描述】:

我成功地使用 Perlin 噪声来生成地形、云和其他一些漂亮的东西。但是,我现在正在尝试为一群飞虫(特别是萤火虫)制作动画,并且建议我也为此使用 Perlin 噪声。但是,我不确定该怎么做。

我想到的第一件事是,给定这样的噪声图:

  1. 为每只萤火虫分配一个随机的初始位置、速度和角加速度。
  2. 在帧上,按照方向矢量推进苍蝇的位置。
  3. 读取新位置的噪声图,并用它来调整角加速度,导致 苍蝇“转向”更亮的像素。
  4. 通过其他苍蝇的接近度再次调整角加速度,以避免它们聚集在局部最大值附近。

但是,这不包括苍蝇到达地图边缘的情况,或者它们可能最终只绕一个点运行的情况。第二种情况可能没什么大不了,但我不确定让它们转向以避免与地图边缘碰撞的可靠方法。

建议?教程或论文(请用英文)?

【问题讨论】:

    标签: xna motion perlin-noise


    【解决方案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 很遗憾。
    【解决方案2】:

    也许您正在寻找博伊德?

    Wikipedia page

    它在原始概念中没有 Perlin 噪声,也许您可​​以使用该噪声来生成吸引子或排斥子,就像您尝试使用“飞到更轻”行为一样。

    PS:上面链接的页面有一个指向Firefly algorithm的相关链接,也许你会对此感兴趣?

    【讨论】:

    • 我看到了萤火虫算法(为了方便谷歌搜索而得名),但也在寻找一些不太特定于萤火虫的东西。我去看看boids。
    • 如果您想避免碰撞,无论是鸟类、鱼类等,都非常适合进行任何群体类型的模拟。如果你想要一些感觉混乱的东西,即不是所有元素都倾向于一个统一的方向,你可以设置为无效的“凝聚力”力的影响。
    猜你喜欢
    • 2012-12-21
    • 2012-06-25
    • 1970-01-01
    • 2012-07-22
    • 2023-03-04
    • 1970-01-01
    • 2013-07-17
    • 2021-04-29
    • 2012-01-29
    相关资源
    最近更新 更多