【问题标题】:Generating a procedural mesh from a 3D graph从 3D 图形生成程序网格
【发布时间】:2018-05-29 05:49:39
【问题描述】:

想象一个洞穴系统,它表示为顶点和边的图形,每个顶点在 3D 空间中都有一个位置,每条边代表一条隧道。或者也许边代表道路,顶点代表拐角和交叉点。关键是我们有一个几何数据图,我们希望能够推断出围绕该数据的任意结构。什么算法可以生成网格来以 3D 形式渲染这些东西?

这是一个关于类似主题的优秀 Youtube 视频:Unite 2015 - A coder's guide to spline-based procedural geometry。它处理一个更简单的情况,我们只需从一个点到另一个点,没有分支,但类似的概念肯定会用于渲染基于图形的 3D 结构。

【问题讨论】:

  • 不确定这是否符合 [graph-algorithm] 的要求。无论如何有趣的问题(所以+1)我添加了一个答案,方法是我将如何攻击这个。

标签: algorithm 3d graph-algorithm computational-geometry


【解决方案1】:
  1. 从创建圆形洞穴开始

    您可以使用Smoothly connecting circle centers 作为起点。 然后通过将圆圈更改为一些不同的形状,为其添加一些随机性和更多类似洞穴的轮廓。您还可以根据到图形交点的距离来调整半径(或宽度)。不要忘记存储UV 映射,以便以后进行适当的纹理化。这应该很简单,您可以将圆柱轴用作U,将“圆”的角度参数用作V。这也可以用作bump/normal mappingTBN 矩阵。

    主要问题是图形交点。您将需要创建一个网格,以平滑地连接相交的管,例如通过某个洞穴“房间”。这应该是可行的,因为顶点应该按圆的参数角度排序,这样您就可以知道哪些顶点在每个管的哪一侧,并且可以通过编程方式连接它们而无需任何可怕的努力(即使使用适当的多边形缠绕)。

    这样你应该可以生成几何图形了。

  2. 添加对象和功能

    为此,您可以完全随机,也可以像我在Random Island generator 所做的那样使用一些物理方法来创建生物群落。所以你可以添加/利用一些规则,比如你离入口或水有多远,或者你有多深来生成植被和东西。

  3. 概括

    当将 #1,#2 放在一起时,尝试对其进行编码,以便输入每个洞穴区域和图表的特定种子。通过这种方式,您可以单独且重复地生成洞穴的每个部分。只需将此种子添加到您的图表中即可。

    为了实现平滑过渡,您还应该生成相邻的洞穴区域并插入它们之间的连接。

    另一种选择是在没有生物群落的情况下拥有统一的洞穴环境,并在洞穴区域内部添加比边缘区域更多的东西,因此在连接点不会立即发生太大变化。

[备注]

现在您显然将图表作为输入,但以防万一您也可以随机生成该图表:

为了使洞穴墙壁更加逼真,您可以使用 Diamond&Square(来自岛生成器链接)来调节半径,只需确保在角度参数方向上循环进行平均,这样生成的地图就可以无缝添加到圆柱体表面时。

【讨论】:

    猜你喜欢
    • 2022-01-27
    • 1970-01-01
    • 2012-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-16
    相关资源
    最近更新 更多