Округление чисел after effects
Собрал список выражений для АЕ, которые упрощают мне работу. Совсем простых в стиле loopOut() или wiggle (.4,6) здесь не будет, но и ничего экстрасложного тоже.
Своих экспрешнов здесь всего парочка. Большинство я брал откуда-то и переписывал по чуть-чуть под себя, так что, у чужих экспрешнов поставлю ссылку на авторов.
Плашка за текстом
Создать шейповый квадратик, а сверху отдельным слоём добавить текст;
Применить к параметру size у шейпа:
Если текст в несколько строк, то к position у шейпа добавьте этот экспрешн. Без него тоже всё будет работать, но придётся вручную подгонять позицию плашки за текстом.
К остальным экспрешнам
Анимируемый wiggle
Простой способ заанимировать wiggle. Используем для этого два слайдера: первый отвечает за частоту, второй за амплитуду. Анимировать лучше только амплитуду.
Добавить эффект Slider Control на слой с экспрешном и продублировать его. Применить к любому параметру:
Цикличный wiggle
Благодаря этому экспрешну, wiggle начинается и заканчивается в одной и той же точке.
Если вдруг цикл не работает, то это скорей всего из-за того, что луп не успевает прийти в изначальное состояние за отведённое время. Просто сделайте loopTime побольше или freq почаще
Прикрепить шейп к одной стороне
Применить к position, изменять size у шейпа:
Риг для катящегося круга и квадрата
Катящийся круг
Применить к rotation, анимировать position:
Катящийся квадрат
Работает как с шейпами, так и со слоями и композициями. Если квадрат катится неправильно — изменить значение Slider Control.
Добавить на слой с экспрешном эффект Slider Control. Применить экспрешн к position, анимировать rotation:
На основе экспрешна от Mikey Borup
Ежесекундные ступенчатые повороты
Замена time*n. Только вместо плавного поворота — ступенчатый. Чаще всего пригождается, чтобы сделать анимацию секундной стрелки, шестерёнок или других похожих механизмов.
Применить к rotation:
Управляемые ступенчатые повороты
Практически то же самое, что и выше. Но с чуть большим количеством настроек.
Применить к rotation:
Постоянный масштаб при скейле
Если привязать один объект к другому и начать скейлить родительский, то оба слоя будут увеличиваться. Этот экспрешн не даёт дочернему слою изменять масштаб, он просто будет двигаться по позишну.
Применить к scale слоя, у которого должен быть постоянный масштаб:
Переключатель по чекбоксу
Меняет одно значение параметра на другое по нажатию на чекбокс.
Добавить эффект Checkbox Control на слой с экспрешном;
Применить к любому параметру:
Луп для шейпов
Обычный loopOut() не работает с шейпами, но зато работает этот экспрешн.
Применить к path у шейпа:
Range Mapper
Добавить эффект Slider Control на слой с экспрешном;
Применить к любому параметру:
Обводка независимая от скейла
Сохраняет постоянную обводку у шейпов при изменении масштаба.
Применить к «Stroke Width» у шейпа:
Счётчики
Почему-то часто использую счётчики в анимациях, поэтому здесь будет подборка сразу из шести. Сначала три самых простых.
1) Обычный счётчик
toFixed(1) — количество цифр после запятой;
Добавить эффект Slider Control на слой с экспрешном;
Применить к «Source Text» у текста:
2) Счётчик с запятыми вместо точек
Полезно в анимациях для неанглоязычных стран, где используется запятая в качестве десятичного разделителя вместо точки. Если нужен похожий сетап с большим количеством настроек, то он вот здесь.
3) Счётчик с дополнительными знаками
4) Счётчик с заменой 1 на 001
При zerosAmount = 3 счёт будет идти вот так: 000, 001 … 011 … 111.
5) Счётчик с разрядами
Заменяет 500000 на 500 000.
6) Счётчик для больших чисел
Счётчик, привязанный к Slider Control, не идёт дальше 1 000 000. Поэтому если нужны большие числа — приходится использовать эффект Angle Control.
Добавить эффект Angle Control на слой с экспрешном;
Применить к «Source Text» у текста:
Пара мелочей
И, под конец, 4 полезных мини-выражения, которые часто пригождаются.
1) Привязка к слою выше или ниже
Это не полноценный экспрешн, а только его часть. Вместо того, чтобы привязывать один слой к другому напрямую, иногда удобнее привязывать к слою, который стоит выше или ниже, слоя с экспрешном.
index+1 — если нужна привязка к слою ниже
2) Постоянно ускоряющиеся повороты
Попробуйте добавить к rotation:
3) Ключи для time*n
Добавляет постоянное движение, но оставляет возможность ставить ключи.
4) Привязка эффекта к слою
Чтобы Gradient Ramp не слетал при перемещении слоя, добавьте этот экспрешн на Start и End:
Похоже, это все выражения, которыми я пользуюсь на постоянной основе. Всего получилось 23.
На всякий случай, собрал их в проект и прикрепил к статье.
Сегодня подкинули несколько вопросов об округлении чисел в АЕ, поэтому я решил написал общую эту статью. Также рассмотрим несколько примеров и вариантов округления и в качестве бонуса: «дописи» к выражениям различных символов, а также методы их размещения.
Рассмотрим вариант, где мы имеем анимированный слайдер на текстовом слое:
По умолчанию выражение в Source text имеет вид:
При анимации такого слайдера, мы можем получить кучу чисел после запятой. Чтобы избавится от них мы можем округлять это значение, несколькими способами:
- Math.round() – округление к ближайшему целому числу. Как в школе учат.
- Math.floor() – округление до целого числа в меньшую сторону.
- Math.ceil() – округление до целого числа в большую сторону.
Таким образом применив к нашему Source text один из методов округления мы получим:
В этом случае мы будем получать целое число. Но что если мы хотим оставить несколько числе после запятой? В этом случае мы можем использовать несколько вариантов:
Первый вариант умножить и разделить само выражение на 10 или 100, в зависимости от того сколько чисел вы хотите получить после запятой. Например, наше выражение Math.floor(effect("Slider Control")("Slider")) мы умножаем на 100 и делим на 100, получаем вид:
В этом случае мы получим две цифры после запятой. Но будьте аккуратны, если значение примет вид целого числа, то цифры после запятой показываться не будут. Поясню, число 16,66666 таким образом будет округляться до 16,67, но если число примет вид 16,5, то вне зависимости от того на сколько вы делили или умножали выражение, вид остается прежним 16,5. Если вы хотите, чтобы было также отображение фиксированного количества знаком, то нужно использовать второй вариант, а именно выражение:
- toFixed() – округляет значение до точного количества знаков, причем отображает и нули.
Чтобы toFixed() корректно работал в выражении для Source Text необходимо сделать следующие изменения: так как source text возвращает нам строчное значение, а не числовое, нужно для начала преобразовать его в число с помощью функции parse:
В скобках для toFixed() мы указываем количество знаков после запятой.
Помимо toFixed, вы можете использовать toPrecision(), но в этом случае в скобках нужно указывать общее число знаков для округления. То есть если вы хотите получить 18,90, то функция имеет вид toPrecision(4)
Теперь более подробно о функции parse.
Как я уже писал выше, parse преобразует строковой аргумент в числовое и существует два вида вывода: Int – целое число, Float с плавающей запятой.
Для чего же нужен parse? Например, в вашем выражении Source Text нужно дописать какой-то знак, после числа, например: «%» или «?». Напомню, что для того, чтобы дописать символ к выражению нужно добавить:
+”символ”;
Если вы будете писать непосредственно в теле выражения без преобразования строки в число, то будете получать ошибку:
Чтобы избежать этого следует сделать преобразование:
Если в вашем проекте нужно использовать знаки после запятой, то следует использовать parseFloat. Выражение примет вид: parseFloat(effect("Slider Control")("Slider"))+" $"
Вы можете скорректировать количество знаков после запятой добавив toFixed или toPrecision:
Теперь немного об отображении Source text.
Если вы хотите, чтобы символы или какие значения в Source Text начинались с новой строки, то следует использовать выражение "\r". Например, вы хотите перенести знак $ на новую строку, для этого дописываем в выражение + "\r"
parseFloat(effect("Slider Control")("Slider")).toFixed(2)+ "\r"+" $"
Вы можете дописывать любые знаки стразу после +"\r…..". Таким образом вы получите новую строку с заданными символами или словами, например:
Выражение After Effects похоже на строку компьютерного кода или сценария действия во Flash (теперь Adobe Animate .) Во многом подобно компьютерному коду или сценарию действия выражение представляет собой некий тип формулы, сообщающей After Effects сделать что-то конкретное. Однако, в отличие от сценариев действий, выражения живут внутри атрибутов элемента, таких как их масштаб или вращение.
Так какой смысл использовать выражение? Ну, выражения могут работать любым количеством способов, хотя два лучших примера — это анимация чего-либо и воздействие на анимацию чего-либо. Зачем использовать выражение для анимации вместо ключевых кадров ?
Когда и как использовать выражения
Скажем, у вас есть шар, движущийся по экрану слева направо, но вы также хотите, чтобы этот шар шевелился. Вместо того, чтобы делать это вручную или применять эффект и давать ему множество ключевых кадров , мы можем просто применить к нему выражение покачивания.
Таким образом, у нас будут только два ключевых кадра, говорящих о том, что они идут слева направо, и выражение, говорящее о том, что оно покачивается. Это делает вещи красивыми и организованными, а также легко изменяемыми. Вместо того, чтобы переделывать сотни ключевых кадров, если мы хотим, чтобы наш маневр был более экстремальным, мы можем просто изменить выражение. Таким образом, мы анимируем наш объект двумя способами, используя ключевые кадры и используя выражение.
Другой распространенный пример того, как выражения могут работать в After Effects, — это воздействие на фрагмент анимации без его анимации. Вы можете написать выражение, которое говорит, что со временем наша анимация станет более экстремальной или менее экстремальной.
Если у нас есть эффект пульсирующего света, мы можем применить к нему выражение, которое говорит, что при воспроизведении нашей анимации пульсирующий свет становится все более и более драматичным, без необходимости фактически вводить и оживлять эффект увеличения. Здесь мы не анимируем использование выражения, а влияем на часть анимации с помощью выражения.
Выражение покачивания в качестве примера
Давайте сделаем простое выражение покачивания в качестве примера, чтобы понять, как они работают.
Вы создадите новую композицию в After Effects длиной 24 кадра, и вы будете выполнять там свои сценарии действий. Помните, что в отличие от сценария действия во Flash (Animate) нельзя добавить сценарий действия в композицию в целом. Выражения живут в элементах вашей временной шкалы и в атрибутах этих элементов. Так что вам нужно что-то сделать, чтобы применить выражение.
Давайте сделаем простой квадрат, используя твердые тела. Нажмите Ctrl + Y и сделайте себя немного квадратным. Теперь давайте сделаем простое выражение, чтобы узнать, как они работают.
Выбрав твёрдое тело, нажмите P, чтобы открыть его раскрывающееся меню Положение на временной шкале. Если вы собираетесь анимировать его, вы просто щелкнете по секундомеру, чтобы активировать ключевые кадры, но для добавления выражения вам понадобится Option или Alt + щелкнуть по секундомеру.
Это превратит атрибут Position в новое маленькое выпадающее меню, добавив Expression: Position под ним. Справа на временной шкале вы увидите область, которую вы можете ввести, на которой в настоящее время написано «transform.position».
Это текстовое поле здесь, где мы печатаем все наши выражения. Хорошее простое выражение — это выражение покачивания, как упоминалось ранее — это заставит ваш объект слегка перемещаться в течение всей анимации.
Рассмотрим метод из справочника "Атрибуты и методы Adobe After Effects.pdf":
loopOut(type="cycle", numKeyframes=0)
Тип возвращения: число или массив.
Повторяет сегмент времени, измеряемый от последнего ключевого кадра в слое до точки входа слоя. Цикл воспроизводится до точки выхода слоя. Заданное число ключевых кадров определяет циклически повторяющийся сегмент.
Значение numKeyframes используется для определения количества сегментов ключевых кадров для зацикливания. Указанный диапазон измеряется в обратном направлении от последнего ключевого кадра.
Например, значение loopOut ("cycle", 1) повторяет сегмент, ограниченный последним и предпоследним ключевыми кадрами. Значение по умолчанию 0 означает, что все ключевые кадры повторяются циклично. Дополнительную информацию см. в методе "loopIn()".
2. Метод. Math.sin()
Внимание — это не метод Adobe After Effects а встроенный метод JavaScript, тем не менее его можно использовать в выражениях в Adobe After Effects.
Функцию у=sin(x) мы помним из школьного курса математики. Напомню, что значение функции изменяется от -1 до +1.
- Создадим новый проект Adobe After Effects 1280*720 30 сек.
- Создадим слой Solid 300*300 Blue.
- На Timeline в слое Solid раскроем свойство Opacity и введем выражение:
Math.abs(Math.sin(time))*100
Обратите внимание методы JavaScript надо вводит с большой буквы в противном случае отобразится ошибка!
Math.abs – абсолютное значение аргумента, компенсируем отрицательные значения функции y=sin(x).
Math.sin(time) – вычисление sin с аргументом время.
*100 масштабируем результат от 0 до 100.
Для параметра Scale выражение будет выглядеть уже сложнее:
temp=Math.sin(time)*200;
[temp, temp]
Здесь необходимо использовать переменные для двух аргументов параметра Scale.
На рисунке выражение для параметра Opacity отключено!
3. Метод Wiggle()
Для создания хаотичности применяется метод Adobe After Effects Wiggle(). Метод Wiggle имеет пять аргументов, обычно используются два первых. Первый это частота колебаний, второй амплитуда колебаний.
Рассмотрим метод из справочника Атрибуты и методы Adobe After Effects.pdf
wiggle (freq, amp, octaves=1, amp_mult=.5, t=time)
Тип возвращения: число или массив.
Тип аргумента: freq, amp, octaves, amp_mult и t – это числа.
Произвольно применяет эффект покачивания к значению свойства.
Значение freq – это частота в покачиваниях в секунду.
Значение amp – это амплитуда в единицах измерения свойства, к которому оно применяется.
Значение octaves – это количество октав шума, которые требуется сложить. Это значение управляет объемом детализации в покачивании. Сделайте это значение больше значения по умолчанию (1), чтобы добавить более высокие частоты, или меньше, чтобы добавить амплитудную гармонику в покачивание.
Значение amp_mult – это число, на которое умножается значение amp для каждой октавы. Это значение управляет скоростью спада гармоник. Значение по умолчанию равно 0,5 приблизите его к 1, чтобы добавить гармонику при той же амплитуде, что и базовая частота, или приблизите его к 0, чтобы уменьшить детализацию.
Значение t – это базовое начальное время. Этому значению по умолчанию присваивается текущее время. Используйте этот параметр, чтобы выходные данные являлись покачиванием значения свойства, полученного в разное время.
Как анимировать с помощью метода wiggle().
- Создадим новый проект Adobe After Effects 1280*720 30 сек.
- Импортируем рисунок (у меня лист клена, который будет падать).
- Установим Ключевой кадр так, чтобы лист падал справа сверху влево вниз (ветер дует справа).
- Делаем Alt+клик на значке с секундомером слева от параметра Position и вбиваем
случайные колебания с частотой 1 Гц и амплитудой 200 пикселей.
случайные колебания с частотой 1 Гц и амплитудой 50 пикселей.
4. Анимация эффектов с помощью выражений.
У нас есть сплошной слой, мы применяем к нему эффект Gell Pattern и, чтобы данный эффект не был статичным нам нужно анимировать параметрs Evolution и Disperce.
- Делаем Alt+клик по значку с секундомером слева от параметра Evolution и вставляем метод time*100.
- Делаем Alt+клик по значку с секундомером слева от параметра Disperce и вставляем метод time.
Смотрим анимацию.
Можно «поиграть» с другими параметрами и попробовать применить другие методы.
5. Примеры выражений в Adobe After Effects.
5-1. Пример выражения вращение по кругу.
- Создайте Shape (Шейп) в виде звезды с помощью инструмента Star Tool:
- Введите следующее выражение в свойство Position:
[(thisComp.width/2),(thisComp.height/2)]+[Math.sin(time)*200,-Math.cos(time)*200]
thisComp.width/2 – вычислили середину окна по горизонтали.
thisComp.height/2 – вычислили середину окна по вертикали.
Math.sin(time)*200,-Math.cos(time)*200 – создали движение по кругу.
5-2. Пример выражения Движение стрелок часов.
- создайте два длинных узких сплошных слоя: часовую стрелку и минутную стрелку.
- Разместите опорные точки на концах стрелок.
- Переместите слои так, чтобы опорные точки находились в центре композиции.
- В свойство Rotation для часовой стрелки добавьте выражение (R - радиус часовой стрелки):
R=300; T=time;
[R*(Math.sin(T/24)-Math.cos(T/24))]
- В свойство Rotation для минутной стрелки перетащите инструментом «Лассо» к свойству Rotation для часовой стрелки. Появится следующее выражение:
thisComp.layer("Hour").transform.rotation
Чтобы минутная стрелка вращалась в 12 раз быстрее часовой стрелки добавьте значение *12 в конце выражения следующим образом:
thisComp.layer("Hour").transform.rotation*12
5-3. Пример использования конструкции If … then … else.
Реализация исполнения операций по условию.
Выражения вводим в свойство Position:
-
Дрожание изображения при условии если время > t сек
t=4;
if (time > t) wiggle(3,25) else value;
t=4;
if (time > t) value; else wiggle(3,25);
t1=2; t2=4;
if ((time > t1) && (time < t2)) < wiggle(3,25); >else
5-4. Затухающие колебания.
Выражения вводим в свойство Position:
Height=600; freq=3; decay=1,1; amp=500;
y=Height-Math.abs((Math.sin(time*freq))/Math.exp(time*decay)*amp); [Height, y]
5-5. Пульсация.
Выражения вводим в свойство Scale:
maxDev = 23; spd = 30; decay = 1.0;
t = time - inPoint;
x = scale[0] + maxDev*Math.sin(spd*t)/Math.exp(decay*t);
y = scale[0]*scale[1]/x;
[x,y]
6. Конвертирование выражений в ключевые кадры
В некоторых ситуациях может быть полезно конвертирование выражений в ключевые кадры. Для преобразования выражений в ключевые кадры необходимо в главном меню Animation/Keyframe Assistant/Convert Expression to Keyframes.
Генерирование текста со случайными цифрами с помощью выражений в After Effects
Генерирование текста со случайными цифрами с помощью выражений в After Effects
Создавая технологичное видео, пропитанное духом информационных технологий, частенько бывает нужно на фоне разместить разные тестовые слои с меняющимися или статичными цифрами в качестве так называемого "визуального мусора".
Сделать это достаточно просто, используя систему выражений в After Effects для свойства слоя Source Text.
Свойство текстового слоя Source Text.jpg (39.2 КБ) 11144 просмотра Свойство текстового слоя Source Text.jpg (39.2 КБ) 11144 просмотра
Зажимаем кнопку ALT и щелкаем мышкой по кнопке секундомера для создания простого выражения по умолчанию.
создание выражения с ALT.jpg (12.94 КБ) 11144 просмотра создание выражения с ALT.jpg (12.94 КБ) 11144 просмотра
Фукнкции группы Random.jpg (43.11 КБ) 11144 просмотра Фукнкции группы Random.jpg (43.11 КБ) 11144 просмотра
Для этой функции можно использовать несколько параметров в скобках - минимальное и максимальное значения.
Разновидности фукции random.jpg (4.3 КБ) 11144 просмотра Разновидности фукции random.jpg (4.3 КБ) 11144 просмотра
- Math.round()
- Math.floor()
- Math.ceil()
Честно говоря, я особо не вникал какая между ними разница, но эту информацию можно без проблем найти в интернете на сайтах посвященных JavaScript. Возьмем самую простую функцию округления, знакомую всем по начальным классам в школе. Таким образом мы избавились от "хвоста" ненужных цифр.
toFixed(количество цифр после десятичного знака)
Только вот результат будет уже не цифровым значением, а текстовым. Это может вызвать проблемы с последующими арифметическими операциями в формуле. Как в этом примере, когда "+2" просто добавляется к концу текстовой строки как текст, вместо целой части самого числа.
Текст с такими выражениями меняется в каждом кадре и это может оказаться слишком быстрым мельтешением. В таком случаем мы можем добавить
posterizeTime(частота изменений в секунду)
Действие posterizeTime.jpg (24.63 КБ) 11144 просмотра Действие posterizeTime.jpg (24.63 КБ) 11144 просмотра
В этом примере генерация нового числа будет происходит только 2 раза в секунду, а не в каждом кадре. Если на разные текстовые слои скопировать это выражение, то для каждого слоя будет создаваться свое уникальное значение. Так что просто дублируя такой слой, мы получаем новый набор цифр, что бывает удобно для быстрого создания анимированных массивов случайных цифр.
Несколько текстовых слоев.jpg (53.37 КБ) 11144 просмотра Несколько текстовых слоев.jpg (53.37 КБ) 11144 просмотра
Дело в том, что для генерации наборов случайных чисел обычно используется уникальный идентификатор слоя (который просто не может быть одинаковым у разных слоев), свойство внутри слоя, текущего времени и значения смещения равного 0. Аналогом этого значения является параметр Seed, который часто используется в других плагинах и программах, так или иначе связанных со случайными значениями. Изменять его значения в выражении After Effects можно функцией
seedRandom(seed, timeless = false)
Где seed как раз и будет число, отвечающее за уникальность каждого набора (значение смещения, отличное от 0). А timeless будет ли оно меняться в течении ролика (зависеть от переменой времени time) или нет. Например seedRandom(1, true) запретит числу меняться вообще.
Статичные случайные числа.jpg (48.02 КБ) 11144 просмотра Статичные случайные числа.jpg (48.02 КБ) 11144 просмотра
Но каждый новый слой с такой формулой все равно будет иметь свое уникальное, но постоянное значение. Тоже бывает очень удобно для создания всяких шкал и графиков, где не нужно менять числа.
Читайте также: