Руководства / Команды и данные
Катсцены без мода: ключевые кадры, интерполяция и трюки со спектатором
В ванилле камера движется только одним способом — функцией телепортации с тиками, — а реестр таймлайнов задаёт настроение вокруг неё. Для чего годится каждый из них и какое сглаживание избавляет от механического вида.
В ванилле нет объекта камеры, поэтому катсцена — это иллюзия, построенная на телепортациях, с таймлайном, который меняет мир вокруг неё.
Способ 1: телепортировать игрока каждый тик
Старый универсальный способ. Переведите игрока в режим спектатора, а затем ведите его по траектории:
gamemode spectator @s
tp @s 100.0 70.0 200.0 -90.0 10.0
по одному tp за тик из цепочки функций. Это работает на любой версии и не требует ничего особенного. Все проблемы связаны с плавностью:
- 20 ключевых кадров в секунду. Десятисекундный кадр — это 200 строк
tp. - Линейные шаги выглядят механически. Настоящее движение камеры замедляется на входе и выходе.
- Поворот плохо переносится через границу. Переход от yaw 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: таймлайны — для всего, кроме камеры
В недавних версиях появился реестр timeline, и так и тянет прочитать его как дорожку камеры:
data/<namespace>/timeline/intro.json
Это не так. Таймлайн работает по мировым часам и задаёт ключевые кадры для атрибутов окружения — цвета неба и тумана, фонового звука и музыки, света — с нативной интерполяцией. Он не может двигать игрока, поэтому сама камера всё ещё делается способом 1. Что таймлайн делает хорошо — это настроение катсцены: гасит небо, смещает туман и меняет музыку в такт телепортациям, без отдельной команды на каждый тик.
Расплата — он существует только в недавних версиях, поэтому карта, рассчитанная на старые клиенты, вынуждена имитировать настроение через /time и /weather.
Удержать игрока на месте
Траектория телепортации борется с двумя вещами:
- Ввод игрока. Спектатор позволяет игроку улететь прямо во время кадра. Повторная телепортация каждый тик перекрывает это — одна из причин, почему грубый метод живёт так долго.
- Загрузка чанков. Камера, летящая в незагруженное место, показывает пустоту.
/forceloadтраекторию перед съёмкой и уберите после.
Скрыть HUD
Режим спектатора и F1 дают почти всё. Для чистого кадра ресурспак, обнуляющий спрайты HUD, убирает прицел и хотбар без каких-либо действий игрока — см. руководство по HUD.
Расставьте ключевые кадры на траектории и экспортируйте функцию по тикам, а затем постройте таймлайн, задающий сцену вокруг неё, с помощью Cutscene & Timeline Builders.