← 全部概念
游戏系统 / 27
带种子噪声
相同种子,相同世界
交互演示
交互演示 · 移动指针或点击画面,观察变化
带种子噪声通过带种子的随机数生成器构建世界,因此同一种子总能重建相同的世界,存档只需保存这一个数字。上方的条带用 Math.random 分别决定 64 列的高度,所以地形参差不齐,每次重新生成也都不同。下方的条带则叠加带种子生成器产生的 4 层倍频值噪声,得到平滑的山丘;使用相同种子时,重绘结果与虚线轮廓完全重合,换一个种子则会生成新的山丘。
适用场景
如果希望仅凭一个很小的种子值就能重建世界,可以使用带种子的生成器。平滑噪声让邻近坐标的取值彼此相关,而独立的随机采样会产生突变。
实现示例
不依赖特定引擎的伪代码。请根据你使用的引擎调整函数和坐标约定。
height = 0
frequency = baseFrequency
amplitude = 1
for octave in range(4):
height += noise(seed, x * frequency) * amplitude
frequency *= 2
amplitude *= 0.5常见错误
在保存和读取存档时,保持算法与采样顺序稳定。如果使用共享的顺序随机数流,只要额外插入一次随机数调用,后续整个世界的生成结果都可能改变;基于坐标的采样能够避免这种依赖。
内容原作 Nicolas Zullo · 中文整理与交互改编