Что делает движок, когда вы делаете прыжок в игре? Часть 1

Валерий Линьков разбирает игры под капотом: от обработки ввода до готового кадра на экране

Что делает движок, когда вы делаете прыжок в игре? Часть 1

Кажется, всё просто: нажал пробел — подпрыгнул. На практике: за примерно 16 миллисекунд (при 60 FPS) движок успевает обработать ввод, пересчитать физику, обновить анимации, собрать сцену и отрендерить кадр.

Это первая часть статьи про геймдев и как устроены игры под капотом. Здесь мы разберём, что происходит внутри игрового движка в момент обычного действия. Возьмём прыжок как простой пример и по нему пройдём весь путь: от клавиатуры до готового кадра на экране.

Меня зовут Валерий Линьков. Я проектирую облачную инфраструктуру и системы безопасности. Также, я являюсь основателем Монтировки — независимой студии разработки игр. Мой архитектурный подход к работе помогает проектировать игры на движке Unity так, чтобы игра была максимально технологически целостна.

Вопрос, который развернём: как это вообще укладывается в миллисекунды — и почему иногда не укладывается

Как устроен игровой движок: что происходит внутри, пока вы играете

Игровой цикл — это базовая структура, которая непрерывно выполняется, пока запущена игра. Он определяет порядок обработки ввода, обновления состояния мира и отрисовки. Пока цикл работает — вы играете, но если цикл остановится, игра вылетит и вместо игры будет код ошибки.

Классическая схема:

Input → Update → Physics → Render → Repeat

Этапы цикла

  • Input (он же ввод). Система собирает данные от устройств ввода: клавиатуры, мыши, геймпада.
  • Update (оно же обновление). На этом этапе прописывается вся логика происходящая внутри игры (кто куда пошёл, что сделал и какая логика будет применена). Тут же обновляется состояние игры:
    — поведение NPC
    — игровые правила
    — таймеры и события
  • Physics (физика). Тут прописывается логика самого мира и его поведения. Если просто, нужно понять где будет главный герой: на Луне, Земле или Марсе. Ну и конечно, порой бывают разные “игровые условности”, где например Бэтмен не может упасть и всегда приземляется на ноги после полёта. На этом этапе рассчитываются:
    — движение объектов
    — столкновения
    — силы (гравитация, импульсы)
  • Render (она же отрисовка). На этом этапе формируется и выводится кадр на экран.

Этот цикл повторяется каждую миллисекунду в игре. Движок отслеживает какие кнопки жмёт игрок, просчитывает движение персонажа по экрану, продумывает физику поведения всех окружающих объектов и показывает это игроку. Каждую миллисекунду… Это не просто! Но нужно понять про то как считать время. 

Как устроен игровой движок: что происходит внутри, пока вы играете

FPS и Tick Rate

Важно различать:

  • FPS (Frames Per Second) — частота отрисовки кадров
  • Tick Rate — частота обновления логики и физики

Они могут быть независимыми. Например:

  • 120 FPS (плавная картинка)
  • 60 ticks/sec (обновление логики)

Связывание логики с FPS может приводить к нестабильному поведению игры на разных системах. Связь между ними идёт через свойство в реальной жизни — через время, а не напрямую друг через друга.

Есть два параллельных процесса:

Tick (логика/физика) — обновляет состояние мира. Логика отвечает на вопрос “Что происходит в мире?”

Frame (кадр) — показывает это состояние игроку. Рендер отвечает на вопрос “Как это сейчас выглядит?”

Допустим:

Tick Rate = 60 Гц, значит обновление каждые 16.67 мс

FPS = 120, значит кадр каждые 8.33 мс

Что происходит:

  • за 1 тик отрисовывается 2 кадра
  • логика обновилась, а вслед состояние мира изменилось
  • между тиками рендер рисует одно и то же состояние, но может:
    — интерполировать позиции
    — сглаживать движение

Визуально:

FPS и Tick Rate

Вертикальные линии — обновление логики, короткие — отрисовка. 

