【问题标题】:Can I use a 3-dimensional simplex noise implementation to generate noise over a spherical surface?我可以使用 3 维单纯形噪声实现在球面上生成噪声吗?
【发布时间】:2015-08-22 02:25:10
【问题描述】:

说,我想在一个球体上产生噪音。

我想通过程序生成 3D 'blob'。并使用这些 blob 生成低多边形树,有点像这样:

我可以按如下方式完成吗?

  • 首先定义一个由一定数量的顶点组成的球体,每个顶点由已知的 (x,y,z) 坐标定义
  • 然后生成一个额外的熵(或噪声)值e,如下:

    var e = simplex.noise3d(x,y,z)

  • 然后使用scalar multiplication将原点偏移,或将原点挤压到3D空间,熵值e:

    point.position.multiplyScalar(e)

  • 最后从这些新计算的偏移点重建一个新的网格。

我能否定义一个由一定数量的顶点组成的球体,每个顶点由已知的 (x,y,z) 坐标定义,然后生成熵或噪声值

我考虑这种方法是因为它被广泛用于在二维平面上使用二维噪声生成地形网格,从而产生一个三维平面:

看例子,我理解使用二维噪声生成地形的概念如下:

  • 您定义点的二维网格,本质上是一个平面。因此,每个点都有两个已知坐标,并在三维空间中定义为 (X, Y = 0, Z)。在这种情况下,Y 表示将由噪声发生器计算的高度。

  • 您将网格中每个点的 X 和 Z 坐标输入到 Simplex 噪声生成器,它会返回噪声值 Y。

    var point.y = simplex.noise2d(x, z);

  • 现在我们的点网格已经在 3D 空间的 Y 轴上发生了位移,我们可以从它们创建一个看起来很自然的地形网格。

我可以使用相同的方法使用三维噪声在球面上生成噪声吗?这甚至是个好主意吗?还有更简单的方法吗?

我在 WebGL 和 Three.js 中实现这个。

【问题讨论】:

  • 我有一个perlin噪声顶点位移的例子,可以看HERE。我用着色器做的其他实验是HERE

标签: algorithm three.js webgl noise procedural-generation


【解决方案1】:

如果您想让某物看起来像一棵树,您应该使用树生长算法首先模拟树的分支模式,然后再将树的外表面多边形。不同类型的树木具有决定它们如何生长的所谓“习性”或手征模式。一篇描述了一些用于模拟分支/叶子生长的基本方程的论文是:

http://www.math.washington.edu/~morrow/mcm/16647.pdf

【讨论】:

  • 我已经能够生成可用于檐篷的random 几何图形。这对于低多边形应用程序应该足够了。不过,感谢您的论文参考,这将有助于生成分支。
猜你喜欢
  • 2011-09-20
  • 2011-09-27
  • 1970-01-01
  • 2013-08-22
  • 2012-01-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多