GLSL 效果示例
值噪声
GLSL 里的平滑二维噪声:在网格上放随机值,再用 smoothstep 式的插值把它们融合起来。
在线示例
修改右侧代码,左侧预览会实时更新。
工作原理
只用随机数,得到的是边缘生硬的方块。噪声保留了随机性,但让它变得平滑,云、地形、大理石这些自然的东西看起来就是这样。
值噪声分两步:
- 在每个网格角点上放一个随机值,对角点的整数坐标调用
random(i)。 - 对格子里的某个像素,根据它所在的位置混合四个角的值。
f就是这个位置:从 0%(左边或下边)到 100%(右边或上边)。
混合时用的是 f * f * (3.0 - 2.0 * f) 而不是直接用 f,这就是 smoothstep 曲线。直线混合会在网格线上留下明显的折痕;曲线在靠近角点时放慢,相邻格子就能无缝衔接。
试着改一改
| 修改 | 效果 |
|---|---|
uv * 8.0 改成 uv * 3.0 | 大块、柔和的斑块 |
vec2 u = f * f * (3.0 - 2.0 * f) 改成 vec2 u = f | 线性混合:能看到菱形的网格痕迹 |
vec3(n) 改成 vec3(step(0.5, n)) | 随机的黑白岛屿 |
vec3(n) 改成 mix(vec3(0.1, 0.2, 0.5), vec3(0.9, 0.95, 1.0), n) | 偏蓝色调的噪声 |