Если логика зависит от FPS:

  • на 60 FPS объект движется “нормально”
  • на 120 FPS — в 2 раза быстрее
  • на 30 FPS — в 2 раза медленнее

Причина — шаг времени привязан к кадру. Если вы не ставите ограничения по кадрам, получится, что у каждого игрока в зависимости от мощности ПК будет разная скорость игры.

Правильный подход базируется на двух правилах:

  1. Логика использует: либо фиксированный шаг (fixed timestep), либо deltaTime (время между кадрами)
  2. Рендер просто отображает текущее (или слегка предсказанное) состояние. 

Коротко, резюмируя о том что на что влияет:

Tick Rate влияет на:

  • точность физики
  • стабильность симуляции
  • сетевую синхронизацию

FPS влияет на:

  • визуальную плавность
  • отзывчивость интерфейса

Пример проблем с взаимосвязью FPS и Tick Rate

FPS и Tick Rate

Fixed timestep vs Variable timestep

Fixed timestep (фиксированный шаг):

  • логика обновляется через равные интервалы времени
  • обеспечивает предсказуемость и стабильность
  • требует интерполяции при отрисовке

Variable timestep (переменный шаг):

  • логика обновляется с учётом прошедшего времени (deltaTime)
  • проще реализация
  • возможны нестабильности в физике

Интересный факт

В Dark Souls логика и физика были привязаны к 30 FPS. При увеличении частоты кадров поведение игры нарушалось, поскольку временные расчёты зависели от количества кадров.

Fixed timestep vs Variable timestep

Обработка ввода (Input Handling)

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

Базовый pipeline упрощённо:

Device → OS → Engine → Input Queue → Game Logic

Что происходит по шагам

  1. Устройство (Device). Клавиатура, мышь или геймпад фиксируют нажатие. У каждого устройства есть своя частота опроса (polling rate), например 125–1000 Гц.
  2. Операционная система (OS). ОС принимает сигнал от устройства, нормализует его и передаёт приложению через API. На этом этапе уже может появиться небольшая задержка.
  3. Движок (Engine). Движок получает события от ОС, преобразует их во внутренний формат и раскладывает по системам (input system, UI, gameplay). Данный пример из Unity, но другие движки работают аналогично.
  4. Очередь событий (Input Queue). События редко обрабатываются мгновенно. Чаще они попадают в очередь. Нажатия сохраняются, обрабатываются в следующем тике, возможна сортировка или фильтрация. Всё это делает поведение предсказуемым, но добавляет задержку.
  5. Игровая логика (Game Logic). Только здесь ввод превращается в действие (прыжок, атаку или движение). Важно: действие происходит не в момент нажатия, а в момент обработки логикой.

Input buffering (буферизация ввода)

Это механизм, при котором ввод сохраняется на короткое время, даже если игра прямо сейчас не может его выполнить. Пример: “Игрок нажал “атака” во время проигрывающейся анимации. Игра не может прервать текущую анимацию, но запоминает ввод и выполняет его сразу после завершения

Без буферизации:

  • игра требует идеального тайминга
  • часть нажатий “теряется”
  • управление ощущается “жёстким” и “неповоротливым”

С буферизацией:

  • управление становится более отзывчивым
  • допускаются небольшие ошибки по таймингу

Но есть побочный эффект — ощущение задержки.

Полезный блок со скидкой

Если после разбора игрового движка стало понятно, что без базы программирования тут никуда, можно начать с более фундаментальных направлений: Python, фронтенд, бэкенд или тестирование. Это не курсы по геймдеву, но они помогают прокачать логику, работу с кодом, отладку и понимание архитектуры.

Для старта держите промокод Практикума на любой платный курс: KOD (можно просто нажать). Его можно просто нажать и применить при покупке — он даст скидку и поможет сэкономить на обучении.

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

Input lag — откуда берётся задержка

Задержка ввода складывается из нескольких этапов:

  • устройство (polling)
  • обработка в ОС
  • очередь в движке
  • ожидание следующего тика
  • рендер кадра
  • вывод на экран

