我在寻找为地形生成器添加真实感的最佳方法时遇到了麻烦。在这一点上,我有一个完美工作的洪水填充,但是如果我想添加任何类型的真实感,我需要添加高度变量。我见过以下尝试制作高度图的方法:
- 构造板块 https://experilous.com/1/blog/post/procedural-planet-generation
- 单工/柏林噪声
- 钻石平方算法
现在我正在通过我的洪水填充产生板块,但我不确定从那里去哪里。
我不确定是否要使用噪声函数,因为我需要在大陆内生成生物群落以使其看起来逼真(只有山脉的大陆是不现实的)。钻石平方算法可能无法满足我的需求,因为我想灵活地调整尺寸。
如果我有方形瓷砖来提供一些真实感,不是非常耗费资源,并保留我拥有的代码,那么生成高度图的最佳选择是什么?
下面是生成的图像,生成代码在 Github 项目中: https://github.com/Hunterb9101/TileWorkspace/blob/59fe1f28f019d7128c970772d1ef6bd30d63072c/Generation.png
tldr:我会使用柏林噪声生成器,并在生物群落上添加一些噪音。
本文/教程介绍了代码片段及其实现方法。为您的任务建议最佳算法完全取决于您的技能和最终结果目标。
然而,对柏林噪音的简要描述,并考虑到现实的目的使用它......
与大多数地形生成一样,噪声函数是您的朋友 - 特别是柏林和/或单工噪声。我已经实现了一些 行星地形生成算法,虽然它们是 2D 的, 生成的高度/"纹理"贴图可以投影到球体上 相当容易。我认为转换为十六进制格式不是问题 也。
我的技术一直在创建多个噪声层,例如温度 和湿度。温度与纬度坐标融合,在 为了使赤道更热,两极更冷,同时噪音 确保它不是一个简单的渐变。最终地形类型为 根据"如果炎热且不潮湿,则选择沙漠"等规则选择。你 可以在这里看到我的 JavaScript 实现: https://github.com/tapio/infiniverse/blob/master/js/universe/planet-aerial.js
至于水的百分比,你可以调整水位 高度作为噪声函数往往具有恒定的平均值。另一个 选项是应用指数过滤器(在生成时也很有用 云,请在此处查看我的实现)。
另一种生成想到的球形地形的方法(还没有 测试)是使用3D噪声并从球体表面采样, 使用结果值作为该点的地面高度。您可以 然后根据地球上的水量和 纬度坐标。
最后,我将链接到3d行星的一个实际实现 地形生成: http://libnoise.sourceforge.net/tutorials/tutorial8.html
要生成任何随机风格的逼真地形,您将不得不使用某种噪音。在过去的项目中,我自己也使用过钻石平方算法。然而,这只是简单地生成高度图。
对于更多的轻松阅读,我会看看这篇关于现实地形技术的文章。