我想我会更好地理解您的要求。
噪声不是随机的-看起来是随机的,但完全基于数学公式并且可重复。所有信息都编码在公式中。这意味着您可以拥有一个可能覆盖无限区域的公式,而只需在所需区域的坐标上使用该公式即可。当需要相邻区域时,只需在新坐标上重新使用公式,由于公式会产生连续值,因此这些区域将无缝连接。
这是一个简化的示例,使用正弦代替perlin噪声生成高度,并且在X轴上想象世界是无限的,而在Y和Z轴上只有1个单位高。
公式为: height(x,y) = sin(x/20)
游戏开始,我们为附近区域生成高度。(0,0)至(9,0):
[0.0, 0.05, 0.10, 0.15, 0.20, 0.25, 0.30, 0.34, 0.39, 0.43]
我们有一座小山,向右上升。假设我们走到了结尾,现在需要生成从(10,0到19,0)的值:
[0.48, 0.52, 0.56, 0.61, 0.64, 0.68, 0.72, 0.75, 0.78, 0.81]
请注意山丘如何稳定地上升,并且(10,0)的值与(9,0)的值很好地相符。这是因为正弦函数是连续的,这基本上意味着,如果将其输入2个相邻的数字,您将得到2个相邻的结果-对于相邻的特定定义。因此,如果您使用世界坐标作为定义世界的函数的参数,则无论您一次生成多少,都将得到一个连续的景观,该景观可以融合在一起。当您生成新零件时,它们的高度会自动从现有零件上继承下来,因为高度已经预先确定。
如果世界不会改变,那么您甚至不需要存储任何东西,因为您可以从公式中精确计算出给定点的高度。显然,使用Minecraft之类的世界是完全可变形的,因此在创建时只需保存每个块即可。鉴于相邻块之间具有高度的一致性(即,如果1个块是草,则其旁边的块也很有可能也是草),您可以非常有效地压缩数据-运行长度编码会起作用很好,但是几乎所有标准压缩算法都可以。
尽管我已经提到高度是最明显的值,但是您可以使用同一系统来生成所需的任何特征。使用具有连续属性的数学函数,其中输入是您的世界坐标,并且可以确定地标,矿床,产卵点的存在,无论您喜欢什么。(显然,一个公式中的值可能会影响另一个公式-将点煤放置在半空中是没有意义的,因此您可以生成世界高度图,然后仅计算距离地面足够远的区块的煤炭可能性。)