噪声颜色映射

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

噪声值是 0–1 的浮点数,可以直接用它来控制两种颜色之间的混合比例:


mix 把噪声变成颜色

mix(a, b, t) 在颜色 a 和颜色 b 之间插值,t 是混合比例(0% 到 100%)。当 t = n(噪声值),低噪声区域偏向颜色 a,高噪声区域偏向颜色 b,中间有连续的过渡——这就把灰度噪声变成了双色渐变噪声。


当前使用的颜色

深蓝和橙黄的对比度高,能把噪声的明暗结构清晰地呈现出来。


valueNoise 是什么

valueNoise 把画布分成格子,每个格点分配一个随机值,格点之间用平滑曲线插值。结果是连续变化的斑块噪声,vUv * 8.0 表示把坐标放大 8 倍,画面里会出现 8×8 个噪声周期。


试着改一改

改动效果
vUv * 8.0vUv * 3.0噪声频率降低,色块变大
avec3(0.05, 0.3, 0.1)(深绿)改变低值区颜色,整体偏绿
bvec3(1.0, 0.95, 0.8)(米白)改变高值区颜色
valueNoise 改为 fbm使用多层叠加噪声,纹理更细腻

练习

vec3 c = a;gl_FragColor = vec4(c, 1.0); 替换为使用 mix(a, b, n) 的颜色输出,让画面按噪声值从蓝色渐变到橙色。

答案解析

初始状态:vec3 c = a 直接把颜色设为 a(深蓝色),所有像素输出同一种颜色,完全看不出噪声的形状。

改动:用 mix(a, b, n) 替换固定颜色,噪声值 n 决定每个像素混合的比例。低噪声区偏蓝,高噪声区偏橙黄,中间值产生平滑过渡,噪声的空间分布就以颜色的形式显现出来。

试着改为 mix(a, b, pow(n, 3.0)),体验指数变换让低值区域更大、高值区域更小的效果。

GLSL 代码编辑器

正确代码预览

当前代码预览