脊状噪声

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

普通 FBM 的高亮区域是圆顶形的丘陵,脊状噪声把这些圆顶"翻转"成尖峰,低处反而变平坦:

下面拆解这个变换。


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

先看括号里的步骤:

  1. n * 2.0 - 1.0:把 0–1 的噪声重新映射到 -1 到 1
  2. abs(...):取绝对值,-1 到 1 变成 0 到 1,但原本靠近 0 的中间段(对应噪声 50% 附近)被折叠到最低点

加上最外面的 1.0 - ...:原来的低点变高点,高点变低点。效果是:

  • 噪声值接近 0% 或 100%(极端值)→ 变成 0(暗谷)
  • 噪声值接近 50%(中间值)→ 变成 1(亮峰)

这就是"脊"的感觉——峰值尖锐,谷地宽阔。


和湍流噪声的对比

湍流噪声用 abs(n * 2.0 - 1.0)(不取反),结果是:中间值变暗谷,极端值变亮峰。

脊状噪声用 1.0 - abs(n * 2.0 - 1.0)(取反),结果刚好相反。

两者都是对噪声的数学折叠,只差一个"反转"。


试着改一改

改动效果
6.0 改成 3.0脊线变稀疏、更宽
6.0 改成 12.0脊线密集,像细细的发丝
1.0 - 去掉变成湍流噪声,高低关系翻转
在外面套上颜色:mix(dark, bright, n)脊线发光感

练习

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

答案解析

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

  • n * 2.0 - 1.0:把 [0,1] 拉伸到 [-1,1]
  • abs(...):把负数折叠回正数,中间段塌陷成谷底
  • 1.0 - ...:整体翻转,谷底变峰顶

初始代码只有 n = fbm(...) 是普通分形噪声,圆顶丘陵形态。加上这行变换,丘顶被压平、谷底被提拔,整体变成尖锐的脊线网格。

试着把 2.0 改成 4.0,脊线会变得更加尖锐密集。

GLSL 代码编辑器

正确代码预览

当前代码预览