湍流噪声
10 / 15
学习程序化噪声的基础构件与常见风格化手法。
FBM 的曲线是平缓起伏的。湍流噪声把这条曲线"折叠"成尖锐的谷底——高处被拉成两侧的坡,低处变成尖锐的暗纹:
下面拆解这个变换。
abs(n * 2.0 - 1.0) 做了什么
分两步来看:
n * 2.0 - 1.0:把 0–1 的噪声映射到 -1 到 1,噪声 50% → 0,噪声 0% → -1,噪声 100% → 1abs(...):取绝对值,负值被折回正值
结果是:原来平缓过 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],中点映射到 0abs(...):把曲线的中段折叠成 V 形谷底,两端变成最亮
初始代码只有 n = fbm(...) 是平滑分形噪声,没有折叠。加上这行变换,所有平缓过渡的中间区域变成尖锐暗谷,图案出现强烈的湍流感。
试着把 2.0 改成 3.0,V 形谷会更深更窄,暗纹更锐利。