Лаг (компьютерный сленг)

Лаг (от англ. lag, [læɡ] — «запаздывание», «задержка») — задержка в работе компьютерного приложения, когда оно не реагирует на пользовательский ввод вовремя. Производное от него «лагать» широко используются пользователями интернета для обозначения задержек в работе различных интернет-сервисов, онлайн-игр. Также геймеры используют слово «лаг» применительно к задержкам самой программы. Часто встречается в сетевых играх. С технической точки зрения представляет собой проявление влияния латентности операций передачи и обработки данных на качество работы системы реального времени.

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

Задержка, как правило, измеряется в миллисекундах (мс) и может отображаться в игре (иногда называется лагометром)[1]. Наиболее распространенные причины задержки выражаются через время отклика (или просто пинг) и частоту кадров (fps). Обычно задержка ниже 100 мс (10 Гц или кадров в секунду) считается необходимой для комфортной игры. Минимальный физически возможный пинг для соединения между противоположными точками на Земле, пересекающего половину планеты, составляет 133 мс. Другие причины задержки обычно приводят к задержке ниже играбельных 20 мс (50 Гц или кадров в секунду), либо к потере, искажению или дрожанию изображения в игре.

Задержка реакции игры

Анализ

Даже в одиночной игре задержка между нажатием и изображением состоит из нескольких частей[2][3]:

  • Физическое замыкание кнопки.
  • Реакция интерфейса клавиатуры/мыши. Реакция подсистемы обработки клавиатуры/мыши.
  • Просчёт физики игровым движком.
  • Простой в очередях заданий на рендеринг[3].
  • Рендеринг кадра.
  • Простой готового кадра от окончания рендеринга до переключения буферов, а затем — до прохождения через видеоинтерфейс.
  • Если игра в оконном режиме, даже безрамочном — между переключением буферов и попаданием в видеопамять вклинивается работа оконного менеджера[3].
  • Реакция устройств, преобразующих сигнал в мониторе[4][5][3] (увеличивающих изображение[4][6], улучшающих качество[7]) — особенно если вместо монитора телевизор и у него нет «игрового» режима.
  • Физическая реакция пикселей ЖК-монитора[4].

В сетевой игре к этому добавляется время прохода пакетов от компьютера к компьютеру.

Также играют роль микролаги или запинки (stutters) — кадры, которые рисуются дольше остальных[8]. Обычно микролаги случаются, когда дела в игре приобретают серьёзный оборот[8] (перестрелка в FPS, сложный трафик в гонке) — потому микролаги влияют на впечатление от игры даже больше, чем средняя задержка.

Чтобы снизить задержки, применяют такие меры:

  • Со стороны игрока:
    • Быстродействующие клавиатуры и мыши — геймеры используют устройства с частотой шины 1000 Гц, кнопки с коротким ходом и линейной реакцией, оптомеханические выключатели.
    • Повышение кадровой частоты — покупкой быстродействующего компьютера, снижением качества изображения.
    • Поиск «узкого места» игры, которое снизит задержку на данном компьютере.
    • Быстродействующий монитор. «Игровые режимы» в телевизорах.
    • Быстрое сетевое подключение. Отключение домочадцев, занимающих всю сеть — например, качающих большие файлы. QoS в маршрутизаторе, настроенный в пользу игры.
  • Со стороны разработчика и издателя:
    • Оптимизация разных подсистем игры — графической, сетевой, загрузки данных и так далее.
    • Игроков в онлайн-играх делят на регионы (Европа, СНГ, США…) и располагают сервер поближе к ним.

Лаг в сетевых играх

Если с задержками от кнопки до изображения начали бороться только в 2010-е, то задержки компьютерной сети начали играть роль с первых лет игр по интернету и почти всегда более значимы, чем остальные виды задержек (кроме особых случаев — киберспорт, то есть игра по неперегруженной локальной сети). В частности, свет проходит по экватору Земли за 130 мс — современными геймерами такой пинг считается неприемлемым, а ведь это теоретически наименьшая цифра, когда игроки в разных концах Земли.

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

Архитектура Doom (1993) была простейшей: у каждого игрока есть полное состояние игры. Каждый такт (35 тактов в секунду, 1 такт = 28 мс) игрок рассылает остальным своим кнопки управления. Как только у игрока накопятся кнопки от всех участников сетевой игры, он проводит новый такт[10]. Через поперечник США тот же свет проходит за 15 мс, и подобной архитектуры хватает даже для модемной игры через несколько штатов США.