Даже при хороших условиях это может быть 30–100 мс.

Практический пример

В c используется input buffering. Если нажать кнопку чуть раньше нужного момента, действие всё равно выполнится, но с задержкой относительно нажатия. Это может восприниматься как “подвисание” управления, хотя на самом деле система старается помочь игроку.

Input lag — откуда берётся задержка

Важный баланс

При проектировании ввода приходится балансировать между отзывчивостью (минимальная задержка) и  надёжностью (ввод не теряется). Если система слишком жёсткая, у игрока будет фрустрация, а если слишком мягкая — ощущение “вязкости”.

Обработка ввода — это не мгновенное событие, а конвейер с буферизацией и задержками. Понимание этого важно при разработке механик, где критичны тайминги (экшены, файтинги, платформеры).

Мини-совет для инди-студий и малых разработчиков. Делегируйте весь ввод на движок. Не пишите свои собственные системы ввода: в Unity такие механики обычно собирают через встроенные инструменты движка и код на C#. Есть готовы ассеты, есть работа с уже установленными базовыми вещами в движке. Всё это нужно чтобы сделать процесс разработки дешевле, а не хуже.

Игровая логика

Игровая логика — это слой, где принимаются решения: что вообще можно делать в текущий момент и как мир должен реагировать на действия игрока.

Базовый принцип

Любое действие в игре — это не просто реакция на кнопку, а результат проверок. Например, нужно понять можно ли игроку прыгать. Игрок нажал кнопку. Игра не спрашивает нажата ли кнопка, но она проверяет:

  • персонаж стоит на земле
  • не находится ли он в другой анимации (например, атака)
  • не заблокировано ли управление (стан, катсцена и т.д.)

Только если все условия выполняются — действие разрешается.

FSM (Finite State Machine)

Чаще всего такие проверки реализуются через конечные автоматы состояний (FSM).

Простейший пример для персонажа. У него есть несколько состояний:

Idle → Run → Jump → Fall → Land

Эти состояния сообщают что делает персонаж:

  • Idle — стоит
  • Run — бежит
  • Jump — в прыжке
  • Fall — падает
  • Land — приземляется

Каждое состояние задаёт доступные действия и определяет, куда можно перейти дальше.

Пример с прыжком. Условие “прыжок”:

  • разрешён из: Idle, Run
  • запрещён из: Jump, Fall, Attack

Если игрок нажимает кнопку в состоянии Fall — логика просто игнорирует ввод. То есть, у персонажа нет двойного прыжка (и тройного, и четверного…).

Таким образом, FSM даёт:

  • предсказуемость поведения
  • контроль над переходами
  • удобство отладки

Но есть и минус:

  • чем больше состояний — тем сложнее система
  • легко получить “запутанный клубок” переходов

Более того, в современных играх это уже не просто FSM, а комбинация:

  • иерархических state machine
  • behaviour tree (для AI)
  • анимационных state machine
  • систем приоритетов

Один персонаж может одновременно находиться в нескольких “слоях” состояний:

  • движение
  • бой
  • взаимодействие с окружением

Игровой пример

В The Witcher 3: Wild Hunt значительная часть логики построена на состояниях. Иногда это проявляется так:

  • игрок нажимает действие
  • а персонаж не реагирует

Например, Геральт выпил несколько элексиров и получил интоксикацию, а игрок пытается выпить ещё немного элексира. Геральт не будет это делать, чтобы не погибнуть. Причина не в баге, а в том, что:

  • текущее состояние не допускает это действие
  • или переход временно заблокирован

С точки зрения системы всё работает корректно — просто ожидания игрока не совпали с логикой.

FSM (Finite State Machine)

Игровая логика — это система правил и состояний, которая:

  • фильтрует ввод
  • определяет допустимые действия
  • управляет переходами между состояниями

FSM — один из базовых инструментов, который позволяет держать это поведение под контролем, пока проект не вырастает до размеров, где без дополнительных абстракций уже не обойтись.

Физика (Physics)

