- Как убрать инпут-лаг в играх в Windows 10?
- Причём тут инпут-лаг?
- Как ограничить частоту кадров?
- Как уменьшить задержку ввода в компьютерных играх
- Что вызывает вклад отставания в игре?
- Метод №1 — полностью отключить вертикальную синхронизацию
- Метод № 2 — Уменьшение задержки ввода без отключения Vsync
- Играем через телевизор. Что такое INPUT LAG и как от него избавиться
- Содержание
- Содержание
- Что такое input lag
- Как измерить input lag
- Порядок измерений:
- Как снизить input lag
- Input lag во время рендеринга и как его побеждать
- CPU + GPU
- Так где же лаг?
- 1. Честное решение. IDXGIDevice1::SetMaximumFrameLatency(1)
- 2. Трюк с ID3D11Query
- 3. Воркэраунд через текстуру
- Про попробовать
Как убрать инпут-лаг в играх в Windows 10?
Если вы почему-то задались вопросом, откуда у вас взялся инпут-лаг, и как от него избавиться, то мы подскажем. Кроме того, расскажем, какие ещё плюсы даст описанный в статье метод избавления от этого нежелательного эффекта.
Не всегда современные игры на наших ПК идут так, как хотелось бы. Но в этот раз мы не столько про ускорение игрушек на компьютере, сколько про комфортную игру в акустическом и термическом смысле.
То есть, допустим, у вас совершенно стандартный монитор с частотой обновления экрана 60 Гц. При этом ваша видеокарта и процессор трудятся совместно, чтобы обсчитывать и текстурировать, скажем 190 кадров в секунду в какой-нибудь хорошо оптимизированной игрушке. Но вы этого не увидите, потому что такое количество кадров не сможет отобразить монитор. Зато услышите, потому что кулеры на видеокарте, процессоре и блоке питания будут реветь, охлаждая эти компоненты. А заодно несладко может достаться и M.2 SSD, который часто располагается прямо под раскалённым видеоадаптером.
Итого получаем шум и излишний нагрев внутренней начинки вашего системного блока. Да и повышенный расход электричества в комплекте. Как этого избежать?
Причём тут инпут-лаг?
Ответ на вопрос очень простой — ограничить количество кадров, задав fps не превышающий 60. Таким образом всё железо может значительно разгрузиться и сказать спасибо длительным сроком службы. Многие, наверняка, слышали про опцию «Вертикальная синхронизация». Она позволяет избежать рваных кадров, синхронизируя количество выдаваемых видеокартой кадров с частотой обновления монитора. Но это порой порождает другую проблему. Тот самый инпут-лаг. Его проще всего заметить в шутерах или некоторых других динамичных играх.
В некоторых играх вы его можете и не приметить. К примеру, в Diablo III я не вижу проблем при активной вертикальной синхронизации. Зато она сразу вылезает в CS:GO. Прицел получает эффект желе.
Но это тоже лечится.
Как ограничить частоту кадров?
Тут всё зависит от игры. В некоторых игрушках это можно сделать прямо в настройках графики, например, в Diablo III.
В Counter Strike: Global Offensive это запросто делается через консоль командой «fps_max 60».
Кроме того, настройка для ограничения частоты кадров во всех играх разом есть в драйверах NVIDIA или AMD в зависимости от вашей видеокарты. Как это сделать мы подробно со скриншотами рассказывали ранее.
Если вам интересны новости мира ИТ также сильно, как нам, подписывайтесь на наш Telegram-канал. Там все материалы появляются максимально оперативно. Или, может быть, вам удобнее «Вконтакте» или Twitter? Мы есть также в Facebook.
Как уменьшить задержку ввода в компьютерных играх
Input Lag — задержка в создании графики, которая затрудняет управление игрой. У нас создается впечатление, что курсор в игре работает с задержкой, а его движения чрезмерно «сглажены». Это называется «плавающим курсором». Посмотрите, как уменьшить задержку ввода в игре, чтобы элементы управления были более отзывчивыми.
Вы заметили, что в некоторых играх курсор мыши работает так же, как на рабочем столе, а в других он чрезмерно «сглажен», имеет своего рода ускорение и производит впечатление, как будто он плавает на экране? Движения не очень точны и трудно точно. При перемещении курсора (или во время поворота камеры в игре) ощущается небольшая задержка. Это то, что входной лаг.
Что вызывает вклад отставания в игре?
Различают два типа задержек. Первый тип — это задержка, вызванная, например, ЖК-телевизором, на которую жалуются люди, которые подключаются к большому экрану. Источником такого типа задержки является плохая спецификация телевизора или просто чрезмерное количество дополнительных функций, которые улучшают изображение (любая функция сглаживания экрана, которая удаляет шум, динамически увеличивая контрасты или искусственно завоевывая гладкость). Решение заключается в отключении всех дополнительных функций в настройках телевизора, которые улучшают отображаемое изображение. Часто мы также находим так называемые «Игровой режим», который автоматически отключает такие вещи — при его активации вы сразу заметите, что задержка намного меньше. Также стоит отметить, что если вы покупаете телевизор или монитор, производитель дает вам «входную задержку», и мы можем проверить ее в спецификации. Это очень хорошо для телевизоров, когда оно составляет менее 20 мс.
Второй вид задержки, который появляется даже на хороших мониторах, — это тот, который вызван вертикальной синхронизацией в играх (VSync), и мы не найдем никакой информации в спецификации продукта. Для отображения изображения на ЖК-экранах требуется вертикальная синхронизация. Благодаря этому нет эффекта «разрыва экрана» и отображения различных типов артефактов. Количество кадров в секунду в игре также ограничено чаще всего 60 FPS, то есть число, совместимое с частотой обновления экрана (большинство ЖК-мониторов имеют частоту обновления 60 Гц).
Однако все это происходит с определенной стоимостью — вертикальная синхронизация вводит задержку ввода или задержку управления. Движения курсора мыши кажутся слишком текучими, часто вы просто чувствуете задержку между тем, что вы делаете с мышью, и тем, что отображается на экране. Движения мышки создают впечатление «перемещение пальцем по воде». Некоторые называют этот эффект плавающим курсором. Конечно, задержка достаточно низкая, что мы не заметим ее визуально — но это ощущается во время игры, особенно в названиях, где время реакции и точность подсчитываются. Этот тип задержки может быть значительно уменьшен настройками на видеокарте или самой игре.
Метод №1 — полностью отключить вертикальную синхронизацию
Вы хотите быстро устранить задержку ввода? Самый простой способ — просто полностью отключить вертикальную синхронизацию в игре. Это лучший и самый простой способ полностью устранить задержку.
К сожалению, это приведет к так называемому разрывая экран, то есть упомянутый «разрыв экрана». Как раз во время игры мы замечаем, что есть несколько «баров» кадров, которые установлены в плохом положении по сравнению с остальной частью изображения. Вы можете увидеть его в приведенной выше анимации.
VSync обычно можно отключить в играх — все, что вам нужно сделать, это ввести графические параметры во время игры, а затем искать опции под названием «Vsync», «Vertical Synchronization» или «Vertical Synchronization» (если игра на польском языке). Отмена выбора этой опции и подтверждение настроек приведет к минимальной задержке.
Если в игре нет такой опции, VSync также можно отключить с помощью настроек видеокарты. Для видеокарт NVIDIA щелкните правой кнопкой мыши на рабочем столе и выберите «Панель управления NVIDIA». Затем выберите «Управление настройками 3D» в боковом меню.
Если вы хотите отключить вертикальную синхронизацию по всему миру, то есть для всех игр сразу, на вкладке «Глобальные настройки» найдите поле «Вертикальная синхронизация» и установите для него «Отключить».
В свою очередь, если вы хотите отключить VSync только для выбранной игры, на правой стороне выберите вкладку «Настройки программы», а затем выберите свою игру из списка. После выбора игры появятся графические параметры, которые можно отредактировать. Найдите в списке «Вертикальная синхронизация» и установите ее значение «Отключить».
Аналогично, вы можете сделать это в видеокартах Radeon. Щелкните правой кнопкой мыши на рабочем столе и выберите «Центр управления AMD». Появится окно настроек Radeon. В правом верхнем углу нажмите «Настройки» и выберите опцию для отображения дополнительных настроек.
Слева выберите вкладку «Игры и 3D-приложения». Если вы хотите отключить вертикальную синхронизацию для всех игр одновременно, на вкладке «Настройки системы» найдите параметр «Подождите, пока не вертетесь» и установите для него значение «Всегда выключено».
Если у вас есть драйверы с программным обеспечением Radeon Crimson, вы можете сделать то же самое. Мы открываем панель Radeon Crimson, а затем переходим на вкладку «Gaming». Здесь будут показаны признанные игры. Выберите игру в списке, для которого вы хотите отключить Vsync.
Там будут подробные графические параметры игры. Найдите вариант с именем «Ожидание вертикальной синхронизации». Нажмите на него и выберите «Выкл.» В раскрывающемся меню. Сохраните изменения. Vsync теперь будет отключен для данной игры. Если вы хотите отключить Vsync для всех игр, в разделе «Игры» вы найдете глобальные параметры, где вы можете сделать то же самое для каждого заголовка.
Метод № 2 — Уменьшение задержки ввода без отключения Vsync
Существует способ уменьшения задержки без отключения вертикальной синхронизации. Все, что вам нужно сделать, это ограничить количество кадров в секунду до 58 или другое значение, ниже которого вы никогда не опустите. Если мы сохраняем 60 FPS в играх, достаточно ограничить FPS до 58. Однако, если FPS прыгает между 45 и 60, стоит ограничить его до 45, то есть до наименьшего значения, которое мы получаем. Это эффективно уменьшает эту задержку и делает игру намного более отзывчивой. Более того, мы можем оставить вертикальную синхронизацию, поэтому мы избежим эффекта нарушения работы экрана. Итак, как вы ограничиваете FPS в игре до 58 или меньше?
Если у нас есть карта NVIDIA, мы можем использовать программу Инспектор NVIDIA. Запустите NVIDIA Inspector и нажмите кнопку «Изменить игровые профили» (рядом с полем «Версия драйвера»). Появится новое окно для подробного редактирования профиля.
Выберите игру, для которой вы хотите изменить профиль в раскрывающемся меню. Загрузите профиль, затем найдите поле под названием «Ограничитель частоты кадров». Установите здесь 58 FPS из выпадающего списка. Если вы не можете постоянно поддерживать 58 FPS, вы можете ограничить FPS меньшим значением.
Затем сохраните изменения с помощью кнопки «Применить изменения» в верхнем правом углу. Без сохранения изменений они не будут применяться!
В случае AMD мы можем использовать программу, называемую RadeonPRO. Как и инспектор NVIDIA, RadeonPRO позволяет более продвинутое редактирование профиля. Загрузите и запустите программу, а затем нажмите значок «плюс» на верхней панели инструментов, чтобы добавить игру для редактирования.
Если у вас есть панель управления Radeon Crimson, вам не нужно устанавливать RadeonPRO. Последняя панель управления для карт AMD имеет встроенную опцию ограничения FPS. Просто запустите его и перейдите на вкладку «Игра», а затем выберите игру, в которой вы хотите ограничить FPS.
Там будут подробные варианты. Нас это интересует эта опция, которая отображается внизу, вместе с ползунком или «Контроль целевого кадра». Активируйте эту опцию, а затем используйте ползунок, чтобы установить значение FPS на 58 или любое другое, ниже которого вы никогда не опустите.
С этого момента игра не сможет достичь более 58 FPS или любого другого значения, которое вы выберете. На практике мы этого не почувствуем — 58 FPS все еще невероятно гладкий образ и ничего не отличается от легендарного 60 FPS, который каждый игрок хочет получить. Это окажет положительное влияние на оперативность игры. Входная отставание имеет меньшее значение, когда FPS ограничено фиксированным числом. Более того, благодаря этому методу нам не нужно отключать вертикальную синхронизацию, поэтому мы не будем получать эффект «срыва экрана». Мы можем выполнить эту операцию для любой игры, в которой курсор «плавает» — сенсационный работает, например, для игры Skyrim, в которой по умолчанию курсор работает очень плохо и искусственно
Играем через телевизор. Что такое INPUT LAG и как от него избавиться
Содержание
Содержание
Успех виртуальных баталий напрямую зависит от скорости реакции игрока. Но не менее важно, чтобы и информация выводилась с минимальной задержкой. Плохое интернет-соединение и долгая обработка сигнала на мониторе, телевизоре — все это мешает классной игре. Последнее явление получило название INPUT LAG.
Высокая задержка ввода — неприятная проблема. После замены телевизора или в гостях у друзей в глаза бросается запаздывание, с которым персонаж на экране реагирует на команды с геймпада. К небольшим тормозам можно привыкнуть, но слишком большая задержка значительно портит впечатления от игрового процесса.
Что такое input lag
Любому устройству вывода, будь то монитор или телевизор, требуется время на обработатку поступающегоий видеосигнала. Разница в том, что электроника современных игровых мониторов адаптирована для трансляции с минимальной задержкой на входе. Это достигается путем транслирования исходного сигнала, получаемого с видеокарты.
Архитектура телевизоров выполнена намного сложнее. Перед тем, как попасть на матрицу, сигнал подвергается значительной коррекции центральным процессором ТВ. В некоторых сценариях обработка занимает до 150 мс. Такая разница отчетливо заметна пользователю любого уровня. Не обязательно быть профессиональным геймером, чтобы уловить лаг в 1/7 секунды.
Таким образом, INPUT LAG — это время с момента получения сигнала устройством вывода до его отображения на экране.
Наиболее важное влияние время задержки оказывает на динамичные игры. Фанатам шутеров и файтингов критически важен низкий инпут лаг. От него напрямую зависит успех виртуальных баталий. В on-line дуэли выигрывает тот, кто первый увидит врага. И разница даже 50 мс окажется решающей.
Для любителей размеренных жанров — стратегий, RPG — низкое время задержки менее критично, но лишним тоже не будет.
Какую панель можно считать медленной? Однозначного ответа на этот вопрос не существует. Там, где профессиональный геймер заметит долгую задержку, обычный пользователь будет играть с комфортом. Условной границей принято считать отметку 50 мс. Модели с большим значением лучше избегать.
При выборе монитора этот параметр часто путают со временем отклика матрицы, которое показывает, сколько времени требуется пикселю, чтобы изменить своей цвет. Для современных ЖК-панелей значение чаще всего не превышает 12 мс.
Инпут лаг редко прописывают в официальных спецификациях по ряду причин. Во-первых, точно измерить параметр достаточно сложно. В интернете много независимых ресурсов, занимающихся этим вопросом. Значения, полученные в разных источниках для одной модели, часто различаются. Во-вторых, инпут лаг зависит от режима и настроек телевизора. Указание только основных вариантов займет значительную часть в спецификациях модели.
Подробная база с телевизорами и мониторами представлена на https://displaylag.com/display-database/. Ресурс позволяет быстро найти интересующую модель с помощью фильтров и сравнить ее параметры с другими вариантами. Единственный недостаток — приведено наименьшее значение задержки без указания используемых настроек. Ресурс https://www.rtings.com/tv/tools/table/ позволит сравнить инпут лаг в разных режимах.
Как измерить input lag
Техника измерения сводится к сравнению тестируемого устройства с эталонным, время обработки сигнала на котором условно равно нулю. Наиболее подходящим вариантом для этой задачи является монитор на ЭЛТ, подключенный без использования переходников к разъему DVI.
В случае отсутствия, подойдет любой монитор или экран ноутбука. Но в таком случае результат окажется ниже реального. Фактически, вы не получите достоверное значение инпут лага, а сравните устройства по этому параметру.
Порядок измерений:
В случае сравнения с монитором на ЭЛТ, результатом тестирования станет точное значение инпут лага. Иначе: Инпут лаг = Разница в показаниях секундомера + Инпут лаг устройства с меньшим показанием секундомера.
Как снизить input lag
Если в системе замечена высокая задержка, и управление ощущается «желейным», не надо сразу начинать поиски нового телевизора или монитора. Первым делом стоит попытаться снизить инпут лаг «подручными» способами. Их можно разделить на две категории, применять которые необходимо комплексно.
В первом случае комплекс мер выглядит следующим образом:
В телевизоре основная задача — отключить все программные средства улучшения видеосигнала. Такие как искусственное повышение плавности в динамичных сценах, улучшение цвета и т. д. Набор параметров у каждого производителя свой. Стоит помнить, что из коробки такие «улучшалки» чаще всего включены. Универсальное средство — использование игрового режима, который есть в любой современной модели ТВ.
Используйте разрешение, соответствующее ЖК-панели. Растягивание Full-HD сигнала до 4К или сжатие 4К в Full-HD заметно повышают инпут лаг.
При подключении консоли через ресивер на последнем используйте вход HDMI, помеченный надписью Game.
Предпринятые меры если не устранят Input Lag полностью, то многократно снизят его до приемлемых значений, которые позволят играть в самые динамичные проекты.
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 фпс.