Между современными играми и Doom разница такая.

  1. Подобная архитектура ущербна по другим параметрам: неустойчива к читерству, не позволяет много игроков, с трудом позволяет войти в начатую игру или выбросить игрока…
  2. В телефоне используется канальная коммутация — АТС даёт абоненту гарантированную полосу пропускания со стабильной задержкой. В интернете коммутация пакетная — один участник передаёт другому сообщение (пакет), а промежуточные узлы выясняют, как его доставить. Это увеличивает ёмкость каналов и живучесть Интернета — но любой из узлов Сети может решать заторы, выбрасывая пакет, задерживая его, пуская по другому пути и т. д., что тоже увеличивает задержку.
  3. Если пакеты идут долго, управление запаздывает. Потому Doom плохо играется на задержках, превышающих игровой такт.

Обычно вопрос задержек решается так. У игры есть два состояния — «гарантированное» и «передовое»[11]. «Гарантированное» — это что случилось на сервере и никак нельзя изменить вдруг дошедшими пакетами, и может отставать на немалую величину — более 100 мс. «Передовое» состояние определяется локальным управлением игрока и пакетами тех игроков, у кого связь хорошая. Таким образом, несмотря на плохую связь, у каждого игрока отзывчивое управление. Стереотипные сетевые лаги выглядят так:

  • если у другого связь кратковременно пропадает — его персонаж сначала «зависает» (стоит на месте или двигается по прямой), а потом перепрыгивает. Если связь постоянно плохая — персонаж двигается рывками;
  • если у тебя связь кратковременно пропадает — вся игра приостанавливается (видит пропажу связи и перестаёт рассчитывать передовое состояние), а потом мгновенно перепрыгивает в новое состояние. Если связь постоянно плохая — вся игра двигается рывками.

Ещё со времён Doom в играх есть два способа стрельбы — мгновенный просчёт траектории пули (hitscan) и медленный снаряд (projectile). (Промежуточный — быстрая пуля — реализуется крайне редко и в очень реалистичных играх, ориентированных на снайперские и артиллерийские дуэли, его опустим.) Со снарядами игра не сильно погрешит против истины, если игрок целится по передовому состоянию, а попадания просчитываются по гарантированному[12]. С просчётом траекторий так невозможно — на сервере передового состояния нет вообще, у разных игроков они разные, и существуют мощные виды hitscan-оружия вроде снайперской винтовки, для которых вопрос «попал-промахнулся» архиважен. Потому во многих движках (Source) используется так называемая компенсация задержек — сервер делает предположение, какую картинку видел клиент в момент выстрела[13]. Внешне это выглядит так: игрок высунулся из укрытия, успешно спрятался и был убит уже там, в безопасном месте[13].

Влияние различных функций видеоадаптера на задержку одиночной игры

Базовый показатель — платформа ПК, игра одиночная или по неперегруженной локальной сети (сетевые задержки незначительны), двойная буферизация выключена, игра настроена так, что кадровая частота системы стабильна и превышает таковую у монитора.

  • Ухудшение качества изображения — снижает задержку, даже если производительность упирается в другой компонент (процессор/видеоплату) и общая кадровая частота при этом не повышается[3].
  • Двойная буферизация — значительно повышает задержку[14]
  • Тройная буферизация — ещё сильнее повышает задержку[14].
  • nVidia G-Sync, AMD FreeSync — в таких условиях (кадровая частота системы больше, чем у монитора) бессмысленны. Если меньше — несколько повышают задержку[14].
  • Скоростная синхронизация (тройная буферизация, продолжающая вместо ожидания синхронизации заполнять заэкранные буфера) — в таких условиях незначительно повышает задержку[14]. Если кадровая частота системы меньше таковой у монитора — бессмысленна.
  • Оконный режим, даже безрамочное окно — повышает задержку по сравнению с полноэкранным режимом[3][15].
  • Искусственное ограничение кадровой частоты — снижает задержку, если производительность упирается в видеоплату[16].
  • nVidia Ultra-Low Latency/AMD Anti-Lag — бессмысленны, ограничение кадровой частоты эффективнее[16].

История

Долгое время снижение игрового лага сводилось к повышению кадровой частоты. При этом игровые приставки изначально имели преимущество — с первых поколений выдавали высокую кадровую частоту (50/60 FPS), это достигалось специализированными решениями, ограничивавшими геймдизайн[17], но удешевлявшими систему: так, Sega Mega Drive 16-битный с частотой 7,6 МГц, а сходный по производительности 80386 уже 32-битный[18] и 12…40 МГц.