Физика в игре отвечает за то, как объекты двигаются и взаимодействуют. Это не обязательно реализм, а скорее стабильная и предсказуемая симуляция, которая выглядит правдоподобно.

Упрощённо процесс выглядит так:

Apply Forces → Integrate Motion → Collision Detection → Resolve Collisions

Этапы

  1. Apply Forces (применение сил). К объектам применяются силы (чаще всего векторные):
    — гравитация
    — импульсы (прыжок, толчок)
    — внешние воздействия
  2. Integrate Motion (интеграция движения). Интеграция делается каждый тик (fixed timestep). На основе сил пересчитываются:
    — скорость
    — позиция
  3. Collision Detection (обнаружение столкновений). Разбивается на два этапа:
    Broad phase — быстрый грубый фильтр: отсеивает пары объектов, которые точно не сталкиваются; обычно через bounding box / spatial partitioning
    Narrow phase — точная проверка: вычисляет реальное пересечение; определяет точки контакта
  4. Resolve Collisions (разрешение столкновений). Если столкновение есть:
    — корректируется позиция
    — меняется скорость (отскок, скольжение)
    — применяются ограничения (например, “стоим на земле”)

Что происходит при прыжке

  1. Игрок нажимает кнопку
  2. Логика игры разрешает действие
  3. К персонажу применяется импульс вверх (чаще всего вектор)

Дальше каждый тик:

  • применяется гравитация (ускорение вниз)
  • обновляется скорость и позиция
  • проверяется столкновение с землёй

Пока нет контакта с землей, объект находится в состоянии Jump/Fall. Когда контакт с землей произведён, объект переходит в состояние Land (например).

Почему физика почти всегда фиксированная

Физика чувствительна к шагу времени. Если timestep меняется:

  • объекты могут проходить сквозь стены
  • поведение становится нестабильным
  • симуляция расходится между машинами

Поэтому физику обычно считают с фиксированным шагом (например, 60 Гц), независимо от FPS.

Игровая физика — это компромисс:

  • не всегда точные формы (часто капсулы, боксы)
  • упрощённые модели трения и массы
  • ограничения на скорость и ускорение

Цель физики в играх — не академическая точность, а:

  • стабильность
  • производительность
  • управляемость

Практический эффект

В Half-Life 2 (движок Source) физика стала частью геймплея:

  • объекты имеют массу и инерцию
  • их можно использовать для решения задач
  • взаимодействие с окружением — ключевая механика

Это был переход от “декораций” к системному миру, где физика влияет на игровой процесс.

Физика (Physics)

Анимация

Анимация отвечает за то, как именно выглядит движение, которое уже решила игровая логика и рассчитала физика. Если логика говорит “персонаж прыгает”, а физика — “он движется вверх”, то анимация делает это визуально убедительным.

Упрощённо, процесс состоит из этапов:

State → Animation Selection → Blending → Pose → Render

Этапы

  1. State (состояние). Анимация привязана к состояниям из логики (Idle, Run, Jump, Fall и т.д.). Состояние определяет, какой набор анимаций доступен.
  2. 2. Animation Selection (выбор анимации). Система выбирает нужный клип (прыжок с места, прыжок в движении, падение и т.д.).
  3. Blending (смешивание). Ключевой момент: анимации редко переключаются резко. Вместо этого они смешиваются (blend) между текущей и новой анимацией с учётом параметров (скорость, направление).
  4. Pose (поза скелета). Результат смешивания — итоговая поза. Положение костей (skeleton) и трансформации суставов. В случае, если у объекта нет костей (плоская анимация) — поза возвращается в начальную позицию (обычно, Idle).
  5. Render (отрисовка). Скелет применяется к 3D-модели (skinning), и персонаж отображается на экране.

Blend Trees (деревья смешивания)

Это механизм, который управляет тем, как именно смешиваются анимации. Пример:

  • параметр: скорость движения
  • параметр: направление

В зависимости от них система выбирает и смешивает:

  • стоим и жмём прыжок — прыжок вверх
  • бежим и прыгаем — прыжок вперёд

