Катсцены без модов: ключевые кадры, интерполяция и хитрости режима наблюдателя
Два способа перемещения камеры в ванильной версии: функция телепортации по тикам или реестр таймлайнов. В чем преимущества каждого, и как сглаживание помогает избежать роботизированных движений.
В ванильной версии нет объекта камеры, поэтому катсцена — это одна из двух иллюзий.
Метод 1: телепортировать игрока каждый тик
Старый, универсальный способ. Переводим Игрока в режим наблюдателя, затем перемещаем его по траектории:
gamemode spectator @s
tp @s 100.0 70.0 200.0 -90.0 10.0
один tp за тик из цепочки функций. Работает на всех версиях и не требует ничего особенного. Все проблемы связаны со сглаживанием:
- 20 ключевых кадров в секунду. Десятисекундный кадр — это 200 строк
tp. - Линейные шаги выглядят механически. Движения реальной камеры плавно начинаются и заканчиваются.
- Вращение плохо обрабатывается. Переход от угла рыскания 170 к -170 — это поворот на 20 градусов, но наивная интерполяция поворачивает на 340 градусов в неправильном направлении. Нормализуйте разницу углов в диапазон -180…180 перед шагом.
Для генерации этих строк и нужен инструмент для ключевых кадров — вы задаете несколько позиций, и он создает функцию для каждого тика с примененным сглаживанием.
Сглаживание
Разница между любительским и смотрибельным видео — это кривая интерполяции. Между двумя ключевыми кадрами, с t от 0 до 1:
linear t
ease-in-out t < 0.5 ? 2t² : 1 − 2(1−t)²
smoothstep t² × (3 − 2t)
smoothstep — безопасный вариант по умолчанию. Применяйте его к позиции и вращению одновременно, иначе камера прибудет раньше, чем закончит поворот.
Метод 2: реестр таймлайнов
В новых версиях добавлен формат таймлайна, который описывает всю сцену как данные, а не как сотни телепортов:
data/<namespace>/timeline/intro.json
Ключевые кадры со временем и режимами интерполяции, воспроизводимые одной командой. Преимущества:
- Намного меньше. Шесть ключевых кадров вместо двухсот телепортов.
- Интерполяция нативная, поэтому нет необходимости в ручных математических расчетах сглаживания.
- Независимость от частоты кадров — не заикается, как телепортация по тикам на загруженном сервере.
Недостаток в том, что он существует только в последних версиях, поэтому для Карты, ориентированной на старые клиенты, все еще нужен метод 1.
Удержание игрока на месте
Оба метода борются с двумя вещами:
- Ввод игрока. Режим наблюдателя позволяет Игроку улететь посреди кадра. Повторная телепортация каждый тик отменяет это, что является одной из причин сохранения метода "грубой силы".
- Загрузка чанков. Камера, летящая в незагруженное место, показывает пустоту.
/forceloadпуть до начала съемки и удалите его после.
Скрытие HUD
/gamerule doImmediateRespawn, режим наблюдателя и F1 помогут вам в большинстве случаев. Для чистого кадра, ресурс-пак, который очищает спрайты HUD, убирает прицел и панель быстрого доступа без нажатия Игроком каких-либо кнопок — см. руководство по HUD.
Разместите ключевые кадры на пути и экспортируйте либо функцию для каждого тика, либо JSON таймлайна с помощью Cutscene & Timeline Builders.