Объемная анимация для фотографии с эффектом параллакса в After Effects (3D слои)
Почти любую фотографию можно оживить анимацией и придать сцене ощущение глубины, за счет создания для нее эффекта параллакса (Parallax) в программе Adobe After Effects. В этом уроке я показываю, как это можно сделать с помощью всего одной маски и нескольких выражений для клонов. Сцена условно делится на несколько плоских 3D слоев (раздвинутых в пространстве по оси Z), делается простая анимация камеры и за счет параллакса создается иллюзия объема у изображения.
Маска используется очень простая и примитивная, поэтому не нужно выделять каждый объект в Photoshop. Главное повторить хотя бы примерно глубину и форму сцены. Но из-за подобной простоты могут возникать всякие артефакты по краям четких объектов. Такой метод хорошо подходит для картинок с природой, для далеких пейзажей и других подобных изображений.
https://www.youtube.com/watch?v=YKja7t5n73k
Проект для After Effects CC 2017
Краткое содержание урока
На стримах вы часто просили меня сделать урок о псевдо-трехмерных фотографиях и методах, которые позволяют конвертировать обычную плоскую картинку в объемную анимацию. Наконец-то у меня дошли руки, и вот он перед вами!
Это технология на самом деле очень простая (особенно когда у вас уже есть готовый и настроенный проект): нужно взять один 3D слой с фотографией, нарисовать на нем простейшую маску, хотя бы примерно повторяющие форму сцены. Потом продублировать этот слой, отодвинуть подальше от камеры по оси Z и сузить маску. Проделать это несколько раз, и в конце концов у вас должна получиться конусообразная пустая сцена-оболочка, состоящая из нескольких трехмерных слоев, раздвинутых в пространстве. Если теперь начать двигать камеру, то слои, находящиеся ближе к ней, будут двигаться быстрее, чем дальние. Это и называется эффектом параллакса (Parallax), именно за счет него сцена и будет выглядеть объемнее.
Но мы же не будем делать это руками с каждым слоем, для этого можно использовать выражения After Effects для нужных нам параметров.
В моем случае каждый слой в зависимости от своего номера index будет менять:
Масштаб самого слоя будет менять в зависимости от расстоянии до камеры, чтобы слой не уменьшался при отдалении, а сохранял свои первоначальные размеры в кадре (об этом у меня на канале был отдельный урок).
Ну и сглаживание всех масок Mask Feather я решил просто привязать к одному слайдеру, чтобы их было легко изменять в одном месте, а не проверять в каждом слое. Для этого даже не нужно ничего набирать на клавиатуре, достаточно просто воспользоваться "улиткой" для выражений.
Слой с именем "Null 1" будет контролером c набором слайдеров Slider Control.
Как и в предыдущих подобных уроках я использую формулу вычисления относительного индекса слоя (относительно индекса слоя "Null 1").
Это нужно для того, чтобы иметь возможность свободно добавлять сколько угодно слоев на верхушку стека без сдвига параметров, вычисляемых выражениями по индексу. Таким образом следующий нижний слой всегда будет с номером 0, а не фактическим, которой мы видим в стеке слоев.
"Camera 1" должна иметь стандартное значение 50mm и не должна анимироваться или сдвигаться от своего первоначального положения, так как от нее рассчитывается значение масштаба для каждого слоя (лучше сразу ее заблокировать и больше не трогать). Для анимации надо будет создать вторую камеру и тут уже можно крутить, что душе угодно. Главное не увлекаться критическими углами и ракурсами, когда полезут всевозможные артефакты дублированных областей изображения. Все таки, это всего лишь примитивная имитация.
Конечно этот простой метод не лишен недостатков, однако всегда можно внести изменения в форму слоев, отредактировав маски так, чтобы они лучше и точнее повторяли форму поверхностей на фотографии. Придется поработать уже индивидуально с каждой фотографией, пытаясь представить ее объемную форму. Это не решит всех проблем, но может значительно улучшить результат, хотя это уже совсем другая история...
Это технология на самом деле очень простая (особенно когда у вас уже есть готовый и настроенный проект): нужно взять один 3D слой с фотографией, нарисовать на нем простейшую маску, хотя бы примерно повторяющие форму сцены. Потом продублировать этот слой, отодвинуть подальше от камеры по оси Z и сузить маску. Проделать это несколько раз, и в конце концов у вас должна получиться конусообразная пустая сцена-оболочка, состоящая из нескольких трехмерных слоев, раздвинутых в пространстве. Если теперь начать двигать камеру, то слои, находящиеся ближе к ней, будут двигаться быстрее, чем дальние. Это и называется эффектом параллакса (Parallax), именно за счет него сцена и будет выглядеть объемнее.
Но мы же не будем делать это руками с каждым слоем, для этого можно использовать выражения After Effects для нужных нам параметров.
В моем случае каждый слой в зависимости от своего номера index будет менять:
- Положение вдоль оси Z
Код: Выделить всё
inx = index - thisComp.layer("Null 1").index - 1;
[value[0], value[1], inx*thisComp.layer("Null 1").effect("PosZ")("Slider")] - Параметр расширения маски Mask Expansion
Код: Выделить всё
inx = index - thisComp.layer("Null 1").index - 1;
inx*thisComp.layer("Null 1").effect("Exp")("Slider")
Масштаб самого слоя будет менять в зависимости от расстоянии до камеры, чтобы слой не уменьшался при отдалении, а сохранял свои первоначальные размеры в кадре (об этом у меня на канале был отдельный урок).
Код: Выделить всё
cam = thisComp.layer("Camera 1");
distance = length(sub(position, cam.position));
scale * distance / cam.zoom;
Ну и сглаживание всех масок Mask Feather я решил просто привязать к одному слайдеру, чтобы их было легко изменять в одном месте, а не проверять в каждом слое. Для этого даже не нужно ничего набирать на клавиатуре, достаточно просто воспользоваться "улиткой" для выражений.
Код: Выделить всё
temp = thisComp.layer("Null 1").effect("Feather")("Slider");
[temp, temp]
Слой с именем "Null 1" будет контролером c набором слайдеров Slider Control.
Как и в предыдущих подобных уроках я использую формулу вычисления относительного индекса слоя (относительно индекса слоя "Null 1").
Код: Выделить всё
inx = index - thisComp.layer("Null 1").index - 1;
Это нужно для того, чтобы иметь возможность свободно добавлять сколько угодно слоев на верхушку стека без сдвига параметров, вычисляемых выражениями по индексу. Таким образом следующий нижний слой всегда будет с номером 0, а не фактическим, которой мы видим в стеке слоев.
"Camera 1" должна иметь стандартное значение 50mm и не должна анимироваться или сдвигаться от своего первоначального положения, так как от нее рассчитывается значение масштаба для каждого слоя (лучше сразу ее заблокировать и больше не трогать). Для анимации надо будет создать вторую камеру и тут уже можно крутить, что душе угодно. Главное не увлекаться критическими углами и ракурсами, когда полезут всевозможные артефакты дублированных областей изображения. Все таки, это всего лишь примитивная имитация.
Конечно этот простой метод не лишен недостатков, однако всегда можно внести изменения в форму слоев, отредактировав маски так, чтобы они лучше и точнее повторяли форму поверхностей на фотографии. Придется поработать уже индивидуально с каждой фотографией, пытаясь представить ее объемную форму. Это не решит всех проблем, но может значительно улучшить результат, хотя это уже совсем другая история...
. .
Полезные ссылки:
- Создание 2.5D изображения (2D to 3D) FreeForm Mettle
https://www.youtube.com/watch?v=wfeedPXTH9c - 3D сцена из фотографии по-быстрому в After Effects
https://www.youtube.com/watch?v=Q7IHfyfXPto - Интересный эффект появления фотографии по слоям в After Effects
https://www.youtube.com/watch?v=kYjZKy71G3A - Сами собираем Pixel Sorter на экспрешенах в After Effects
https://www.youtube.com/watch?v=HQdM-bKv8Io - Многослойная 3D композиция в After Effects
https://www.youtube.com/watch?v=MpPuMqXsTr8 - Скрипты и выражения в After Effects - Плейлист
https://www.youtube.com/playlist?list=P ... LUEE3t9woE - pt_Multiplane - aescripts.com
http://aescripts.com/pt_multiplane/