Назад к блогу

Marathon Input Issues Fix: Архитектура PC-игр в условиях конфликтов с Overlay

Опубликовано 28 февраля 2026 г.
Marathon Input Issues Fix: Архитектура PC-игр в условиях конфликтов с Overlay Создано с помощью ИИ

Каждый разработчик соревновательных мультиплеерных игр знает это чувство, когда идеально выстроенный netcode ломается из-за оверлея Discord. Вы месяцами оптимизируете серверную инфраструктуру для задержки менее 30 мс, но игроки промахиваются, потому что фоновое приложение для стриминга душит поток ввода (input thread).

Этот сценарий сейчас наблюдается в Server Slam шутера Marathon от Bungie. Игроки жалуются на mouse lag и пропуски ввода. Bungie официально подтвердила проблему, указав на сторонние утилиты и оверлеи.

Игроки ищут marathon input issues fix. Временное решение: стримить весь экран вместо окна игры и отключить оверлеи.

Для разработчиков вопрос в архитектуре: почему оверлеи перехватывают ввод и как это предотвратить?

В этом разборе мы изучим обработку ввода в Windows, проблемы frame pacing в OBS и декуплинг потоков ввода.

Причина: Как оверлеи перехватывают Render Pipeline

Приложения вроде OBS внедряют DLL в процесс игры и перехватывают вызовы графического API, например функцию Present в DirectX.

Бутылочное горлышко Swap Chain

Перехват swap chain заставляет движок ждать копирования frame buffer. Кадр, который должен занимать 16.6ms, внезапно занимает 24ms. Так как движки опрашивают WM_MOUSEMOVE в основном потоке перед рендером, задержка рендера задерживает опрос ввода.

Решение: Raw Input API

Используйте Raw Input API (WM_INPUT) в отдельном высокоприоритетном потоке, полностью отделенном от render loop.

Реализация Raw Input на C++ (Win32)

void InitializeRawInput(HWND hwnd) {
    RAWINPUTDEVICE Rid[1];
    Rid[0].usUsagePage = 0x01; 
    Rid[0].usUsage = 0x02; 
    Rid[0].dwFlags = 0;   
    Rid[0].hwndTarget = hwnd;
    RegisterRawInputDevices(Rid, 1, sizeof(Rid[0]));
}

Unreal Engine: Отключение Smoothing

Отключите mouse smoothing в PlayerController, чтобы избежать лагов при колебаниях FPS.

Client Lag и Server Rollback

5 правил надежного ввода

  1. Отделите ввод от рендеринга.
  2. Используйте DXGI Flip Model.
  3. Используйте Hardware Cursor.
  4. Предупреждайте об инъекциях DLL.
  5. Используйте Fixed Timestep Simulation.

Заключение