跳到主要内容
← 全部概念
游戏系统 / 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 · 中文整理与交互改编