Прогнозирование на стороне клиента
Прогнозирование на стороне клиента — это метод сетевого программирования, используемый в видеоиграх и предназначенный для сокрытия негативных последствий соединений с высокой задержкой . Этот метод пытается сделать ввод игрока более мгновенным, одновременно управляя действиями игрока на удаленном сервере .
Процесс прогнозирования на стороне клиента означает, что клиент локально реагирует на ввод пользователя до того, как сервер подтвердит ввод и обновит состояние игры. [1] Таким образом, вместо того, чтобы клиент только отправлял управляющие входные данные на сервер и ждал в ответ обновленного состояния игры, клиент также, параллельно с этим, прогнозирует состояние игры локально и дает пользователю обратную связь, не ожидая обновленного состояния игры от сервер.
Прогнозирование на стороне клиента уменьшает проблемы с задержкой, поскольку больше не будет задержки между входными данными и визуальной обратной связью на стороне клиента из-за времени проверки связи в сети. Однако это также приводит к десинхронизации состояний игры клиента и сервера, которую необходимо устранить, чтобы в игру можно было играть. [1] Обычно рассинхронизация исправляется, когда клиент получает обновленное состояние игры, но, поскольку мгновенная коррекция может привести к «привязке», обычно используются некоторые алгоритмы «сглаживания». Например, одним из распространенных алгоритмов сглаживания может быть проверка местоположения каждого видимого объекта на стороне клиента, чтобы увидеть, находится ли он в пределах некоторого эпсилона ошибки от его местоположения на стороне сервера. В противном случае информация на стороне клиента обновляется напрямую на стороне сервера (привязывается из-за слишком сильной десинхронизации). Однако, если местоположение на стороне клиента не слишком далеко, интерполируется новая позиция между клиентской и серверной сторонами; эта позиция устанавливается в пределах небольшого отклонения от местоположения на стороне клиента, которое обычно считается «достаточно маленьким», чтобы не мешать пользователю.
Другое решение проблемы десинхронизации, обычно используемое в сочетании с прогнозированием на стороне клиента, называется согласованием сервера . [2] Клиент включает порядковый номер в каждый ввод, отправляемый на сервер, и сохраняет локальную копию. Когда сервер отправляет клиенту достоверное обновление, оно включает порядковый номер последнего обработанного ввода для этого клиента. Клиент принимает новое состояние и повторно применяет входные данные, еще не обработанные сервером, полностью устраняя видимые проблемы десинхронизации в большинстве случаев.
Самый ранний известный шутер от первого лица, в котором использовалось предсказание на стороне клиента, — это Duke Nukem 3D , в который он был встроен с момента выпуска условно-бесплатной версии 29 января 1996 года. [3] [4] Эта техника также была характерной особенностью QuakeWorld , популярного дополнения к Quake . Хотя сетевая игра была включена в оригинальную игру Quake , она была оптимизирована в основном для игры по локальной сети . Имея высокоскоростное домашнее соединение (редкость в то время), дизайнеры Quake упустили из виду свои предположения о высокой пропускной способности и низком времени пинга, из-за которых игра в Интернете разочаровывалась для пользователей коммутируемого доступа . [5] После серии экспериментов в рамках длительного закрытого бета-тестирования id Software выпустила QuakeWorld с новой прогнозной моделью, которая оказалась популярной среди игроков как с высокой, так и с низкой задержкой.
См. также
[ редактировать ]Ссылки
[ редактировать ]- ^ Перейти обратно: а б Бернье, Ян В. (2001). «Методы компенсации задержки при разработке и оптимизации внутриигровых протоколов клиент/сервер» (PDF) . Проверено 19 декабря 2008 г.
- ^ Габриэль Гамбетта, Прогнозирование на стороне клиента и согласование серверов
- ^ Дрансфилд, Ян (14 июля 2018 г.). «Машинное отделение: Стройка» . Ретро-геймер (182). Великобритания: Future plc : 62–67. ISSN 1742-3155 . Проверено 24 ноября 2018 г.
- ^ Выпуск исходного кода Duke Nukem 3D (версия v1.5 на компакт-диске) — 1 апреля 2003 г. , см. domovethings(), fakedomovethings() и fakedomovethingscorrect(), Video Game Preservation, 15 мая 2019 г. , получено 15 мая 2019 г.
{{citation}}
: CS1 maint: другие ( ссылка ) - ^ Джон Кармак, QuakeWorld .plan