То есть не одна анимация, а континуум состояний между ними.

Без blending резкое переключение с бега на прыжок выглядит неестественно. А с blending движение плавно переходит в прыжок, сохраняется инерция, а тело “подхватывает” предыдущее состояние

Анимация — это процесс, где нужно:

  • синхронизировать с физикой
  • учитывать состояние логики
  • избегать “разъезда” ног и поверхности (foot sliding)
  • управлять переходами (transition rules)

Чем больше анимаций — тем сложнее система. И дороже.

Анимация — это слой, который:

  • превращает состояние в движение
  • сглаживает переходы между действиями
  • делает поведение визуально правдоподобным

И чем сложнее система анимации, тем сильнее она влияет не только на внешний вид, но и на ощущение управления.

Практический эффект

В Red Dead Redemption 2 используется огромное количество анимаций (около 300 000 анимаций) и сложные blend-системы:

  • движения выглядят максимально естественно
  • переходы почти незаметны

Но есть побочный эффект:

  • действия имеют “инерцию”
  • управление ощущается более тяжёлым
  • реакции не мгновенные

Это осознанный компромисс между:

  • реализмом
  • отзывчивостью

Blend Trees (деревья смешивания)

Рендеринг (визуализация)

Рендеринг — это этап, на котором состояние игрового мира превращается в изображение на экране.

Упрощённая схема:

CPU → Scene Setup → GPU Pipeline → Frame

Роли CPU и GPU

CPU (процессор) собирает сцену, решает, какие объекты нужно рисовать (culling) и отправляет команды GPU. GPU (видеокарта) обрабатывает геометрию, рассчитывает освещение, применяет текстуры, формирует итоговый кадр.

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

Упрощённая схема рендеринга

Vertices → Transform → Rasterization → Fragment Shader → Framebuffer

Этапы

  1. Геометрия (Vertices). Модели состоят из вершин, объединённых в треугольники.
  2. Transform (преобразования). Вершины переводятся из локальных координат в мировые, а затем в координаты камеры.
  3. Rasterization (растеризация). 3D-треугольники превращаются в 2D-пиксели (фрагменты).
  4. Fragment Shader (фрагментный шейдер). Шейдеры — это небольшие программы, исполняемые видеокартой (GPU), которые определяют, как именно будет отрисован каждый пиксель, вершина или текстура на экране. Для каждого пикселя рассчитывается цвет, освещение, текстуры и  материалы
  5. Framebuffer (буферизация). Готовый кадр отправляется в буфер обмена память внутри видеокарты и оттуда отправляется на экран.

После базовой отрисовки добавляются тени, отражения, глобальное освещение и постобработка:

  • bloom (эффект компьютерной графики, симулирующий яркое свечение вокруг объектов);
  • motion blur (размытие изображения при повороте камеры, воспроизведении сцен движения или быстро движущихся объектов);
  • depth of field (или глубина резко изображаемого пространства (ГРИП) это зона на снимке (расстояние между ближайшим и самым дальним объектами), в пределах которой объекты отображаются чёткими и резкими). 

Почему рендеринг дорогой

Основные затраты:

  • количество объектов (draw calls)
  • сложность шейдеров
  • число источников света
  • разрешение экрана

GPU обрабатывает миллионы пикселей каждый кадр — и делает это десятки раз в секунду. Отсюда и цена расчётов.

Практический эффект

В Cyberpunk 2077 значительная часть визуального качества достигается не за счёт сложной геометрии, а благодаря продвинутому освещению, отражениям и постобработке.

Это была одна из первых игр, где применялась трассировка лучей, но за счёт того что технология была новой — она была плохо адаптирована к консолям.

Даже относительно простые модели могут выглядеть реалистично при правильном освещении.

Роли CPU и GPU

Звук и эффекты

Звук в игре — это система, которая синхронизируется с логикой, учитывает пространство и формирует восприятие происходящего.

Упрощённый pipeline

Event → Audio System → Processing → Output

