我所遇到的问题是如何使用双轮廓算法将3D Perlin Noise用作密度函数 . 我发现很难找到任何使用或讨论如何使用3D Perlin Noise和Dual Contouring来生成地形的细节的Dual Contouring实现或博客/写作 .

我已经设法实现了具有隐式球体的双轮廓,因此知道它的工作正确并且具有密度函数如何工作的基本概念(至少在球体情况下),具有Perlin Noise的基本知识(通过经过测试的3D版本实现)纹理输出和基本立方体素地形生成)并理解如何计算梯度(在这种情况下为分析导数)以用于QEF计算 .

我已尝试了多种方法来尝试获得相对不错的外观,但没有成功:

1)通过Perlin噪声生成网格的密度值(即,值<1在内部,> 1在外面,0在轮廓上),然后生成交叉点值(轮廓与立方体相交),立方体完全分开再次使用Perlin Noise,使用坐标输入作为我们所使用的立方体的索引,具有较小的偏移量 . (基本上只生成一个真正的立方体表面)

2)以与球函数类似的方式使用Perlin Noise,通过Perlin Noise生成密度网格,然后沿着两个附近立方体密度值之间的边缘插入每个交叉点,直到Perlin Noise达到0(即确切点为密度函数与边缘相交)然后使用从Perlin Noise触发0输出的坐标 . (再次生成一个立方体表面,认为可能是因为插值通常在共同点击整数值时触发0,即在Perlin latices边缘 . )

3)这是我最成功的一个,类似于2),除了我将Perlin Noise的输入值保持在0.1到0.9范围内,即保持在单个格子内 . 它为某些立方体提供了ok值,但计算QEF(立方体的平均点)会在多维数据集范围之外发送相当数量的点,尽管所有交叉点都在多维数据集内 . 我认为它与我使用Perlin Gradients的方式有关,基本上我插值找到为Perlin Noise返回值生成0的坐标,然后我使用此坐标的渐变(分析导数)和所有这些的高潮使得坐标数英里远 .

如果需要我会尽我所能,请随时要求发布更多信息,这是我第一次发帖,如果帖子低于标准,那就很抱歉 .

tl; dr如何使用3D Perlin Noise作为密度函数在双轮廓算法中生成地形?特别是在为QEF计算生成边的交点和法线时 .

Edit: 新的当前方法我正在尝试(并且失败)使用perlin噪声生成器来填充Perlin Noise以填充初始密度数据,在此点之后对于任何边缘交点我做一些简单的线性数学来找到比率0交叉的线(如果一侧的密度值为0.5,另一侧的密度值为-0.5,则给定的值为0,它们之间为50%,因此为0.5f) . 一旦我有了这个值,我只需将它添加到相关的坐标上即可得到该边缘的交点 . 在此之后,我使用交点作为输入来计算Perlin Noises 3D Gradient(基本上只运行噪声函数,将其作为输入并使用此处找到的方法计算分析导数:3D Perlin noise analytical derivative) .

完成此操作后,梯度和交点值将输入到QEF函数中,该函数使用SVD分解而不是QR分解描述为在原始双轮廓纸中更准确(发现SVD更简单,它听起来也像'从论文来看,表现较差 .

一些截图有望通过展示它目前的样子来帮助一点 . 第一个是对角线代码被注释掉,第二个有对角线就位,在“顶点超出边界”的所有打印之后的数字是它们的立方体之外的顶点数 .

http://imgur.com/di1DxRQ

第二个是对角线划分:

http://imgur.com/X4uCab3