湍流噪声

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

FBM 的曲线是平缓起伏的。湍流噪声把这条曲线"折叠"成尖锐的谷底——高处被拉成两侧的坡,低处变成尖锐的暗纹:

下面拆解这个变换。


abs(n * 2.0 - 1.0) 做了什么

分两步来看:

  1. n * 2.0 - 1.0:把 0–1 的噪声映射到 -1 到 1,噪声 50% → 0,噪声 0% → -1,噪声 100% → 1
  2. abs(...):取绝对值,负值被折回正值

结果是:原来平缓过 0 的地方(噪声 50%)变成了 V 形谷底,原来的极值(0% 和 100%)都变成了亮峰。

在 FBM 上使用时,所有平缓过渡的中间地带变成了尖锐暗谷,产生"乱流"感,像燃烧的火焰边缘或大理石脉络。


和脊状噪声的对比

  • 湍流:abs(n * 2.0 - 1.0) → 中间变暗谷,极值变亮峰
  • 脊状:1.0 - abs(n * 2.0 - 1.0) → 中间变亮峰,极值变暗谷

差一个 1.0 -,高低完全互换。


试着改一改

改动效果
6.0 改成 3.0湍流纹路变大,更像涌动的气流
6.0 改成 12.0纹路细密,像闪烁的火焰纹理
在前面加 n = n * 0.9 + 0.05压缩范围,暗谷不那么纯黑
外面套颜色 mix(orange, white, n)橙白火焰效果

练习

main 函数里,对 fbm(vUv * 6.0) 的结果应用 n = abs(n * 2.0 - 1.0),输出湍流噪声。

答案解析

float n = fbm(...) 之后加一行 n = abs(n * 2.0 - 1.0)

  • n * 2.0 - 1.0:把 [0,1] 拉伸到 [-1,1],中点映射到 0
  • abs(...):把曲线的中段折叠成 V 形谷底,两端变成最亮

初始代码只有 n = fbm(...) 是平滑分形噪声,没有折叠。加上这行变换,所有平缓过渡的中间区域变成尖锐暗谷,图案出现强烈的湍流感。

试着把 2.0 改成 3.0,V 形谷会更深更窄,暗纹更锐利。

GLSL 代码编辑器

正确代码预览

当前代码预览