SVG feTurbulence 滤镜深入介绍

330 阅读3分钟

①单词 turbulence 是 “湍流” 的意思,也就是混乱无章的气流。因此 feTurbulence 滤镜也叫作湍流滤镜,feTurbulence 湍流滤镜就有这样的能力,可以用来实现云朵、大理石质感、烟雾、火焰效果等很多很酷的效果,feTurbulence 滤镜创建的图像效果采用的是 Perlin 湍流函数算法,可以生成 Perlin Noise(Perlin 噪声、柏林噪声);
②Perlin 湍流算法 / Perlin 噪声算法是一种伪随机算法;
③feTurbulence 滤镜的属性和含义:feTurbulence 滤镜支持下面 5 个专有的 html 属性:baseFrequency/numOctaves/seed/stitchTiles/type;
④baseFrequency 表示噪声的基本频率参数,默认值是 0,频率越高,噪声越密集;
⑤单词 octave 在英文中的意思是 “八度”,就是唱歌时候声音高一个八度的那个八度,在这里是 “倍频” 的意思。这里的倍频可以理解为由频率和振幅定义的噪声函数。feTurbulence 滤镜效果就是通过频率增加而幅度减小的几个倍频叠加建立起来的。倍频的数量越多,噪声看起来越自然,但是也会带来更多的计算,对性能会产生负面影响。属性 numOctaves 就表示倍频的数量,默认值是 1,不能是小数,只能是整数,如果是小数会当作默认值 1 处理。并且根据测试,numOctaves 的属性值大到一定程度后,就看不到明显变化了,具体多大的值和 baseFrequency 属性的值密切相关,根据测试和肉眼识别:
1、baseFrequency 值是 0.05,如果 numOctaves 的属性值大于 3,例如 4 或者 5,渲染效果和 3 没有区别;
2、baseFrequency 值是 0.02,如果 numOctaves 的属性值为 4,我们还是可以看到微小的变化,如果值为 5,则几乎看不出和 4 有什么区别;
3、baseFrequency 值是 0.01,如果 numOctaves 的属性值是 4 或者 5 的时候都可以看到一些细小的变化;
⑥seed 属性表示 feTurbulence 滤镜效果中伪随机数生成的起始值,注意,是起始值,并不是随机数量。因此,不同数量的 seed 不会改变噪声的频率和密度,改变的是噪声的形状和位置;
⑦stitchTiles 定义了 Perlin 噪声在边框处的行为表现,支持两个属性值,分别是 noStitch 和 stitch。其中单词 stitch 是 “缝缝补补” 的意思,两个属性值具体的含义如下:
1、noStitch:默认值,表示如果 SVG 中有多个元素同时使用了 feTurbulence 滤镜效果,则在各个元素的边界处的湍流各自为政,因此,不会表现为平滑;
2、stitch:表示会自动调整坐标,让下一个噪声图形应用上一个噪声图形的宽高等数据,如果这几个元素相互连接,则会看到平滑的边界效果;
⑧很多 SVG 滤镜都有 type 属性,不同的滤镜使用的 type 属性值是不一样的,对于 feTurbulence 元素,支持的 type 属性值是 fractalNoise 和 turbulence。其中:
1、turbulence:默认值。表示湍流、混乱;
2、fractalNoise:表示分形噪声;
⑨由于 feTurbulence 滤镜可以创建随机的噪点和湍流,因此,当 feTurbulence 滤镜和 feDisplacementMap 滤镜同时应用的时候,就会让图形或图像有符合自然效果的扭曲效果;
(参考:www.zhangxinxu.com/wordpress/2…