Хороший - vfx в реальном времени встречается с веб-разработкой:)
Вся магия этого эффекта осуществляется с помощью шейдера GLSL (вы можете увидеть его в нижней части примера HTML)
здесь я добавил некоторые комментарии к нему
// next lines are input data that gpu gets form javascript
varying vec2 vUv; // uv coordinate of current pixel
uniform sampler2D texture1; // picture 1
uniform sampler2D texture2; // picture 2
uniform sampler2D disp; // noise texture
uniform float dispPower; // effect progress
uniform float intensity; // effect scale
void main() {
vec2 uv = vUv;
vec4 disp = texture2D(disp, uv); // read noise texture
vec2 dispVec = vec2(disp.x, disp.y); // get red and green values
// calculate uv displacement
vec2 distPos1 = uv + (dispVec * intensity * dispPower);
vec2 distPos2 = uv + (dispVec * -(intensity * (1.0 - dispPower)));
// sample images with displaced uv
vec4 _texture1 = texture2D(texture1, distPos1);
vec4 _texture2 = texture2D(texture2, distPos2);
// mix both pictures using effect dispPower value and output pixel color
gl_FragColor = mix(_texture1, _texture2, dispPower);
}
требуется 3 текстуры в качестве входных данных: picture1 picture2 и текстура шума, используемая для искажения ультрафиолета
и генерирует значение цвета для одного пикселя одного кадра эффекта перехода на лету на GPU
этот шейдер применяется ко всем пикселям поверхности
техника, используемая здесь, называемая «искажение текстуры» или «смещение ультрафиолета»
идея состоит в том, чтобы настроить координаты UV с данными, хранящимися в текстуре шума.
хорошее место для начала изучения GLSL - https://thebookofshaders.com/
GLSL ссылка http://www.shaderific.com/glsl/
также, я предлагаю посетить https://www.shadertoy.com/
И добро пожаловать в волшебный мир реального времени VFX