高性能标记是正确的。让我解释一下原因。
地形生成器、云生成器和海洋模拟器都使用数学波浪、随机和噪声函数来构建有趣且可信的形状。除了生成器之外,种子值对任何人都无关紧要。该值使其能够非常快速地可靠地产生可重复的结果。计算机程序需要找到优化一切可能的方法,存储地形信息可能需要大量数据!因此,智能系统不会全部保存,而是会在需要时尝试重新生成地形。地形中的每个点都可以使用复杂的数学函数重新计算,您的种子值在该计算中起着重要作用。
例如,假设您想绘制一些 2D 山丘。您可以使用sine wave 来描述这些山丘的高度。
for distanceAway = 0, 1, 0.1 do
local hillHeight = math.sin( distanceAway )
print( hillHeight )
end
因为您使用数学函数来描述山丘,所以您可以立即知道,它应该是山顶、谷底还是介于两者之间的某个地方。而且每次运行都会一样!
但也许这些山丘看起来都太相似了。您可以通过向高度添加一些随机数来为这些山丘添加一些变化和抖动。
for distanceAway = 0, 1, 0.1 do
local hillHeight = math.sin( distanceAway ) + math.random()
print( hillHeight )
end
这可能看起来像是一个很好的补充:山丘现在有了更多的变化,它们可能有点不寻常的尖刺,但至少它们不是一遍又一遍的相同山丘......但现在我们有了一个问题。当我们再次要求同一座山时,它就不一样了!
local distanceAway = 10
local hillHeight = math.sin( distanceAway ) + math.random()
print( hillHeight )
hillHeight = math.sin( distanceAway ) + math.random()
print( hillHeight )
想象一下,您正在环游世界,发现山顶上有一块非常酷的岩石或树。所以你走开去找朋友,但当你回来时,山顶现在是一个山谷。无论你走到哪里,都会是这样。任何地方都没有持久的世界可以重游!
因此,让我们使用来自noise function 的伪随机数来代替随机数。这一次,让我们也提供一个种子值!
local seedValue = 0.2357
local distanceAway = 10
local hillHeight = math.sin( distanceAway ) + math.noise( distanceAway, 0.5, seedValue )
print( hillHeight )
hillHeight = math.sin( distanceAway ) + math.noise( distanceAway, 0.5, seedValue )
print( hillHeight )
漂亮!提供种子数允许噪声函数每次重新创建相同的随机数。现在我们有了可重现的地形生成,它也有一些有趣的变化!
如果您想了解噪声的其他用途,有一个很棒的slideshow made by the University of Texas,它深入探讨了随机数和噪声。
我希望这有助于说明为什么 Roblox 地形编辑器允许您提供“种子”值。据我所知,没有一个包含所有不同种子的主列表。但是,如果您找到了一个好的,请务必将号码分享给您的朋友,以便他们也可以尝试!