Рубрика развивается при поддержке

Как авторы Watch Dogs 2 боролись с задержкой в сетевой игре Материал редакции

Траектории движения автомобилей и контроль над столкновениями.

В закладки

«Охота за головами» — многопользовательский режим в Watch Dogs, в котором три игрока помогают полиции нейтрализовать четвёртого. Это порождает высокоскоростные погони с участием NPC. В Ubisoft считают этот режим невероятно весёлым, однако его реализация была сопряжена с рядом проблем.

Ведущий программист Watch Dogs 2 Мэтт Дельбоск на GDC рассказал о том, как разработчики боролись с задержкой и пытались сделать так, чтобы у всех игроков в мультиплеере было одинаковое состояние мира. Мы выбрали из доклада главное.

Своё выступление Дельбоск начинает с объяснения того, как функционирует сетевой компонент Watch Dogs 2. Мультиплеер работает по принципу пиринговый сети — то есть не существует единого сервера, а игроки подключаются друг к другу. В связи с этим системе приходится реплицировать множество объектов, чтобы у всех игроков они отображались одинаково: это касается и пешеходов, и уличного траффика.

Создавать реплики автомобилей особенно тяжело по нескольким причинам. Первая заключается в том, что они двигаются намного быстрее пешеходов. Например, при задержке в 100 миллисекунд разница в положении автомобилей у игроков может составлять 2-3 метра. Помимо этого, важно корректно передавать информацию о столкновениях не только игроков, но и NPC. Кроме того, человеческий глаз очень чувствителен к изменению скорости объекта — если что-то движется с непостоянной скоростью, то люди это замечают.

При счислении координат в первую очередь стоит заняться дебагом траекторий движения. На скриншоте ниже можно увидеть составляющие элементы этого процесса. Красные точки — это снапшоты, которые игроки получают от «мастера». Синяя линия — экстраполяция от этих точек, своего рода «предсказание» системы того, как будет двигаться пользователь. Зелёная линия, в свою очередь, это тот путь, который автомобиль проехал на самом деле. Таким образом, перед разработчиками стояла задача сделать так, чтобы синяя линия была максимально близка к зелёной.

Для счисления координат в Ubisoft отталкивались от алгоритма проективного смешивания скорости, предполагающего смешивание двух проекций — последней известной и текущей. Само по себе это работает не слишком хорошо, что можно увидеть ниже.

Чтобы исправить это, разработчики решили использовать для экстраполяции не прямое движение автомобиля, а «представлять», будто машина слегка поворачивает. Однако для этого недостаточно передавать лишь угол поворота передних колёс, ведь нужно учитывать позицию транспорта, скорость и угловую скорость. В попытках сделать «предсказания» точнее разработчики решили передавать также и компонент рыскания угловой скорости, чтобы угадывать направление поворота.

Это хорошо работает в тех случаях, когда машина двигается по кругу. Однако если автомобиль дрифтует, то «предсказание» окажется ошибочным. К счастью, транспорт в Watch Dogs 2 не приспособлен для этого, поэтому в Ubisoft это не сочли большой проблемой.

После внесения правок, автомобиль стал двигаться так, как показано ниже.

Следующая техника, которую использовали в Ubisoft, называется буферизация снапшотов. Вместо того, чтобы экстраполировать по полученным снапшотам, система буфферизировала их, а затем дожидалась следующих, после чего строила маршрут на основе двух точек.

Такой подход позволяет создать весьма точную траекторию движения, однако игра вынуждена обрабатывать объекты и информацию «из прошлого». В примере, приведённом Дельбоском, разница между «мастером» и репликой составляет пять кадров. Кажется, что это не так много, однако порой могло случиться так, что один игрок врезался в другого, но у «жертвы» на экране, при этом, ничего не происходило.

В Ubisoft решили эту проблему с помощью «временного смещения». Система начинает экстраполяцию через несколько кадров после получения одного снапшота, а затем подстраивает движение реплики под второй снапшот. Таким образом, реплика отстаёт от мастера всего на три кадра. Это не идеальное решение, но оно даёт лучшие результаты.

Позднее тестеры стали рассказывать, что со столкновениями в мультиплеере не всё гладко — они работают не совсем так, как в одиночном режиме. Обычно, если одна машина врезается в другую, то обе останавливаются. Однако в мультиплеере автомобили отлетали друг от друга. Тогда разработчики решили кадр за кадром изучить, что же произошло.

Выяснилось, что экстраполяция «говорила» автомобилю продолжать движение после столкновения, потому что следующий снапшот с данными об аварии ещё не был получен мастером. Предсказание оказалось ошибочным. Когда же снапшот всё-таки приходил, система отбрасывала автомобиль назад, туда, где он должен был находится в момент столкновения. Всё это время автомобили накапливали импульс, поэтому в итоге и отлетали с большой скоростью.

Решить эту проблему в мультиплеере, который работает по принципу пиринговый сети, невозможно, поэтому разработчикам пришлось прибегнуть к симуляции физики. То есть игра симулирует столкновение локально, а после получения снапшота результат подстраивается под актуальные данные о состоянии игрового мира. Интересно, что переход от локальной симуляции к счислению координат для мотоциклов происходит быстрее, чем для автомобилей.

Однако столкновения непредсказуемы, поэтому положение автомобилей после аварии у игроков может отличаться. Разработчики попытались решить эту проблему с помощью предсказания столкновения. Такой алгоритм уже был в системе и использовался ИИ, поэтому в Ubisoft просто применили его на игроков.

