【问题标题】:Pipeline to create Voronoi Meshes创建 Voronoi 网格的管道
【发布时间】:2015-10-21 16:17:04
【问题描述】:

我想实现一个 Maya 插件(这个问题独立于 Maya)来创建 3D Voronoi 模式,类似于

我只知道必须从点采样开始(我实现了this paper中描述的自适应泊松采样算法)。

我认为,从这些角度来看,我应该创建应用 Voronoi 的网格的 3D 线,但结果与我的预期不同。

以下是我处理从 scipy.spatial.Voronoi 获得的结果的一些示例(建议 here):

vor = Voronoi(points)
for vpair in vor.ridge_vertices:
    for i in range(len(vpair) - 1):
        if all(x >= 0 for x in vpair):
            v0 = vor.vertices[vpair[i]]
            v1 = vor.vertices[vpair[i+1]]
            create_line(v0.tolist(), v1.tolist())

灰色顶点是采样点(原始形状是一个简单的球体):

这是一个更复杂的形状(手臂)

我错过了什么?谁能建议我必须实施的适当管道和算法来创建此类模式?

【问题讨论】:

  • 你能至少解释一下为什么要投反对票吗?
  • 这不是python问题和/或数学问题吗?
  • 我不是在问一个实现,而是关于我必须遵循的管道以获得这样的网格。我不在乎语言,我只是询问我必须遵循的步骤。类似于:采样点 -> 应用此算法来获取此输出 -> 将其用作 Voronoi 的输入 -> 处理 voronoi 结果以获得此网格。
  • voronoi-diagram 的工作原理很简单,你知道吗?
  • 我知道它是如何工作的,我不知道我是否缺少任何步骤来获得这样的网格。

标签: python graphics 3d pipeline voronoi


【解决方案1】:

我看到你的问题,因为你发布了它,但没有真正的答案给你,但是我看到你仍然没有得到任何回应,我至少会写下我的一些想法。不幸的是,它仍然不能完全解决您的问题。

对我来说,您似乎在这个问题中混合了几个单独的问题,因此将其分解为几部分会有所帮助:

Voronoi 图:

根据定义,该图表是无限的,因此当您直接绘制它时,您应该期望在第二张图像上出现类似的混乱,所以这看起来很好。我不知道 SciPy 是如何做到这一点的,但是我使用的实现将一些边缘末端标记为“无限”并为我提供了边缘方向,因此我可以自己将其剪辑在一定距离处。您需要检查从 SciPy 获得的确切数据。 在 3D 世界中,您几乎总是希望移除这些无限区域以获得任何有意义的渲染,或者至少移除包含您的相机的区域。

积分生成:

泊松圆盘可以作为一些样本数据或早期研发,但它也是最无聊的一个:)。您将需要更多方法来生成输入点。 我试图想象你的类似球的例子所需的输入,我想出了这样的东西:

  1. 创建两个具有相同中心但半径不同的点球体。

当您从中创建 Voronoi 图并删除无限区域时,您最终应该会得到类似足球的东西。

如果你随机创建两个球体,你会得到非常不规则的“球”边界,但如果你缩放一个球体的点,用于第二个球体,你应该得到一个规则的网格,类似于球。您也可以使用类似的点,但添加一些随机偏移来控制表面不规则程度。

  1. 获取您的计算图,并为每条边沿该边创建几个点 - 这将为您提供小区域构建更大区域的边缘。再次使用随机偏移。尝试忽略不触及任何无限区域的边缘以获得与您的图像相似的结果。

  2. 从两个阶段获取点并再次计算图表。

网格生成:

到目前为止,它看起来不像您的目标图像。事实上,以生产质量(对于 Maya 插件)可能很难做到这一点,但我看到了一些可能会有所帮助的技巧。

我首先要尝试的是获取所有边缘并沿着它们挤出一些圆圈。您可以调整圆的大小以使其末端稍大。然后在所有这些网格和最后的一些网格平滑之间执行布尔“或”。 这种方式可能会给你类似的结果,但你需要小心网格交叉点,它们会变得丑陋并需要一些特殊处理。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多