Этапы

  1. Event (событие). Звук почти всегда запускается событием (прыжок, выстрел, шаг, столкновение). Событие приходит из игровой логики или анимации.
  2. Audio System (аудиосистема). Движок (например, Unity или специализированные middleware-сервис) решает какой звук воспроизвести с какими параметрами в какой точке пространства
  3. Processing (обработка). На этом этапе звук модифицируется:
    3D-позиционирование (где источник относительно игрока и на каком расстоянии)
    Spatial audio. Направление звука (слева/справа/сзади). Нужен для эффекта присутствия
    Эффекты окружения. Реверберация (эхо), окклюзия (приглушение через стены) и т.п.
  4. Output (вывод). Финальный микс отправляется в наушники, на колонки или в любое другое средство воспроизведения звука с учётом всех наложенных эффектов.

Что происходит при прыжке:

  1. Логика фиксирует событие
  2. Генерируется триггер звука
  3. Аудиосистема:
    — выбирает нужный клип (вариации, чтобы не повторялся)
    — размещает его в 3D-пространстве
  4. Применяются эффекты (если нужно)
  5. Звук воспроизводится

Почему важен 3D звук

Без пространственного звука всё звучит “плоско” и из одной точки. Становится сложно определить направление источника. С 3D звуком можно ориентироваться на слух, усиливается погружение (даже если игра 2D) и появляется геймплейная ценность (например, шаги за спиной).

Однако, есть свои сложности. Синхронизация с анимацией — один из сложнейших этапов. Звук шага должен совпасть с касанием земли, а шаг может быть недовыполнен или земля может быть не ровной.

На этапе звукорежиссуры важно управлять приоритетами. Важно ответить себе на вопрос “Что в игре ключевая механика?”. Это может быть стрельба, окружение, поведение главного героя, психологизм процесса или звуки ударов покрышек. Этот процесс может влиять на производительность из-за огромного числа источников звука одновременно. Ну и конечно влиять на псизику. Никто не любит шквал звуков.

Хорошо реализованный аудио-движок не только усиливает атмосферу, но и передаёт информацию, которую игрок может использовать.

Практический эффект

В Battlefield V звук учитывает окружение:

  • стены и объекты влияют на распространение
  • выстрелы могут глушиться или отражаться
  • меняется восприятие расстояния и направления

Это делает звук не просто эффектом, а частью игрового процесса.

Звук и эффекты

Многопоточность

Думаю, к этому моменту вы поняли сколько задач решается во время одного прыжка. Многопоточность в играх — это попытка делать несколько вещей одновременно: считать физику, готовить кадр, подгружать ресурсы.

Упрощённая схема

Main Thread → Job System → Worker Threads

                ↘ Render Thread

Какие потоки обычно есть

  1. Main Thread (главный поток). Координирует всё (игровой цикл, логику, постановку задач другим потокам). Часто именно он становится узким местом архитектуры игры.
  2. Render Thread (рендер-поток). Готовит команды для GPU. Этот поток занимается сбором draw calls (задач отрисовки) и настройкой состояний рендера. Он работает параллельно с логикой, но синхронизируется по кадрам.
  3. Physics Thread (физика). Считает симуляцию столкновений, движения объектов, а также все силы, оказываемые на объекты. Обычно работает с фиксированным timestep и требует аккуратной синхронизации с логикой.
  4. Streaming / IO Threads. Отвечают за подгрузку текстур, чтение данных с диска и декомпрессию ресурсов игры. Без них были бы постоянные фризы при загрузке.
  5. Worker Threads (job system). Пул потоков для мелких задач (анимация, AI-врагов, подготовка данных). Современные движки разбивают работу на маленькие “джобы” (задачи), которые выполняются параллельно.

Пример потоков на Unity:

Что делает движок, когда вы делаете прыжок в игре? Часть 1

Также, потоки можно разобрать на примере самописных движков. Например, когда я только начинал разбираться с игровыми движками, я уже знал Python и хотел понять как именно работает процесс написания ПО в виде игры. Результаты большой работы можно почитать в книге, в которой я описал весь процесс The Legend of PyZelda: Breath of the Snakes. Ссылка на доступ к книге.

