前言
大家好,这里是 CSS 兼 WebGL 魔法使——alphardex。
本文我们将用 three.js 来实现风暴云特效,以下是最终实现的效果图
让我们开始吧!
预备知识
为了实现这个特效,我们先简要了解一下 FBM 吧
FBM 中文意思是分形布朗运动,另一种称呼是分形噪声(说明它也属于噪声的一种)。它常用于描绘各种自然之中的形状(山脉、云层、河流等)。概念是在一个 for 循环内叠加几次噪声(往往是 6 次,相当于一个八度 octave),并在叠加的同时升高频率,降低振幅。以下是一个简易的 fbm 实现的噪声图案
glsl
1 |
|
准备工作
笔者的three.js 模板:点击右下角的 fork 即可复制一份
为了将着色器模块化,需要用到glslify
同时也需要安装如下的 npm 包:glsl-noise
正片
场景搭建
创建一张铺满屏幕的平面,作为画布
ts
1 | class CloudySky extends Base { |
顶点着色器直接用默认的就可以了
片元着色器
思路也是基本的 fbm 写法,只是在外层连续应用了 16 次(这样特别烧显卡,但是实现的效果很炫酷,帅就完事了),并且加上了随着时间的 x 轴位移
glsl
1 |
|
最终效果如下