大理石纹理
8 / 15
学习程序化噪声的基础构件与常见风格化手法。
大理石的纹路本质上是扰动后的正弦波——用噪声把正弦波的相位推偏,原本整齐的条纹就变成弯曲的脉络:
下面拆解它。
噪声扰动正弦波
先看不加噪声的情况:sin(vUv.x * 6.0 * PI) 是均匀的竖条纹,每隔固定距离重复一次。
加上 n * 2.0 之后:每个像素的相位被噪声偏移了一些,有的地方快了、有的地方慢了,原本平直的条纹就弯曲了。这正是大理石脉络的样子。
n * 2.0 中的 2.0 控制扰动幅度:越大脉络弯曲越剧烈,越小越接近直线。
m * 0.5 + 0.5
sin 的输出范围是 -1 到 1。用 * 0.5 + 0.5 把它映射到 0–1,作为亮度值输出。
试着改一改
| 改动 | 效果 |
|---|---|
2.0 改成 5.0 | 脉络弯曲更剧烈,更接近水波纹 |
2.0 改成 0.5 | 脉络几乎是直线 |
6.0(正弦频率)改成 12.0 | 条纹更密,脉络更细 |
外面套两个颜色 mix(darkGray, white, m) | 仿真大理石外观 |
练习
在 main 函数里,用 fbm(vUv * 6.0) 的结果扰动正弦波相位,计算大理石亮度并输出。
答案解析
把 m = 0.0 替换成两行:sin 公式 + 范围映射。
vUv.x * 6.0:沿 X 轴生成 6 条竖条纹+ n * 2.0:用噪声扰动相位,条纹弯曲变成脉络* 3.14159265:让 sin 的输入以 π 为单位,整数倍时为零交叉点m * 0.5 + 0.5:把 [-1,1] 映射到 [0,1] 作为灰度
初始 m = 0.0 是全黑。替换之后你会看到弯曲的黑白条纹,就是大理石纹路的基本形态。
试着把 vUv.x * 6.0 改成 (vUv.x + vUv.y) * 4.0,让脉络方向变成斜向。