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

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

Задержка реакции игрыПравить

АнализПравить

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

ИсторияПравить

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

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

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

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

См. такжеПравить

ПримечанияПравить

  1. Exploring Input Lag Inside and Out. Дата обращения: 28 апреля 2022. Архивировано 28 апреля 2022 года.
  2. 1 2 3 4 5 6 7 8 9 Introducing NVIDIA Reflex: Optimize and Measure Latency in Competitive Games | NVIDIA. Дата обращения: 20 ноября 2020. Архивировано 19 ноября 2020 года.
  3. 1 2 3 Minute Science: Input Lag vs. Response Time - YouTube. Дата обращения: 28 апреля 2022. Архивировано 28 апреля 2022 года.
  4. Factors Affecting PC Monitor Responsiveness | PC Monitors. Дата обращения: 28 апреля 2022. Архивировано 25 апреля 2022 года.
  5. Duck Hunt on an HDTV 2 на YouTube
  6. Game Mode Settings on your Samsung TV | Samsung Australia. Дата обращения: 28 апреля 2022. Архивировано 12 ноября 2020 года.
  7. 1 2 How To Fix Stutter In Games - Frame Rate, Frame Time & RTSS - YouTube. Дата обращения: 29 апреля 2022. Архивировано 29 апреля 2022 года.
  8. 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.
  9. Doom networking component | Doom Wiki | Fandom. Дата обращения: 8 мая 2022. Архивировано 7 июля 2022 года.
  10. Client-Side Prediction and Server Reconciliation - Gabriel Gambetta. Дата обращения: 8 мая 2022. Архивировано 5 мая 2022 года.
  11. Lag compensation - Official TF2 Wiki | Official Team Fortress Wiki. Дата обращения: 8 мая 2022. Архивировано 8 мая 2022 года.
  12. 1 2 Lag Compensation - Gabriel Gambetta. Дата обращения: 8 мая 2022. Архивировано 27 апреля 2022 года.
  13. 1 2 3 4 5 Nvidia Fast Sync Better Than G-Sync and V-Sync? - YouTube. Дата обращения: 29 апреля 2022. Архивировано 25 марта 2022 года.
  14. (Borderless) Windowed Mode Should You Use It? - YouTube. Дата обращения: 29 апреля 2022. Архивировано 29 апреля 2022 года.
  15. 1 2 3 4 NVIDIA Reflex Low Latency - How It Works & Why You Want To Use It на YouTube
  16. James Hague. Stumbling Into the Cold Expanse of Real Programming Архивная копия от 11 ноября 2020 на Wayback Machine. Перевод
  17. Так, игры Disney’s Aladdin и The Lion King выпускались только под защищённый режим 80386.
  18. Unreal’s Rendering Passes — Unreal Art Optimization. Дата обращения: 28 апреля 2022. Архивировано 19 апреля 2022 года.
  19. Multiple-Pass Rendering — Win32 apps | Microsoft Docs. Дата обращения: 28 апреля 2022. Архивировано 28 апреля 2022 года.
  20. How to Fix the Lag in Guitar Hero на YouTube

СсылкиПравить