大理石纹理

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,让脉络方向变成斜向。

GLSL 代码编辑器

正确代码预览

当前代码预览