К началу 2000-х игры на ПК стали стабильно давать те же 60 FPS, что и на приставках, и все 2000-е повышалось качество изображения путём программирования видеоплаты с помощью шейдеров. Чтобы добавить освещение, отражения и прочее, потребовалось несколько проходов рендеринга[19], и чтобы процессор не ждал, рендеринг сделали отложенным[20]. Такая технология сыграла злую шутку: если загрузка видеоплаты на пределе, повышается задержка от нажатия до изображения. Ограничение кадровой частоты, даже до 95 %, делающее игру виртуально «процессорозависимой», снижает задержку[16].

Задержка всё это время была в тени, потому что её сложно измерить — требуется модифицированная мышь (нажатие на кнопку зажигает светодиод) и скоростная камера[3]. Исследователи могли измерить цифру до 120 мс, и даже на кадровой частоте 120 fps она порядка 40 мс[14][16]. Подобную задержку иногда называют «преимущество выглядывающего» — выглядывающий из-за препятствия заранее знает, что в данной точке обороняющийся, и может выстрелить наперёд, а обороняющийся — нет[3]. В 2020 году появилась технология nVidia Reflex — она позволяет игре следить за загрузкой видеоплаты, и этим очень сильно снижает задержку[3]. Технология доступна с любым монитором и даже на относительно старых видеоплатах (начиная с GeForce 900), но игра должна её поддерживать. (А вот другая часть nVidia Reflex, вычисление задержки, требует особого монитора и учитывает всё, кроме быстродействия мыши и пикселей монитора.)

В ритм-играх важны сотые доли секунды, все события полностью предсказуемы, и они обычно играются на консолях, где устройство вывода — телевизор со своими алгоритмами улучшения изображения. Потому в Guitar Hero и подобных играх есть калибровка задержек[21].

Облачные игры

Облачные игры — это вид онлайн-игр, при котором вся игра запускается на игровом сервере в дата-центре, а пользователь использует лишь тонкий клиент который отправляет команды с контроллера на игровой сервер. Сервер обрабатывает игру, генерирует следующий кадр видео, сжимает его, используя сжатие видео с малым лагом и отправляет обратно тонкому клиенту для распаковки и отображения. Чтобы облачный гейминг был комфортным, общая задержка всех компонентов системы (тонкого клиента, интернета и/или LAN соединения с игровым сервером, выполнения на самом игровом сервере, сжатия и распаковки видео и аудио, а также вывода изображения на экран) должна быть настолько низкой, чтобы у пользователя создавалось впечатление, будто игра запущена локально[22][23]. Из-за таких строгих требований к задержке, скорость света в оптоволокне становится ограничивающим фактором. По данным OnLive это позволяет размещать игровые серверы на расстоянии не более 1600 километров от пользователя[24]. Существует также немало споров относительно задержек, связанных с облачным геймингом. В многопользовательских играх с клиент-серверной архитектурой компьютер игрока самостоятельно отрисовывает графику, а на сервер отправляется лишь информация о действиях игрока. Например, при нажатии кнопки персонаж на экране мгновенно выполняет соответствующее действие. Однако последствия этого действия, например, уничтожение противника, становятся видны лишь с небольшой задержкой, поскольку информация о нем должна дойти до сервера. Это приемлемо лишь до тех пор, пока отклик на действия игрока достаточно быстр.

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

Дополнительная задержка ввода также может сильно затруднить прохождение некоторых однопользовательских игр. Например, если противник замахивается на игрока, а тот должен заблокировать удар, то к моменту, когда на экране игрока отобразится начало атаки противника, тот уже успеет нанести удар и убить игрока на сервере.

Кале в игре Dota 2

Кале - это игровой сленг и интернет-фраза[25] , обозначающая лаги[26][25]. Происходит от китайской фразы 卡了[26][25] и впервые была использована на Dota 2 Asia Championships 2015, когда некоторые китайские игроки писали её в чате, чтобы пожаловаться на раздражающие лаги в игре и попросить поставить паузу[26]. По мере роста популярности китайской Dota 2 сцены это выражение также стало известным. Многие западные игроки, как профессионалы, так и любители, часто пишут "kale" (кале) вместо "lag" (лаг) в игровом чате и на Twitch[25][26].

