GLSL 效果示例

云朵(分形布朗运动)

用分形布朗运动(fBm)把多层噪声叠加起来,做出缓慢飘动的程序化云朵。

在线示例

修改右侧代码,左侧预览会实时更新。

工作原理

一层噪声看起来是柔和的斑块,但真实的云在每个尺度上都有细节:大的形状、上面更小的云团,还有更细的丝絮。**分形布朗运动(fBm)**把几层噪声(叫作八度,octave)叠加起来,做出这种效果:

  • 每一层把坐标乘以 2(st *= 2.0),所以细节尺寸只有上一层的一半。
  • 每一层把强度乘以 0.5(amplitude *= 0.5),所以小细节永远不会盖过大形状。

6 层叠加时,第一层占结果的 50%,第二层占 25%,然后是 12.5%,依此类推。

接着 smoothstep(0.45, 0.8, n) 决定哪里算云:低于 0.45 是晴空,高于 0.8 是纯白,中间是蓬松柔和的边缘。

试着改一改

修改效果
i < 6 改成 i < 2模糊的斑块,没有细节
smoothstep(0.45, 0.8, n) 改成 smoothstep(0.3, 0.6, n)云多得多的阴天
amplitude *= 0.5 改成 amplitude *= 0.7更粗糙、颗粒感更强的云
u_time * 0.08 改成 u_time * 0.4风变大了

用到的内置函数

一步步学会这个效果