噪声阈值

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

平滑噪声是连续的灰度图,用 step 加一条阈值线就能把它变成黑白二值图:

下面拆解它。


step 是什么

step(edge, x) 的规则很简单:

  • x 小于 edge → 返回 0.0(黑)
  • x 大于等于 edge → 返回 1.0(白)

你可以把它想成一把刀:edge 决定刀切在哪里,噪声值在刀左边的像素变黑,在刀右边的变白。

这里 edge = 0.5,意味着噪声在 50% 以上的区域是白色,50% 以下是黑色。


为什么用噪声做阈值

用网格或几何图形做阈值只能得到规整的边界。用噪声做阈值,边界就变成了有机的、不规则的形状——像自然界里的斑纹、苔藓、水面倒影的轮廓。


试着改一改

改动效果
0.5 改成 0.3白色区域更多(超过 30% 就变白)
0.5 改成 0.8白色区域更少,出现零散斑点
step 改成 smoothstep(0.45, 0.55, n)边界变成柔和过渡而不是硬边
10.0 改成 4.0斑块变大,像云团轮廓

练习

main 函数里对 valueNoise(vUv * 10.0) 的结果用 step(0.5, n) 做阈值,输出黑白二值图。

答案解析

m = 0.0 替换成 m = step(0.5, n) 即可。

  • valueNoise(vUv * 10.0):生成较细的平滑噪声
  • step(0.5, n):噪声值 >= 50% 变白(1.0),< 50% 变黑(0.0)
  • vec3(m):黑白输出

初始 m = 0.0 是全黑。加上 step 之后,画面被噪声分隔成黑白两块区域,边界形状就是噪声自然起伏的等高线。

试着把阈值从 0.5 改成 0.7,看看白色区域如何收缩。

GLSL 代码编辑器

正确代码预览

当前代码预览