【发布时间】:2023-03-03 09:24:21
【问题描述】:
我一直在尝试使用噪声地图生成 3D Minecraft 世界,但无论我如何重叠声音,我都无法获得同时具有平坦区域和山区的噪声地图。
到目前为止,我尝试重叠不同的噪声图,得到不同的结果,我的最佳结果如下所示:https://imgur.com/0N2x5Ck.png(抱歉,我没有将其嵌入此处)
看起来“还可以”,但越仔细看,就越能看到有 2 种不同的噪声波,而且过渡非常粗糙。而整个世界就是这样的地形,没有明显的变化。
我不确定我需要改变噪音的哪个方面。我尝试过调整音阶、频率,通常只是用我能想到的任何东西来破解它,包括:
- 将负音设为 0(有点工作,每座山之间的空间增加了,但这还不够,也无助于混合)
- 平均不同的噪声图(制作一个非常平坦的世界,具有非常倾斜的渐变。看起来很糟糕)
- 上限值过高或过低(制造了一些高原,但最终仍然没有深远的平坦地面,仍然具有岛屿外观)
到目前为止,我所做的任何事情总是看起来像培养皿 (https://imgur.com/HgNyXUu.png)
重申一下,我正在尝试获得最终的噪声图,其中包括:
- 平坦、低洼的土地
- 平坦的海底,可以达到中等深度到深度
- 山地地形
都在同一张地图上,流畅。我该怎么做?
更新:Minecraft 的内置 SimplexOctaveGenerator 似乎无法正确生成八度音阶。我用我找到的生成器库(https://github.com/Auburns/FastNoise/)替换了它。八度音阶现在按预期工作,我不再有培养皿的外观,而且我已经实现了一些平坦的陆地和深海。现在所需要的只是山区。 (https://i.imgur.com/mKIpoaU.png)
【问题讨论】:
-
Minecraft 通过将噪声地图压缩到大约 3 个方块的差异来实现其平原区域,而山脉将其扩大到 128 个方块。
-
所以它是相同的噪声图,但应用了乘数?当我尝试它时,会出现尴尬的锯齿状区域(具有不同高度的块等)
-
这些边界是 Minecraft 用过渡生物群系填充的地方。 Jungle Edge、Extreme Hills Edge 等。它们是非常狭窄的生物群系,具有单独的 blockpos 高度,专门为从一个高度图过渡到另一个高度图而计算。
-
这是有道理的。但是该方法如何避免递归呢?就像它必须获取相邻的块来计算新的高度一样,但是通过获取相邻的块,它会导致更多的生成,并导致无限递归和 stackoverflow 错误。
-
确定表面高度不需要在 Minecraft 中加载区块。生物群系地图是一个单独的对象。此外,Minecraft 有几个不同的区块生成“区域”,正是为了让它可以将区块放入相邻的区块中而不会导致级联世界生成。
标签: java minecraft procedural-generation