Варперы
Кривые сглаживания для анимаций ATL.
Пример использования: easeout_cubic 1.5 xalign 1.0
Попробовать
Возьмите фон из игры, накиньте на него варпер и смотрите, что выйдет. Под кадром собирается тот самый код, который это делает.
Где они стоят
Варпер решает, как значение идёт от начального к конечному за отведённое время: равномерно, с разгоном, с замахом или с отскоками. В ATL его имя открывает строку интерполяции: за ним идёт длительность в секундах, а дальше свойства, которые нужно к ней привести.
show sl smile pioneer:
xalign 0.0
easeout_cubic 1.5 xalign 1.0
Если имя приходит параметром или лежит в переменной, его подставляют
через warp:
transform proezd(w="easein_quad"):
xpos 0
warp w 2.0 xpos 520
Переходы принимают тот же набор через модуль _warper —
так замедляют или ускоряют само затухание:
$ medlenno = Dissolve(1.0, time_warp=_warper.easein_quad)
Наведите курсор на график — точка проедет по кривой и по шкале под ней. Нажмите на имя, чтобы скопировать имя, а на график или на формулу — чтобы скопировать саму формулу.
Как читаются имена
easeout_…- разгон — медленный старт, быстрый финиш.
easein_…- торможение — быстрый старт, мягкий финиш.
ease_…- с обеих сторон — медленно по краям, быстро в середине.
Это обратно тому, что те же слова значат в CSS и After Effects. В Ren'Py имя
описывает не форму кривой, а точку, из которой движение выезжает или в которую
въезжает: easeout выезжает из начальной, easein
въезжает в конечную. Если анимация тормозит не там, где вы ждали — почти
наверняка перепутаны именно эти два префикса.
Особые
Не сглаживание: эти три задают не форму движения, а момент, когда значение вообще меняется.
Семейства
Каждое семейство существует в трёх вариантах. Формула дана для
easeout_: две другие кривые получаются из неё отражением,
поэтому и выглядят зеркально.
easeout_…
медленный старт, быстрый финиш
easein_…
быстрый старт, мягкий финиш
ease_…
медленно по краям, быстро в середине
Sine
1 − cos(t · π/2)
Мягкое сглаживание на косинусе. Единственная тройка без суффикса и разумный выбор по умолчанию.
Quad
t²
Самая сдержанная из степенных: заметно живее линейного, но без драмы.
Cubic
t³
Рабочая лошадка: разгон уже читается, рывка ещё нет.
Quart
t⁴
Больше половины пути проезжается в последней трети времени.
Quint
t⁵
Та же кривая, но жёстче. На длинной анимации читается уже как рывок.
Expo
2^(10 · (t − 1))
Самый крутой из плавных: начало движения почти не видно.
Circ
1 − √(1 − t²)
Дуга окружности: спокойное начало и обрыв в конце, резче, чем ожидаешь по названию.
Back
t² · (2.7015 · t − 1.7015)
Замах: значение сначала уходит в обратную сторону и только потом идёт к цели.
Elastic
Пружина: цель проскакивается, и значение затухающе колеблется вокруг неё.
Bounce
Отскоки, как у мяча об пол. Хорошо ложится на падение и приземление.
Свой варпер
Варпер — обычная функция: получает t от 0.0 до 1.0 и возвращает
долю пройденного пути. Декоратор регистрирует её под собственным именем, после
чего она доступна в ATL наравне со встроенными.
python early hide:
@renpy.atl_warper
def rezko(t):
return t ** 8.0
Возвращать можно и значения за пределами отрезка 0.0 — 1.0: именно так
устроены back, elastic и bounce,
которые сначала промахиваются мимо цели, а потом приходят к ней.
Написали удачный — его место в
варперах сообщества.