土法炼钢兴趣小组的算法知识备份

游戏中的数学 (12) - 随机与噪声

目录

引言

“随机”是游戏重玩价值的源泉。但计算机无法产生真正的随机,只能产生伪随机 (Pseudo-Random)。 在程序化生成 (Procedural Generation) 中,我们不仅需要随机,还需要平滑的随机,这就是噪声 (Noise) 的舞台。

Noise Types

1. 伪随机数 (White Noise)

最常见的 Random.Range(0, 1) 产生的是白噪声。 它的特点是:当前值与上一个值完全无关。 如果你用它来生成地形,你会得到一堆尖锐的锯齿,像地震仪的记录,而不是连绵的山脉。

float height = Random.Range(0f, 1f); // 剧烈跳变

2. 柏林噪声 (Perlin Noise)

Ken Perlin 在 1983 年为电影《电子世界争霸战》发明了这种算法。 它的特点是:相近的输入产生相近的输出。 这被称为梯度噪声 (Gradient Noise)。

float height = Mathf.PerlinNoise(x * scale, y * scale); // 平滑过渡

2.1 维度

3. 分形噪声 (Fractal Noise)

单一的 Perlin 噪声看起来太圆润了。为了模拟真实的山脉(既有大轮廓又有小细节),我们需要叠加多个不同频率的噪声。 这称为倍频程叠加 (Octaves)。

\[ Value = \sum \frac{Noise(x \cdot 2^i)}{2^i} \]

总结


< 上一篇: 骨骼动画 | 回到目录 | 下一篇: 导航与行为 >


By .