FBM 分形噪声

7 / 15
学习程序化噪声的基础构件与常见风格化手法。

单层 Value Noise 看起来过于平滑、缺少层次感。FBM(Fractal Brownian Motion)的做法是把多层噪声叠在一起,每一层频率翻倍、幅度减半:

下面看 fbm 内部是怎么做的。


octave 叠加

fbm 循环 4 次,每次叠加一层:

第 1 层(a=0.5):大轮廓,贡献 50% 第 2 层(a=0.25):中等细节,贡献 25% 第 3 层(a=0.125):小细节,贡献 12.5% 第 4 层(a=0.0625):极细纹路,贡献 6.25%

叠加之后既有大起伏,又有细纹路,像真实地形一样有层次。


为什么叫"分形"

每层和上一层的比例关系固定(频率 ×2,幅度 ×0.5),这种自相似的结构就是分形的特征。放大任何一块区域,都会看到和整体相似的细节,就像海岸线或山脉轮廓。


试着改一改

改动效果
6.0 改成 2.0整体频率降低,起伏更缓
i < 4 改成 i < 8叠加更多层,细节更丰富(但更慢)
a *= 0.5 改成 a *= 0.7高频层贡献更大,纹路更粗糙
p *= 2.0 改成 p *= 1.5频率增长变慢,各层更接近

练习

main 函数里用 fbm(vUv * 6.0) 计算分形噪声,输出灰度图。

答案解析

n = 0.0 替换成 n = fbm(vUv * 6.0) 即可。

  • vUv * 6.0:控制整体频率(基础层的粗细)
  • fbm(...):4 次 octave 叠加,返回有层次感的 0–1 灰度值
  • vec3(n):灰度输出

初始 n = 0.0 是全黑。替换之后你能同时看到大块的明暗起伏和其上叠加的细纹路,比单层 valueNoise 丰富得多。

试着把循环次数从 4 改成 2,感受减少层数后细节的消失。

GLSL 代码编辑器

正确代码预览

当前代码预览