Ресурсы оригинала

Варперы

Кривые сглаживания для анимаций 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 въезжает в конечную. Если анимация тормозит не там, где вы ждали — почти наверняка перепутаны именно эти два префикса.

Особые

Не сглаживание: эти три задают не форму движения, а момент, когда значение вообще меняется.

pause Держит начальное значение всю длительность и переключается на конечное в последний момент.
instant Ставит конечное значение сразу, оставшаяся длительность работает как пауза после него.
linear Равномерно, без сглаживания. Хорош для механики: лифт, полоса загрузки, счётчик.

Семейства

Каждое семейство существует в трёх вариантах. Формула дана для easeout_: две другие кривые получаются из неё отражением, поэтому и выглядят зеркально.

easeout_… медленный старт, быстрый финиш
easein_… быстрый старт, мягкий финиш
ease_… медленно по краям, быстро в середине

Sine

1 − cos(t · π/2)

Мягкое сглаживание на косинусе. Единственная тройка без суффикса и разумный выбор по умолчанию.

easeout
easein
ease

Quad

Самая сдержанная из степенных: заметно живее линейного, но без драмы.

easeout_quad
easein_quad
ease_quad

Cubic

Рабочая лошадка: разгон уже читается, рывка ещё нет.

easeout_cubic
easein_cubic
ease_cubic

Quart

t⁴

Больше половины пути проезжается в последней трети времени.

easeout_quart
easein_quart
ease_quart

Quint

t⁵

Та же кривая, но жёстче. На длинной анимации читается уже как рывок.

easeout_quint
easein_quint
ease_quint

Expo

2^(10 · (t − 1))

Самый крутой из плавных: начало движения почти не видно.

easeout_expo
easein_expo
ease_expo

Circ

1 − √(1 − t²)

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

easeout_circ
easein_circ
ease_circ

Back

t² · (2.7015 · t − 1.7015)

Замах: значение сначала уходит в обратную сторону и только потом идёт к цели.

easeout_back
easein_back
ease_back

Elastic

Пружина: цель проскакивается, и значение затухающе колеблется вокруг неё.

easeout_elastic
easein_elastic
ease_elastic

Bounce

Отскоки, как у мяча об пол. Хорошо ложится на падение и приземление.

easeout_bounce
easein_bounce
ease_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, которые сначала промахиваются мимо цели, а потом приходят к ней. Написали удачный — его место в варперах сообщества.