Если же, многопоточность так удобна, то почему нельзя просто распараллелить всё? Главная проблема — зависимости данных. Как это работает. Физика обновляет позицию объекта, анимация читает позицию объекта, а рендер использует результат. Если выполнять это одновременно без контроля получаются гонки данных (race conditions), неконсистентное состояние и трудноуловимые баги.

Чтобы этого избежать, вводится синхронизация. В игру добавляют барьеры (synchronization points), двойную (или тройную) буферизация данных, а также очереди задач. Цена такого подхода — часть потоков иногда ждёт другие (собственно, концепция очереди).

Даже при 16 ядрах не все задачи можно распараллелить, есть последовательные участки (концепция транзитивности решений, где из А следует Б, из Б следует В, что значит что из А получится В). Также есть точки синхронизации. Это классическое ограничение (по сути — закон Амдала).

На практике, мы имеем следующую картину: один поток перегружен, а значит FPS упирается в него. Остальные ядра недогружены и из-за зависшего главного потока, они не догружаются. GPU может простаивать, ожидая CPU. Отсюда эффект загрузки CPU 30–40%, а FPS не растёт.

Чтобы всё работало как надо, нужно делить задачи на независимые куски, минимизировать блокировки, избегать лишнего копирования данных и держать систему детерминированной (особенно для сетевых игр).

Примеры из игр

  • На релизе Cyberpunk 2077 часто упиралась в CPU, особенно в городской сцене из-за числа NPC, сложной логики и стриминга мира. Даже на многоядерных процессорах один поток становился узким местом, ограничивая FPS.
  • Assassin’s Creed Unity известен огромным количеством NPC на улицах. AI и анимации частично распараллелены, но координация и логика всё равно создают bottleneck. Результат — нестабильный FPS, несмотря на мощное железо.
  • Microsoft Flight Simulator активно использует многопоточность. Стриминг данных с серверов, генерация мира, физика и системы самолёта. Но при этом долгое время был ограничен главным потоком (известный “MainThread limited”), из-за чего прирост от дополнительных ядер был ограничен.

Конец первой части

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

Именно здесь становится понятно, почему игра не всегда реагирует мгновенно и почему высокий FPS сам по себе не гарантирует хорошее ощущение управления. Движок постоянно балансирует между точностью, стабильностью, отзывчивостью и производительностью. Во второй части разберём, где эта система начинает упираться в CPU, GPU и видеопамять — и какие настройки реально помогают, а какие почти ничего не меняют.

Советуем дополнительно почитать по теме:

Что такое геймдев — простое объяснение игровой индустрии — как устроена разработка игр, какие специалисты участвуют в процессе, чем занимаются программисты, художники, гейм-дизайнеры и почему движок — главный инструмент команды.

Бэкенд с нуля в 2026: учим Flask, Docker, Redis и ещё 7 технологий — универсальный роадмап для разработчика: HTTP, базы данных, Docker, Redis, очереди, деплой и инженерные навыки, которые помогают понимать сложные системы, а не только писать отдельные функции.

17 инструментов разработчика: базовый набор для любого стека — GitHub, Docker, Postman, Codex и другие инструменты, которые помогают писать, проверять и поддерживать код без зоопарка случайных сервисов.

Востребованные языки программирования в 2026 году — какие языки реально нужны рынку: Python для данных и AI, Go и Rust для высоконагруженных систем, JavaScript / TypeScript для веба, Java / Kotlin для enterprise и Android.

9 лучших книг для программистов в 2026 году — подборка книг про код, архитектуру, инженерное мышление, карьерный рост и работу с большими проектами.

Бонус для читателей

Если вам интересно погрузиться в мир ИИ и при этом немного сэкономить, держите наш промокод на курсы Практикума. Он даст вам скидку при оплате, поможет с льготной ипотекой и даст безлимит на маркетплейсах. Ладно, окей, это просто скидка, без остального, но хорошая.

Вам может быть интересно
hard