C# 二维程序生成

C# 二维程序生成,c#,monogame,procedural-generation,C#,Monogame,Procedural Generation,我目前正在尝试为一个超世界实现程序生成的tilemaps。我尽可能地产生噪音,并在产生的噪音范围内使用不同的范围构建瓷砖贴图。然而,它们非常粗糙,因为每个不同的“生物群落”只是一块瓷砖。实施每个生物群落的细节和边缘的最佳方式是什么?e、 g森林生物群落中的花朵/树木等,海滩和海洋生物群落之间的海滩-水过渡瓷砖等 在某些情况下,我和一个朋友在MonoGame中构建了一个引擎。我们实现了一个块加载系统,用于动态生成和无加载屏幕的无限滚动(我知道这并不完全是最先进的,但我为此感到自豪)。每个区块是50

我目前正在尝试为一个超世界实现程序生成的tilemaps。我尽可能地产生噪音,并在产生的噪音范围内使用不同的范围构建瓷砖贴图。然而,它们非常粗糙,因为每个不同的“生物群落”只是一块瓷砖。实施每个生物群落的细节和边缘的最佳方式是什么?e、 g森林生物群落中的花朵/树木等,海滩和海洋生物群落之间的海滩-水过渡瓷砖等

在某些情况下,我和一个朋友在MonoGame中构建了一个引擎。我们实现了一个块加载系统,用于动态生成和无加载屏幕的无限滚动(我知道这并不完全是最先进的,但我为此感到自豪)。每个区块是50x50个分片,在任何给定时间加载9个区块。当玩家向任何方向移动区块时,对面角落的区块将被卸载,新区块将沿玩家行走的方向加载。因为玩家从生成块的相反位置开始,所以地图足够大,玩家到达地图时,地图已经生成完毕,所以这并不是一个问题。我不确定我现在考虑的方法是否会改变这一点

无论如何,我认为我需要在每个生物群落中确定一组特定的瓷砖,并为每个生物群落实例生成噪音,以确定特定于该生物群落的“细节”瓷砖的位置。对于边缘,我只需通过每个相邻的瓷砖来确定它是否是一个不同的生物群落。如果是,请使用过渡平铺。然而,整个想法似乎效率很低,因为每次玩家移动块时都会产生大量的噪音,并在7500个块之间循环。我一直在想一个更好的方法,但这是我第一次尝试程序生成,我在网上找不到比生成噪音和使用噪音生成大块土地更深入的内容。我是否应该使用更有效的方法,或者我的下一步是优化?我无法想象我的方法将是非常有效或实用的,因为我将在每个瓷砖中循环多少。有人有什么想法或建议吗?提前感谢。

一个想法:

  • 使用“噪波”生成高度、温度、雨水等。。。对于每个区块
  • 使用生成的值确定每个区块的生物群落
  • 对于每个平铺,插入生成的周围块
  • 使用插值选择地面纹理、植物等
这将在生物群落之间形成平滑的边界,同样生物群落的不同区块也会有不同的感觉