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

OpenSimplex噪声生成星空出现重复图案的问题咨询

问题根因

这个重复图案和OpenSimplex算法本身、你用的Go实现包都没关系,纯粹是采样方式错了:

  • OpenSimplex是梯度噪声的一种,底层基于规则晶格做插值计算,局部极值点天然沿晶格网格分布。你直接把整数像素坐标x/y原样传入Eval2,采样步长刚好等于噪声的基础晶格尺寸,再加上你把筛选阈值设到0.998,只保留全场最顶端0.2%的极值点,这些点自然会顺着晶格规律排布,肉眼很容易捕捉到重复的网格特征。
  • 你用的NewNormalized32是float32精度版本,大整数坐标下的浮点精度损失会进一步放大这种晶格对齐的规律性,这也是为什么你切到Eval3调整深度值没用——只要还是整数步长采样、卡极高阈值取极值,这个规律就消不掉。
  • 把二维坐标展平成一维传入后重复消失,本质是这种传参方式彻底打乱了二维平面上的晶格对齐关系,极值点不再沿规则网格排布,自然看不出重复。
修复方法

做两个简单调整就能解决,不需要换噪声实现:

  1. 给传入的坐标乘一个远小于1的缩放系数,把采样步长拉到远小于噪声晶格尺寸,不要卡整数步长采样。示例:
// 系数根据想要的星星密度调整,常用区间0.005~0.02
const noiseScale = 0.008
v := noise.Eval2(float32(x)*noiseScale, float32(y)*noiseScale)
  1. 不要用0.998这么极端的高阈值,这种阈值硬卡最顶端的极值点,哪怕缩放了坐标也容易看出规律。可以把阈值降到0.8~0.9区间,配合调整noiseScale到你想要的星星稀疏度即可。

注:所有梯度类噪声(Perlin、Simplex、OpenSimplex均在此列)都不适合直接用整数步长、极高阈值取点生成星空,这种用法相当于直接把噪声底层的晶格结构暴露出来,不属于算法缺陷。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 04:36:14