Что такое input lag
Что такое Input Lag и как он влияет на впечатления от игры
Объясняем и показываем, как устроен Input Lag и почему это важно.
Абрикос Абрикосовый для Skillbox Media
Input Lag — задержка ввода. Время, которое проходит с момента получения команды до отображения того или иного действия на экране. После нажатия кнопки на контроллере электронике требуется время на просчёт сигнала и вывода картинки на дисплей — из-за этого и происходит задержка ввода.
Как устроен Input Lag?
Задержка ввода состоит из обработки сигнала контроллером, компьютером и дисплеем.
Объяснение от NVIDIA
Сценарист и копирайтер. Утверждает, что видел все фильмы и прошёл все игры, но редакция отказывается ему верить.
Для кого важен Input Lag?
Максимально важен для киберспортивных дисциплин — шутеров, файтингов, MOBA. Запаздывание реакции персонажа на команды влияет на соревнования не меньше, чем скорость реакции игрока. Input Lag — один из важнейших параметров в киберспорте наравне с частотой кадров в секунду. Про FPS мы писали ранее в другой статье.
Киберспортсмен Джордан n0thing Гилберт объясняет важность низкого Input Lag
Задержка ввода влияет на регистрацию выстрелов, низкий лаг позволяет делать фликшоты — это техника, при которой игрок в шутере очень резко целится во врага и метко стреляет.
В соревновательных дисциплинах существует понятие Peeker’s Advantage — преимущество подглядывающего. Заглядывающий за угол игрок имеет преимущество перед противником с другой стороны, что влияет на тактику в шутерах. Peeker’s Advantage зависит от задержки ввода.
Как снизить Input Lag?
Input Lag не прописывают в официальных спецификациях, параметр меняется в зависимости от «железа». На любом ПК есть несколько способов снизить лаг:
Чтобы снизить Input Lag на ТВ и консоли, следует отключить все программные средства улучшения видеосигнала — например, искусственное повышение плавности в динамичных сценах. По умолчанию все подобные параметры включены.
На время считывания данных из буфера кадров влияет скорость обновления дисплея. У монитора с высокой скоростью обновления задержка будет меньше.
Стоит использовать соответствующее ЖК-панели разрешение. Например, лаг повышается, если 4К-монитор сжимает изображение до Full HD.
Во многих современных телевизорах есть особый игровой режим. При подключении консоли используйте вход HDMI Game.
Для большей скорости отклика на любой платформе имеет смысл отключить HDR — о том, как устроен высокий динамический диапазон, мы писали в другом материале.
Производители «железа» разрабатывают технологии, специально заточенные под киберспорт. Например, NVIDIA Reflex измеряет и оптимизирует задержки системы в соревновательных играх.
Что такое Input Lag?
В рамках данного обзора, я расскажу вам что такое Input Lag, а так же про связанные с этим особенности.
Читателю стоит знать, что в электронике не существует понятия «мгновенно». Передача сигнала может осуществляться невероятно быстро, но все равно некоторые задержки будут существовать. А вот от того, насколько они большие, зависит то, будут ли они каким-либо образом ощутимы для человека или нет. Об одном из таким терминов, а именно об Input Lag, и пойдет речь далее.
Как может проявляться Input Lag? Допустим, вы смотрите на компьютере некий фильм. При этом аудио подается в колонки через звуковую карту, а видео в монитор через видеокарту. Если разница между задержкой аудио и видео будет достаточно большой, то вы заметите, что аудио запаздывает или наоборот опережает видео. Но, это вариант, когда вы практически не совершаете действий.
Зачем нужен низкий Input Lag? Если же говорить про компьютерные игрушки, то тут важно понимать, что компьютер воспринимает сигналы ввода с клавиатуры, мышки и иных устройств вне привязки к тому, что отображается в мониторе.
Рассмотрим небольшой пример. Допустим, Input Lag составляет порядка 200 мс. Это означает, что картинка в мониторе отображается та, которая была отрендерена (сформирована видеокартой) 200 мс назад. Вы смотрите в экран и видите, что бежит некий абстрактный монстр. Резким движением мышки вы смещаете курсор и усиленно «жмакаете» по левой кнопке мышки. Однако, за эти 0,2 секунды монстр уже сдвинулся в иное место, чего вряд ли бы произошло, если бы задержка была на порядок меньше (например, 20 мс).
Поэтому наиболее частые обсуждения, связанные с низким Input Lag, больше всего происходят в игровых форумах и блогах.
Примечание: Стоит знать, что использование технологии вертикальной синхронизации V-Sync может приводить к увеличению этой задержки (так как картинки отображаются не по мере создания, а с учетом частоты монитора; подробнее смотри в обзоре).
Примечание: Интересный факт для любителей игрушек. Если у вас подвисла картинка в мониторе, то это не всегда означает, что действия клавиш не будут восприниматься игрушкой или программой.
Какими значениями обычно характеризуется Input Lag? Для телевизоров, он может составлять от 100 до 200 мс. В таком диапазоне эта задержка практически незаметна. Основная причина в том, что анимация в фильме никак не зависит от действий человека (фильм же уже был снят) и поэтому чуть раньше начались отображаться картинки или чуть позже не так важно (главное, чтобы рассинхронизации со звуком не было).
Когда же речь заходит о компьютерных видеоиграх, то даже 100 мс могут быть весьма заметны. Причина в том, что все последующие картинки на экране напрямую зависят от действий пользователя. Нормальным же считается значение до 40-50 мс. Если же вы заядлый любитель стрелялок и прочих динамичных игрушек, то значение должно быть порядка 10 мс или меньше (например, 4 мс).
Теперь, вы знаете что такое Input Lag, зачем он нужен и некоторые его особенности.
Что делать, если лагают сетевые игры. Как снизить инпут лаг и задержки сети
Чтобы успешно играть и побеждать в сетевых играх, важно добиться максимальной отзывчивости управления и плавности картинки. Ощущения от игры полностью зависят от нескольких независящих друг от друга факторов. Сюда можно отнести производительность оборудования, задержки системы и ввода на стороне пользователя (т.е. время от нажатия на клавишу мыши до отображения выстрела на экране) и качество сетевого соединения. Чтобы добиться идеального отклика, нужно оптимизировать каждый из этих пунктов.
Как снизить системные задержки (инпут лаг)
Системные задержки — это время, которое проходит от нажатия клавиши до отображения результата на экране. Если максимально упростить, то это инпут лаг. Однако только задержками ввода дело не ограничивается. Системные задержки зависят еще и от особенностей работы компонентов ПК и быстроты монитора.
Используйте проводные клавиатуру и мышь. По проводу подключение всегда будет быстрее и стабильнее. Впрочем, беспроводные геймерские модели тоже есть, но они стоят дороже проводных аналогов.
Выключите обработку картинки (шумоподавление, уплавнялка и т.п.) или переключите режим изображения на игровой. Если вы играете на телевизоре, то это особенно актуально. Но на мониторе тоже может быть переключатель режимов. Например, у MSI есть специальный игровой режим, который называется Zero Latency. Чтобы понять, если такой режим на вашей модели монитора, обратитесь к инструкции или на официальный сайт производителя.
Выставьте максимально возможную частоту обновления дисплея. Некоторые дисплеи могут не поддерживает частоту более 60 Гц при максимальном разрешении, в таком случае стоит опуститься до 1080p. Например, именно так работают консоли PlayStation 5 и Xbox Series X с телевизорами, у которых есть только вход HDMI 2.0. В совместимых играх таким образом можно выставить режим 120 Гц. Кроме того, некоторые мониторы могут работать при повышенной частоте, даже если она официально не поддерживается. К примеру, монитор BenQ GW 2470 может работать при 75 Гц, если выставить кастомный режим изображения в драйверах видеокарты.
Отключите вертикальную синхронизацию в настройках игры. Из-за этого картинка может быть менее приятной, так как будут возникать разрывы кадра — так называемый тиринг. Однако отзывчивость может увеличиться. Обратите внимание, что при наличии у вашего монитора и видеокарты функций VRR, G-Sync или FreeSync разрывов быть не должно.
Включите технологию NVIDIA Reflex. Чтобы снизить задержку на стороне пользователя, стоит включить технологию NVIDIA Reflex, которая поддерживается многими сетевыми играми. Она работает на всех видеокартах GeForce начиная с 900 серии. Кроме того, для нее не нужно специальное оборудование вроде монитора и мышки. Наибольший эффект технология дает на высоких настройках графики. Подробнее о работе технологии мы писали в отдельной статье «Как перестать сливать катки и начать тащить».
Включите режим низкой задержки. Также в панели управления NVIDIA можно включить режим низкой задержки. По своему эффекту он похож на NVIDIA Reflex, но работает только в DirectX 11. Про все настройки панели управления мы писали в гайде «Как настроить видеокарту NVIDIA для игр». У видеокарт AMD есть схожая функция — Radeon Anti-Lag, которую тоже можно включить в настройках дрйвера.
Как снизить сетевые задержки
Другой вид задержек — сетевые. Качество соединения в основном зависит от вашего провайдера. В первую очередь здесь важен такой показатель, как пинг.
Важно! Высокий пинг и нестабильное соединение — разные вещи. Если часть пакетов теряется, то это ощутимо влияет на геймплей. К примеру, вас отбрасывает назад или игровой мир замирает на некоторое время. При плохом пинге, как правило, таких проблем нет, но есть ощутимая задержка в действиях. Грубо говоря, вас будут убивать раньше, чем вы сможете среагировать.
Как проверить пинг
Проверить пинг можно с помощью специализированных сайтов или мобильных приложений. Один из наиболее популярных — speedtest.net. Однако этот инструмент лучше подходит для измерения скорости. Именно пинг лучше проверить штатными средствами операционной системы Windows.
Как настроить сетевой адаптер для снижения пинга
Если у вас проблемы с пингом, то стоит настроить сетевой адаптер. Перейдите в диспетчер устройств и найдите свой сетевой адаптер. Как правило, это Realtek, Intel, Qualcomm, Killer или другой. Также в списке может быть беспроводной Wi-Fi адаптер.
Зайдите в свойства адаптера и перейдите на вкладку «Управление электропитанием». Снимите галочку с «Разрешить отключение устройства для экономии энергии». Далее перейдите в дополнительно и отключите следующие пункты:
Буферы передачи и приема нужно поставить на максимальное значение — 128 и 512 соответственно. Максимальное число очередей RSS должно быть выставлено на доступный максимум. Выгрузка протокола ARP и NS должны быть включены.
Можно настроить и Wi-Fi адаптер, если вы им пользуетесь для игр. Сначала нужно также выключить «Разрешить отключение устройства для экономии энергии» и далее перейти на вкладку «Дополнительно». Здесь нужно также отключить настройки, связанные с энергосбережением. Для «Режима энергосбережения MIMO» выберите «Нет SMPS». Отключите также:
Программы для снижения пинга
В сети можно найти множество программ для снижения пинга. Суть их работы можно свести к выбору оптимального маршрута соединения, благодаря чему и снижается задержка. Одна из популярных программ — ExitLag. Она платная, но есть бесплатный трехдневный период для теста. Чудес от нее ждать не стоит и если у вас уже неплохой пинг, то программа вряд ли существенно его уменьшит. Однако попробовать все же стоит. В настройках программы вам нужно выбрать игру и регион сервера, для которого требуется оптимизация.
Общие советы
Если дело не в провайдере, то кое-что все же можно сделать для уменьшения задержек. Как правило, проблемы с соединением связаны с роутером.
Перейдите на диапазон 5 ГГц. Многие современные роутеры работают в двух диапазонах: 2,4 ГГц и 5 ГГц. Последний — более продвинутый. Он устойчив к помехам и лучше работает в многоквартирных домах, где в каждой квартире по роутеру. Если ваше оборудование поддерживает 5 ГГц, попробуйте переключиться на эту частоту. Обратите внимание, что приемник сигнала тоже должен поддерживать этот стандарт.
Смените канал Wi-Fi. При помощи бесплатной утилиты WifiInfoView можно проверить, насколько загружены разные каналы Wi-Fi в вашем доме. В настройках роутера стоит выбрать наименее загруженный канал.
Обновите прошивку роутера. Стоит также обновить прошивку роутера. Если вы купили новое устройство, то это стоит сделать первым делом. Зайдите на официальный сайт производителя и найдите свежую прошивку для своей модели роутера. Обратите внимание, что нужно точно выяснять модель устройства, включая ревизии. Возможно, наилучшим вариантом будет установить стороннюю прошивку. Если у вашей модели роутера мощное комьюнити, стоит поискать информацию на профильных форумах.
Измените DNS-сервер. Также можно попробовать поменять стандартный DNS-сервер от провайдера на альтернативный от Google. Предпочитаемый сервер — 8.8.8.8, альтернативный — 8.8.4.4.
Перезагрузите роутер. Если возникают какие-либо неполадки с роутером, стоит его перезагрузить. Возможно, после этого проблема уйдет сама собой.
Подключитесь к роутеру по проводу. Если размещение роутера и вашего ПК позволяет подключиться по проводу, то именно так и стоит сделать. Проводное соединение — самое стабильное.
Input lag во время рендеринга и как его побеждать
Привет всем. Многие из вас знакомы с лагом ввода. Это бывает, когда вас в очередной раз убивают в компьютерной игре, и вы кричите: «Ну я же нажал блок/атаку/уворот». Ну а затем джойстик летит в стену. Знакомо? Происходит это потому, что между нажатием клавиш и появлением результата на экране проходит значительное время. Фактически, когда вы смотрите в экран — вы видите прошлое состояние, которое может абсолютно не отражать действительность.
Если вы разрабатываете собственную игру, или вообще занимаетесь рендером, и хотите уменьшить задержки ввода, то крайне советую заглянуть под кат.
Итак, Input lag в любой игре складывается из:
CPU + GPU
Современные GPU — устройства максимально асинхронные. CPU отдает команды видеодрайверу, и идет заниматься своими делами. Драйвер накапливает команды в пачки, и пачками отправляет на видеокарту. Видеокарта рисует, а CPU в это время занимается своими делами. Максимальный FPS, который вы можете получить в этой системе ограничен одним из условий:
1. CPU не успевает отдавать команды видеокарте, потому что видеокарта очень быстро рисует. И нафига вы покупали такую мощную видеокарту?
2. Видеокарта не успевает рисовать то, что дает ей CPU. Теперь CPU халявит…
Для того, чтобы посмотреть, как красиво в паре работает CPU и GPU — есть различные профайлеры. Мы воспользуемся GPUView, который идет в составе Windows Performance Toolkit.
Лог от GPUView может выглядеть как-то так:
Вертикальные синие линии — это VSync. Наваленные горы кубиков — это горы пакетов, которые отправятся на видеокарту, когда та освободится. Штрихованный кубик — это пакет, содержащий переключение буферов. Иными словами — конец кадра. Любой кубик можно выбрать, и видеть, как он постепенно опускается в стопке, и отправляется на видеокарту. Видите на скриншоте кубик с желтой обводкой? Он обрабатывался аж на протяжении 3-х vsync-ов. А целый кадр занимает около 4-х VSync-ов (судя по расстоянию между разными штрихованными кубиками). Между двумя горами пакетов от разных кадров есть маленький зазор. Это то время, пока GPU отдыхал. Этот зазор маленький, и оптимизация на стороне CPU не даст большого выйгрыша.
Но бывают зазоры большие:
Это пример рендера из World of Warcraft. Расстояния между пакетами в очереди просто огромные. Более мощная видеокарта не даст прироста ни одного FPS. Зато если оптимизировать рендер на стороне CPU, то можно получить более чем двукратный прирост FPS на данном GPU.
Чуть более подробно можно почитать тут, а мы пойдем дальше.
Так где же лаг?
Так уж сложилось, что разрыв в производительности между Hi-End и Low-End видеокартами поистине огромен. Поэтому у вас обязательно будут возникать обе ситуации. Но самая грустная ситуация — это когда GPU не справляется. Выглядеть это начинает вот так:
Обратите внимание, сколько времени заняла обработка одного пакета. Кадр занимает 4 VSync-а, а обработка пакета занимает в 4 раза дольше! DirectX (OpenGL ведет себя так же) накапливает данных аж на 3 кадра. Но ведь когда мы кладем в очередь свежий кадр — все предыдущие кадры для нас уже не актуальны, а видеокарта по прежнему будет тратить время на отрисовку. Поэтому наше действие появится на экране спустя аж 3 кадра. Давайте посмотрим, что мы можем сделать.
1. Честное решение. IDXGIDevice1::SetMaximumFrameLatency(1)
Я честно, не представляю зачем копить данных на 3 кадра в буфере. Но MS видимо поняла ошибку, и начиная с DX10.1 у нас появилась возможность задать это количество кадров через специальный метод IDXGIDevice1::SetMaximumFrameLatency. Давайте посмотрим, как нам это поможет:
Ну что же. Стало значительно лучше. Но по прежнему не идеально, т.к. все равно ждем 2 кадра. Еще один недостаток решения — то что оно работает только для DirectX.
2. Трюк с ID3D11Query
Идея заключается в том, что в конце кадра мы устанавливаем D3D11_QUERY_EVENT. В начале следующего кадра — ждем, постоянно проверяя событие, и если оно прошло, то только тогда начинаем отдавать команды на отрисовку, и с наисвежайшими Input данными.
Картина практически идеальная, не находите? Ожидание я реализовал вот так:
Установка эвента тривиальна:
Ну и в сам рендер добавляем вначале ожидание. Затем перед самой отрисовкой собираем свежие Input данные, а перед самым Present-ом устанавливаем евент:
Недостаток костыля метода — работает только с DirectX. Но можно дождаться синхронизации другим оригинальным способом.
3. Воркэраунд через текстуру
Вот что мы делаем. У нас есть механизмы прочитать данные из видеоресурсов. Если мы заставим видеокарту что-то нарисовать, а потом попытаемся забрать, то произойдет автоматическая синхронизация между GPU-CPU. Мы не сможем забрать данные раньше, чем они будут нарисованы. Поэтому вместо установки евента я предлагаю генерить мипы на видеокарте для текстуры 2*2, а вместо ожидания евента — забирать данные из этой текстуры в системную память. В результате подход выглядит так:
Вот так мы ожидаем евент:
а вот так его устанавливаем:
В остальном подход полностью аналогичен предыдущему. Преимущество: работает не только на DirectX но и на OpenGL. Недостаток — маааленький оверхед на генерацию текстуры и передачу данных назад + потенциально потраченное время на «пробуждение» потока шедулером операционной системы.
Про попробовать
Конечно я тут растекался по дереву… но насколько проблема серьезная? Как пощупать это? Я написал специальную демонстрационную программу (требует DirectX11).
Скачать *.exe можно здесь. Для тех, кто боится качать билды неизвестного производителя — исходный код lazarus проекта здесь (также потребуется моя библиотека фреймворк AvalancheProject, которая находится вот тут)
Программа представляет собой такое окно:
Тут рисуется 40*40*40=64000 (кстати каждый кубик — отдельный дравколл). GPU workload трекбар дает нагрузку на GPU (с помощью бесполезного цикла в вершинном шейдере). Просто опускаете с помощью этого трекбара фпс до низкого уровня, скажем 10-20, а потом пробуете правой кнопкой мыши крутить кубики, и переключать методы уменьшения Input лага с помощью радиобаттонов.
Вы только оцените какая огромная разница в скорости отклика. C Query Event комфортно крутить кубик даже при 20 фпс.
Телевизор с низкой входной задержкой (input lag) – как выбрать
Одним из наиболее важных и часто игнорируемых технических параметров телевизора является, так называемый, коэффициент задержки на входе, также известный как input lag. Игроки должны обратить на это особое внимание – именно этот параметр определяет, как быстро они смогут реагировать на изменения игрового мира.
Что такое задержка ввода
Прежде чем мы перейдем к конкретным решениям, стоит объяснить, с чем мы имеем дело. Входная задержка относится к задержке сигнала между экраном телевизора и источником сигнала – например, игровой приставкой. Короче говоря, задержка ввода отвечает за то, как быстро на телевизоре будут отображаться ваши действия с контролером (например, изменение позиции).
Так что, если input lag высок, то в игровом процессе будут появляться задержки, которая повлияют на комфорт вашей игры. В случае статических игр, то есть в стратегических играх или классических ролевых играх, вы все равно можете выжить, но в случае динамичных игр ситуация совершенно иная. Стрелялки, гонки, спортивные игры – даже доля секунды может определить победу или поражение, особенно когда мы соревнуемся в сетевой игре с другими людьми.
Всё это приводит к тому, что телевизор для игроков должен характеризоваться низкой задержкой ввода, чтобы мы могли играть без значительных задержек, которые влияют на нашу производительность.
Какая задержка входа приемлема
Поскольку мы уже знаем, что такое input lag, стоит рассмотреть, какие значения будут приемлемыми. В настоящее время предполагается, что значение задержки входа в 25 мс является пределом – телевизоры с более высокой задержкой не подходят для игр. Разумеется, на вопрос о входном лаге для консоли мы ответим одним способом – чем ниже, тем лучше. Стоит ориентироваться на модели с задержкой менее 20 или даже 15 мс. Такие значения будут незаметны для нас во время игры.
Однако, при покупке телевизора с низкой задержкой на входе возникает одна проблема – производители редко решают указать значение этого параметра в общих технических характеристиках своего оборудования. Всё это означает, что нам придётся «копать интернет» в поисках интересующей нас информации.
Хорошей идеей в таких случаях будет анализ различных телевизионных обзоров и тестов, с точки зрения их полезности в играх. Рецензенты очень часто проверяют, какая задержка наблюдается во время игры, поэтому мы можем выяснить, действительно ли интересующий нас телевизор стоит покупать.
Телевизор с низкой входной задержкой – как выбрать
Если мы хотим, чтобы этот параметр был как можно ниже, нам следует ориентироваться на телевизоры известных производителей. В настоящее время низкие задержки имеют телевизоры Samsung, Sony и Philips. Конечно, многое зависит от конкретной конфигурации, поэтому всегда стоит анализировать упомянутые обзоры.
То же самое относится и к оборудованию менее известных производителей. Вполне можно найти дешёвый телевизор с низкой задержкой на входе, но в большинстве случаев значение этого параметра будет высоким. Проверка того, как устройство работает на практике, позволит вам избежать разочаровывающей покупки.