【问题标题】:Simple procedural 3D Cave Generation?简单的程序 3D 洞穴生成?
【发布时间】:2012-08-01 21:14:54
【问题描述】:

我一直在研究 3D 程序世界,现在想开始添加洞穴系统。

我想找到一种以程序方式创建 3D 洞穴系统的相当简单的方法。我目前正在使用 Perlin Noise 生成我的世界,2D 用于高程/细节,3D 用于雕刻悬垂和较小的洞穴,但当涉及到长的相互连接的洞穴时,我会感到难过。

我希望得到更像 Minecraft 洞穴系统的东西。它们似乎非常紧密相连,几乎在任何方向上随机分支,并且洞穴中的几乎任何点都会具有相当圆形的外观,并且整个半径相当相等(不是最好的措辞,但不太清楚如何表达)。

像我想要的那样生成洞穴的最大挑战是我想要动态生成世界。世界目前是逐块生成的,从玩家所在的位置开始,然后从那里向外生成。我会不想要生成任何世界,然后然后使用漫游模式、元胞自动机等挖出洞穴。

一个很好的例子:

【问题讨论】:

    标签: 3d minecraft procedural


    【解决方案1】:

    在生成你的世界时,我将对你的生成算法做出一些相当大的假设。

    您正在创建一个类似于 Minecraft 的世界。这意味着世界是由方块组成的,没有这些方块构成了“空气”或玩家空间。因此,当您在世界上制作积木时,您不希望在您希望有洞穴的地方放置积木或相反地移除已放置的积木。好吗?

    如何生成洞穴(本质上是负空间)完全取决于您。但在你的问题中可能存在你的答案。洞穴“非常紧密相连,几乎在任何方向上随机分支,并且洞穴中的几乎任何点都会具有相当圆形的外观,并且整个半径相当相等”。然后,您所需要的只是生成符合该规范的生成算法,并且不在那里放置块或删除已放置的块或用您自己的话“挖掘”。

    作为旁注,让生成算法从玩家所在的位置生成听起来是一个相当糟糕的主意,但我想它是否有效。

    【讨论】:

    • 我这一代的结果确实只是空中与陆地(-1 比 1)。我使用 Marching Cubes 来平滑地形。是的,我正在寻找一种算法来完全按照我的描述创建负空间,但这就是我的不足之处。什么算法会做这样的事情?从玩家所在的位置生成并向外移动到底是一件坏事?我不会从他们下方的区块开始,因为他们可能站在当前区块内的泥土上,导致玩家向上移动而不是“跌倒”。
    • 我会尝试将世界视为一件事(需要根据您的规范生成的事物,该规范可能包括独立的洞穴,但通知世界放置算法,Perlin Noise 的衍生它的声音,负空间的存在)。如果您正在创建高度图,那么将无法创建凸面的东西,例如洞穴,您必须首先转换为某种网格。将玩家想象成不同的东西,一旦它生成就可以放置在世界中。明白了吗?
    • 如果您遍历每个 x/z 的每个 Y 值,您可以对整列的噪声进行一次采样,并随时设置密度值。然后,用您的 3d 噪声抵消这些正密度值,以雕刻出您的洞穴/悬垂/等。这消除了浮动地形。不管怎样,我知道我可以用我的方法挖出洞穴,但是按照我想要的方式去挖洞穴是在逃避我,因此我在这里。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-27
    • 1970-01-01
    相关资源
    最近更新 更多