Pixel Perfect в After Effects

Те немногие, кто отважились использовать AE для интерфейсной и шейповой анимации, с самых первых дней работы не понимают почему он так хреново рисует фигуры.

Почему бы просто не взять и не нарисовать ровный прямоугольник как это делает фотошоп?

Когда тащишь прямоугольник мышками или стрелкой, за один шаг он сдвигается не по 1 px, а по 0.25, что доставляет особые мучения.

Мне надоело это дерьмо и я настроился решить проблему. Интернет про «пиксель перфект» в AE почему-то не знает. Обычный Snap to Grid к 1px сетке не совсем то, что нужно. Ниже я объясню почему и предложу решение.

Для начала настроим ту самую сетку

  1. Лезем в настройки Grid&Guides и выставляем везде значение 1 px.

2. Затем View → Snap to Grid.

Сетка включается через Cmd+’

3. Включаем сетку через Cmd+’. Обращаю внимание: ровные фигуры получаются только при включенной сетке! Рисуем прямоугольник и, о чудо, он ровный. Ага, щас.

4. При изменении Position все ломается. Можете нажать стрелку → пару раз и у фигуры появятся суб-пиксели.

Делаем у Position шаг в 1 px

  1. Для начала выбираем шейповый слой и нажимаем P. Кликаем в слово Position

2. Дальше в Animation → Add expression (либо Alt+Shift+=).

Есть классический способ добавления выражения через клик с зажатым Alt на иконку таймера, но он подходит, если надо написать выражение 1 раз.

Я предлагаю сохранить пресет для дальнейшего использования.

3. Справа появляется форма добавления экспрешна.

В нее вписываем скрипт:

newX = Math.round(transform.position[0]);

newY = Math.round(transform.position[1]);

[newX, newY]

Жмем Esc, чтобы выйти из режима редактирования.

4. С выделенным свойством Position идем в Animation → Save Animation Preset. Называем его как-нибудь.

5. Чтобы применить выражение, выделяем один или несколько шейповых слоев, идем в Animation → Recent Animation Presets, либо нажимаем Apply Animation Preset и выбираем наше выражение. Готово.

Мы только что сделали что?

На этой гифке видно как желтый квадрат перемещается без субпикселей, а белый квадрат размывается при изменении Position.

К желтому применено наше выражение.

Что пока не получилось сделать:

  1. Я не знаю как добавить скрипт в меню выражений, если это вообще возможно. Это было бы удобнее выбора пресета из меню Animation

2. Я не знаю как побороть Scale таким же способом или выражением. Проблема в том, что когда редактируешь Scale вручную, тоже появляются субпиксели. Я нашел такое решение, оно несовершенное:

Ставим Anchor Point в центр фигуры(клавиша Home вроде, у меня ее нет). Нажимаем S, кликаем на слово Scale правой кнопкой мыши и выбираем Edit Value. В появившемся окошке меняем значение Units на Pixels, вводим значение в пикселях.

Это такой же задротский способ как редактировать значение графика скорости в похожем окошке, но что делать... Когда выясню как сделать 1-пиксельный шаг у Scale, дополню статью.

3. В будущем хочу сделать панельку с кнопкой, которая решит проблему с субпикселями без заморочек с выражениями.

Если вы знаете избавиться от субпикселей в шейпах более простым способом, напишите в Facebook!