噪声阈值
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,看看白色区域如何收缩。