You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否使两个随机值的和呈均匀分布?Perlin Octaves噪声优化

解决Perlin Octaves噪声聚类于0的分布问题

问题本质

你当前实现的并非标准Perlin噪声,而是直接叠加**[-0.5, 0.5]区间的均匀分布网格随机值**。n个这类随机值加权叠加后,结果服从Irwin-Hall分布——随着叠加次数增加,分布会越来越集中在0点(呈钟形曲线),这就是聚类现象的核心原因。常数缩放或调整权重只是改变数值范围,无法修正分布形状,因此解决不了根本问题。


可行解决方案

1. 改用标准Perlin噪声的梯度计算逻辑

Perlin噪声的核心是梯度向量与距离向量的点积,而非直接取网格随机值,天然能缓解分布集中问题:

  • 每个网格顶点存储单位梯度向量(而非标量随机值)
  • 对采样点,计算其在网格内的相对位置,用平滑插值函数(如6t^5 - 15t^4 + 10t^3)对四个顶点的点积结果做插值
  • 叠加多八度时,用标准权重衰减(如(.5, .25, .125, .0625)),最后通过归一化将结果映射到[-1, 1]范围

2. 对现有叠加结果做分布变换

如果不想重构核心逻辑,可通过逆CDF变换将钟形分布转为均匀分布:

  • 预计算当前权重组合下,加权Irwin-Hall分布的CDF(累积分布函数)表或近似公式
  • 对每个叠加后的噪声值x,查找其在CDF中对应的累积概率p
  • 将p映射到[-1, 1]:result = 2*p - 1,最终输出会严格均匀分布在目标区间

3. 替换随机值的基础分布

将[-0.5, 0.5]的均匀随机值替换为拉普拉斯分布的随机值:

  • 拉普拉斯分布的概率密度为f(x) = (1/(2b))e^(-|x|/b),叠加后不会过度集中在0点
  • 调整尺度参数b,让叠加后的结果自然覆盖[-1, 1]范围,再做微调即可

内容的提问来源于stack exchange,提问作者My Name

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 12:07:09