Snap.svg предоставляет мощный механизм для создания динамических
визуальных эффектов с использованием SVG-фильтров. Одним из ключевых
инструментов для генерации сложных визуальных шумов и искажения объектов
является фильтр feTurbulence, который позволяет создавать
текстуры, волны и эффекты хаотичного движения.
Для создания фильтра используется метод paper.filter(),
который позволяет описать последовательность SVG-фильтров. Основной
элемент для генерации шума — это feTurbulence.
Пример создания фильтра шума:
var paper = Snap("#svg");
// Создание фильтра turbulence
var turbulenceFilter = paper.filter(Snap.filter.turbulence({
baseFrequency: 0.05,
numOctaves: 3,
type: 'turbulence',
seed: 2
}));
Пояснение параметров:
'turbulence' для
шума, 'fractalNoise' для более мягкой фрактальной
текстуры.Фильтр можно применять к любому SVG-элементу. Например, к прямоугольнику:
var rect = paper.rect(50, 50, 200, 200).attr({
fill: '#3498db'
});
// Применение turbulence фильтра
rect.attr({
filter: turbulenceFilter
});
В результате прямоугольник получает визуальный шум, создающий иллюзию текстуры или лёгкого искажения поверхности.
Snap.svg позволяет анимировать параметры фильтров для создания
динамических эффектов. Чаще всего анимация применяется к атрибуту
baseFrequency, что позволяет добиться эффекта движения или
«живого» шума.
Пример анимации:
Snap.animate(0.01, 0.1, function(val) {
turbulenceFilter.node.firstElementChild.setAttribute('baseFrequency', val + ' ' + val);
}, 2000, mina.linear, function() {
Snap.animate(0.1, 0.01, function(val) {
turbulenceFilter.node.firstElementChild.setAttribute('baseFrequency', val + ' ' + val);
}, 2000);
});
Объяснение:
Snap.animate для плавной смены значения
baseFrequency.mina.linear задаёт линейную интерполяцию анимации.Фильтр Turbulence особенно эффективен в комбинации с другими
фильтрами, такими как feDisplacementMap, который позволяет
искажать объекты в соответствии с картой шума.
Пример создания эффекта волны:
var displacementFilter = paper.filter(
paper.filter.turbulence({ baseFrequency: 0.05, numOctaves: 2, type: 'turbulence' }) +
paper.filter.displacementMap({ in: 'SourceGraphic', scale: 20 })
);
rect.attr({ filter: displacementFilter });
displacementMap использует шум для деформации исходного
графического элемента.Для создания органичных и текстурных эффектов применяется тип
fractalNoise. В отличие от простого turbulence, фрактальные
шумы создают более мягкие, непрерывные переходы.
Пример:
var fractalFilter = paper.filter(Snap.filter.turbulence({
baseFrequency: 0.02,
numOctaves: 5,
type: 'fractalNoise',
seed: 10
}));
rect.attr({ filter: fractalFilter });
baseFrequency)
делает шум «размытым» и плавным.numOctaves) добавляет
детализацию без резких краёв.Эти методы позволяют создавать сложные визуальные эффекты на основе SVG-фильтров в Snap.svg, расширяя возможности анимации и дизайна интерфейсов.