Как в Dying Light устроен паркур
Секреты свободы перемещения от первого лица.
Ядро геймплея Dying Light основано на паркуре в открытом мире — игрок может попасть куда угодно и при помощи самых разных маршрутов. Мы выбрали главное из лекции разработчика Бартоша Кулона с GDC 2018 о том, как в игре устроена система передвижения.
Основы дизайна перемещения
Как дать понять, что игрок может куда-то залезть? Для этого он должен различать три вектора: начало и конец платформы, а также направление вперёд, по которому можно пройти дальше.
Исходя из этого принципа, поначалу в Techland все конструкции для паркура хотели расставить вручную — чтобы у разработчиков был контроль над всеми маршрутами, по которым может пойти игрок. Однако на ранних тестах это вылилось в то, что на прототипе игровой карты уже существовало 50 тысяч платформ, и их число продолжало расти.
Так как изначально Dying Light разрабатывалась под прошлое поколение консолей, от такого подхода пришлось отказаться — память устройств тех лет была невелика и быстро забивалась. Поэтому в Techland пошли по другому пути: вместо того, чтобы расставлять платформы вручную, они определялись игрой автоматически в реальном времени.
От положения игрока прокладывается некое количество лучей, которое сканирует окружение и проверяет, где он сможет залезть. Когда происходит совпадение по нужной высоте, по длине луча игра удостоверяется, что на конструкции хватает места для персонажа. Если все нужные условия соблюдены, платформа для паркура «активируется».
Благодаря этому в Techland добились «потрясающей свободы передвижения» — но также появились две большие проблемы.
Во-первых, это означально, что левелдизайнеры и художники окружения теперь должны были позаботиться о проработке всех мест, куда игрок мог попасть — от двора до крыши дома. Во-вторых, у игры резко упала производительность — но благодаря работе программистов её удалось оптимизировать. Так, окружение вокруг игрока теперь «пакетировалось», а сканирующие лучи одного и того же направления складывались.
Помимо этого, разработчикам пришлось ввести новые движения для паркура — например, в таких случаях, когда игрок не может залезть на следующую платформу сразу, и ему остаётся лишь свисать. Всё это требовало расширения алгоритма передвижения.
Следующим шагом стала проработка механики прыжков, которая лежала в основе всего паркура. Как отметил Кулон, прыжки от первого лица не настолько интуитивны, нежели в платформерах — из-за искажения перспективы.
Во время первых тестов игроки прыгали либо слишком рано, либо слишком поздно — из-за чего преодолевание препятствий чрезмерно усложнялось, или, наоборот, упрощалось. Поэтому разработчикам пришлось сгладить некоторые углы, добавив в Dying Light то, что они назвали jump assist — «помощь в прыжках».
Во-первых, эта система слегка откладывала прыжок, выжидая наилучший для него момент.
Во-вторых, она давала возможность совершить прыжок, если игрок только-только начал падение — но с этим нужно было быть аккуратным, так как такое движение «очень плохо выглядело в кооперативе».
И в-третьих, если игрок хочет отпрыгнуть от препятствия, игра позволяет это сделать. С технической точки зрения, это прыжок в воздухе — но так как подобное движение чувствуется более естественно в геймплее, его решили ввести в систему паркура.
Проблемы и решения
После того, как игра подбирала нужную анимацию в зависимости от вида препятствия, позиция игрока с ней синхронизировалась. В этот момент персонаж протягивал руки, чтобы зацепиться за край платформы. Действие либо ускорялось, либо замедлялось в зависимости от скорости игрока — чтобы избежать её потери и сделать передвижение более плавным.
Затем, когда персонаж начинал карабкаться, его анимация вновь сихронизировалась с позицией. Звучит просто, да и выглядит красиво — но на деле это вылилось в ряд проблем.
Анимация паркура включалась, когда герой начинал карабкаться — в это время у игрока отнимался контроль над управлением, и это очень плохо им воспринималось. В итоге разработчикам пришлось ускорить паркур и добавить возможность крутить головой во время воспроизведения анимации — простой трюк, но, как выяснилось, довольно действенный.
Также из-за того, что игроки зачастую прыгали на препятствия не перпендикулярно их краям, а слегка под углом, возникала проблема с руками — одна обязательно застревала в текстурах, а другая висела в воздухе.
Так как из-за особенностей движка разработчики не могли рендерить руки в конце фрейма, они пришли к более изобретательному решению — масштабированию модели игрока. Поэтому в моменты карабканья со стороны она выглядела... необычно.
А в случае с рукой, которая висела в воздухе, игра просчитывала позицию грани платформы и «переносила» кисть поближе к ней.
Последние проблемы касались управления на геймпадах. В Techland приняли решение перенести стандартную кнопку прыжка с X на R1 (на Dualshock) — из-за того, что при использовании крестика игрок перемещал большой палец с правого стика и на короткий момент терял управление в воздухе.
Более того, разработчики добавили возможность зажимать R1 в моменты, когда игрок может попасть сразу в несколько мест — как на скриншоте ниже. В итоге он может зацепиться за грань платформы лишь в том случае, если зажмёт кнопку — иначе произойдёт просто прыжок.
Кулон также упомянул то, что в Techland экспериментировали с введением фрирана из Assassin's Creed, где весь паркур происходит автоматически при зажатии кнопки. По его словам, фича работала «превосходно» — однако так игрок не получал удовольствия от правильного расчёта тайминга во время передвижения, да и никакого навыка от него больше не требовалось.
Полировка деталей
Как выяснилось во время разработки, очень малый процент игроков в Dying Light сталкивался с укачиванием во время геймплея.
Со мной такого никогда не случалось, так что представьте моё удивление, когда однажды ко мне приходит коллега и рассказывает историю: «Чувак, я показывал нашу игру на конференции одной из репортёров Polygon. И тут она внезапно побледнела, выбежала из стенда, и её вырвало». Он был в шоке.
Потом журналистка даже написала ему письмо, где сказала, что ей было плохо до конца дня. Это была катастрофа, мы не могли позволить случиться тому, чтобы репортёры выбегали со стенда, а игроков тошнило во время игры. В Techland никто с этим не сталкивался.
В итоге разработчики почитали несколько статей об укачивании и подготовили билд с исправлениями. Также Techland прибегла к помощи специалистов, которые выяснили, из-за чего конкретно игрокам становилось плохо.
Во-первых, создатели исправили покачивание камеры — как на гифке ниже.
Во-вторых, убрали уведение камеры назад во время ускорения игрока вперёд.
В-третьих, разработчики добавили крохотную точку в центре экрана — чтобы глаза игрока (пусть даже неосознанно) всегда на чём-то фокусировались. Без прицела это происходило хаотично на разных объектах.
Также специально для конференций Techland сделала больше расстояние между экраном и игроком на своих стендах — так как при большом ТВ глаза могут улавливать даже малейшие движения. В итоге, как отметил Кулон, никто не почувствовал укачивание — даже та самая журналистка Polygon.
Из остальных деталей разработчик также упомянул дополнительные нововведения, призванные компенсировать недостаток контроля над персонажем. К примеру, во время бега среди вертикальных препятствий игрока слегка подталкивает из стороны в сторону, а если на пути встречается ступенька или небольшая кочка, он наступает на неё автоматически, без прыжка.