См. также

Примечания

  1. Optimize XP for Multiplayer Mööayhem. Maximum PC (англ.). Vol. Summer. Future US, Inc. 2004. p. 49.
  2. Exploring Input Lag Inside and Out. Дата обращения: 28 апреля 2022. Архивировано 28 апреля 2022 года.
  3. 1 2 3 4 5 6 7 8 9 Introducing NVIDIA Reflex: Optimize and Measure Latency in Competitive Games | NVIDIA. Дата обращения: 20 ноября 2020. Архивировано 19 ноября 2020 года.
  4. 1 2 3 Minute Science: Input Lag vs. Response Time - YouTube. Дата обращения: 28 апреля 2022. Архивировано 28 апреля 2022 года.
  5. Factors Affecting PC Monitor Responsiveness | PC Monitors. Дата обращения: 28 апреля 2022. Архивировано 25 апреля 2022 года.
  6. Duck Hunt on an HDTV 2 на YouTube
  7. Игровой режим на телевизоре Samsung. Дата обращения: 11 апреля 2024. Архивировано 10 мая 2023 года.
  8. 1 2 How To Fix Stutter In Games - Frame Rate, Frame Time & RTSS - YouTube. Дата обращения: 29 апреля 2022. Архивировано 29 апреля 2022 года.
  9. Mark Claypool, Kajal Claypool. Latency can kill: precision and deadline in online games (англ.) // Proceeding MMSys '10 Proceedings of the first annual ACM SIGMM conference on Multimedia systems. — New York, NY: ACM, 2010. — P. 215—222. — ISBN 978-1-60558-914-5. — doi:10.1145/1730836.1730863. Архивировано 4 июня 2016 года.
  10. Doom networking component | Doom Wiki | Fandom. Дата обращения: 8 мая 2022. Архивировано 7 июля 2022 года.
  11. Client-Side Prediction and Server Reconciliation - Gabriel Gambetta. Дата обращения: 8 мая 2022. Архивировано 5 мая 2022 года.
  12. Lag compensation - Official TF2 Wiki | Official Team Fortress Wiki. Дата обращения: 8 мая 2022. Архивировано 8 мая 2022 года.
  13. 1 2 Lag Compensation - Gabriel Gambetta. Дата обращения: 8 мая 2022. Архивировано 27 апреля 2022 года.
  14. 1 2 3 4 5 Nvidia Fast Sync Better Than G-Sync and V-Sync? - YouTube. Дата обращения: 29 апреля 2022. Архивировано 25 марта 2022 года.
  15. (Borderless) Windowed Mode Should You Use It? - YouTube. Дата обращения: 29 апреля 2022. Архивировано 29 апреля 2022 года.
  16. 1 2 3 4 NVIDIA Reflex Low Latency - How It Works & Why You Want To Use It на YouTube
  17. James Hague. Stumbling Into the Cold Expanse of Real Programming Архивная копия от 11 ноября 2020 на Wayback Machine. Перевод
  18. Так, игры Disney’s Aladdin и The Lion King выпускались только под защищённый режим 80386.
  19. Unreal’s Rendering Passes — Unreal Art Optimization. Дата обращения: 28 апреля 2022. Архивировано 19 апреля 2022 года.
  20. Multiple-Pass Rendering — Win32 apps | Microsoft Docs. Дата обращения: 28 апреля 2022. Архивировано 28 апреля 2022 года.
  21. How to Fix the Lag in Guitar Hero на YouTube
  22. The Process of Invention: OnLive Video Game Service. The FU Foundation School of Engineering & Applied Science (Columbia University). Дата обращения: 23 января 2010. Архивировано из оригинала 20 декабря 2012 года.
  23. D8 Video:OnLive demoed on iPad, PC, Mac, Console, iPhone. Wall Street Journal (9 августа 2010). Дата обращения: 19 августа 2010. Архивировано 12 февраля 2011 года.
  24. Beta Testing at the Speed of Light. OnLive (21 января 2010). Дата обращения: 23 января 2010. Архивировано из оригинала 16 декабря 2012 года.
  25. 1 2 3 4 Josuamarcelc. What Is Kale in Dota 2? josuamarcelc (8 июля 2021).
  26. 1 2 3 4 正惊游戏. 当网游出现延迟的时候,中国玩家用lag,老外却用拼音说"kale"? (неопр.). 17173 (1 сентября 2018).

Ссылки