В базовом варианте - в сам момент появления фоновой картинки у нее изменяются свойства
transform: scale
(уменьшаем размер),
filter: blur
(уменьшаем размытие) и
opacity
(либо делаем появление этой картинки, либо уход предыдущего фона с прелоадером). Затем плавно меняется
transform: translate
в зависимости от положения мыши или еще чего-то (на видео видно, что все немного "едет"). Главная опасность, которая может поджидать - это плохая производительность CSS-фильтров, так что все может немного подлагивать.
По-хорошему, конечно, это все стоило бы написать на шейдерах и вместо
transform: translate
прикрутить что-то вроде
fake3d, но это уже совсем другая история...