Проблемы также были связаны со статичным объектами, которые не сдвинутся, если игрок врежется в них. Особенно трудно разработчикам пришлось с деревьями — они узкие, поэтому могло получится так, что игрок объезжал их не с той стороны, с которой «предсказывала» игра. В теории это приводило к подобному результату.

В Ubisoft решили, что лучшим выходом будет слегка сдвигать автомобили с их позиции, когда фиксируется большое количество столкновений.

Ещё одна трудность возникла с «временным смещением». Траектория движения пешеходов создаётся с помощью интерполяции, потому что люди двигаются медленнее автомобилей. Когда игрок взаимодействует с NPC или другими пользователями вне машин, всё хорошо, потому что «временное смещение» для всех одинаковое. То же самое касается и автомобилей. Однако проблемы появляются тогда, когда игрок в автомобиле взаимодействует с другим игроком, находящимся вне транспорта — тогда столкновение может обрабатываться некорректно. Для таких случаев в Ubisoft решили симулировать физику так же, как это сделано для автомобильных аварий.

Даже после всего этого разработчики сталкивались с проблемами «зловещей долины». Например, реплики не могут крутиться вокруг своих центров массы. Кроме того, небольшие изменения в скорости объектов всё ещё были заметны. Чтобы как-то сгладить эти шероховатости, разработчики использовали постобработку — система сглаживает углы движения и перепады скорости.

Вы думаете я тут значит паши а вы там клубничку приедите с молочком поедите?
{ "author_name": "Андрей Верещагин", "author_type": "editor", "tags": ["\u043e\u043f\u044b\u0442","watchdogs","ubisoft"], "comments": 23, "likes": 49, "favorites": 116, "is_advertisement": false, "subsite_label": "gamedev", "id": 83906, "is_wide": true, "is_ugc": false, "date": "Tue, 26 Nov 2019 15:55:49 +0300", "is_special": false }
Разработка игр для PC, консолей
и мобильных платформ
Я готов!
0
23 комментария
Популярные
По порядку
Написать комментарий...

Гладкий алмаз

11

Короче, котыль на костыле едет и костылём погоняет :)

Ответить
8

Работает зато!

Ответить
7

 Работает зато!

Экономит бабки юбисофта зато. 
А игроки пусть мучаются с лагами и рассинхронами, вплоть до конкретного пососа против тех, кому повезло с пингом (привет, радуга). Игры делаются для инвесторов, а не для игроков.

Ответить
1

хз, не помню чтоб у меня там были проблемы в мультиплеере по технической части. Больше утомлял сам геймплей, когда всегда с оружием наперевес. Помню как относительно многие просили "пацифистский режим" в мультике, чтоб было интереснее догонять/убегать. Жалко, что юбики тогда так и не решились на него :/

Ответить
1

скоро эти костыли заменят костылями которые генерируют нейросети, костылей станет больше и вариантов просчитанных больше, что позитивно скажется на результате

Ответить
5

нейросети

-Вы что, и играть за меня будете?
-Ага!

Ответить
1

Всмысле костыли? По - другому и не сделаешь.

Ответить
0

Великолепное Юбисофтовское peer-to-peer, похоронившее "For Honor" и давшее солидного леща "R6".

Ответить
0

For Honor-у гг вп уже?

Ответить
1

На данный момент нет, но с R6 не сравнится.

Ответить
0

вроде  же обещали в фор оноре сервера завести?

Ответить
0

Давным давно уже завезли.

Ответить
1

А вообще есть удачные с точки зрения игрового процесса peer-to-peer проекты, в которых полечили бы рассинхрон, реконнекты и читы?

Ответить
7

Старые шахматы под винду.

Ответить
0

Ну да, и "Червы" поди еще

Ответить
0

дарксолс? хотя он тоже читерный

Ответить
3

Я играл только на консоли в сеть там, в принципе кооп в двоих был норм (если не считать плясок с подключением к сессии), но в ПвП периодически был рассинхрон

Ответить
0

Ну там онлайн хитбоксы реально специально отличаются от оффлайн.

Ответить
1

Ну частично в helldivers это работает. Сам удивился, что там на peer to peer всё лежит. Правда часто в конце матча обязательно кто-то вылетит.

Ответить
3

Добавление выделенных серверов само по себе ситуацию не лечит.

Дискретные и редкие (относительно) апдейты все равно требуют интерполяции.
Чтобы управление не было "ватным" все равно нужна и экстраполяция, а с ней приходит и миспредикшн.

Авторитарный сервер помогает против рассинхрона и читеров. Остальные проблемы практически никак не меняются.

Ответить
0

Если такая хорошая схема, зачем убрали хорошие режимы из первой части?В одном вообще шесть человек нормально играть могли, и никаких чудо-костылей не надо было.
А про дрифт - иронично получилось, молодца

Ответить
0

Потратили пару миллионов, вместо того , чтоб выделить сервера.

Видимо так дешевле

Ответить
0

На главной картинке, вокзал Сочинский. Один в один. 

Ответить
{ "jsPath": "/static/build/dtf.ru/specials/DeliveryCheats/js/all.min.js?v=05.02.2020", "cssPath": "/static/build/dtf.ru/specials/DeliveryCheats/styles/all.min.css?v=05.02.2020", "fontsPath": "https://fonts.googleapis.com/css?family=Roboto+Mono:400,700,700i&subset=cyrillic" }