Как загружаются игры?

Как только ты кликаешь по ярлыку игры, компьютер запускает множество процессов. А каких — расскажем в этой статье.

Говорить будем про игры на движке Unreal Engine, так как у него есть понятная документация по загрузке, а сам он популярен. У нас есть студент, Паша, который разбирается в этой теме, он нам и расписал все подробности.
Кстати, будет душно. Мы предупредили.

А если тебе лень читать, мы выпустили видео. Можешь посмотреть его:

Как только ты запустил игру, запустилась целая экосистема, которая взяла под контроль компьютер: процессор, видеокарту, оперативную память, звук, сеть, устройства ввода и файловую систему.

Вот как это происходит

Первым делом операционная система загружает исполняемый файл игры. Это скомпилированный код проекта, и, в зависимости от платформы, он может быть:

  • .exe — для Windows
  • .app — для macOS
  • бинарный ELF-файл — для Linux
  • образы для PlayStation 5 и Xbox Series X/S

Далее ОС выделяет память под начальный загрузчик и передаёт управление игре.

Проверка системы и API

Unreal Engine начинает с того, что проверяет железо: запрашивает характеристики процессора, объём доступной RAM и VRAM, модель видеокарты и версию операционной системы.

Затем движок проверяет наличие нужных API — специальных интерфейсов, через которые он общается с железом. Своего рода переводчики между Unreal Engine и твоей системой. Без них игра просто не поймёт, как работать с видеокартой, аудиоустройствами или сетью.

Хорошая аналогия: ты в чужой стране и хочешь открыть счёт в банке. Без переводчика никак. Так и Unreal Engine без API ничего не сделает.

Вот примеры нескольких API:

  • DirectX
  • Metal
  • Vulkan
  • Windows API
  • Steamworks
  • а для консолей PSN или Xbox Live API

DirectX 12, например, использует дескрипторы — специальные указатели на текстуры, буферы и шейдеры в видеопамяти. Это позволяет минимизировать обращения к CPU. Vulkan на Linux работает схожим образом. Windows API управляет окнами и системными событиями.

И уже на этом этапе загрузки возможны ошибки. Например:

  • Нет нужной версии DirectX
  • Не установлены критические библиотеки
  • Устаревшие драйвера
  • Конфликт оборудования

В этих случаях игра не запускается, либо запускается с ошибкой. Хорошие сборки могут дать понятную подсказку: «отсутствует библиотека X» или «не поддерживается видеокарта».

Проверка лицензии

Следующий этап — проверка лицензии. Это особенно важно при запуске через Steam, Epic Games или консоли.
Движок подключается к интернету и проверяет, есть ли у пользователя право запускать игру. Для этого используются внутренние библиотеки клиента: Steam API, Epic Online Services, PSN SDK и так далее. На консолях этот процесс встроен в операционную систему и работает через API платформы.

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

Инициализация подсистем

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

  1. Графическая подсистема. Подключает шейдеры, выделяет память под текстуры, геометрию, настраивает инструкции для GPU — как именно рисовать сцену. На этом этапе активируются Nanite, если он используется, и настраивается рендер-пайплайн.
  2. Физическая подсистема. Chaos Physics — физический движок Unreal Engine — отвечает за столкновения, симуляции и взаимодействие объектов. Он использует иерархические структуры (BVH) для быстрой проверки пересечений.
  3. Звуковая система. Подключаются драйвера и звуковые API: XAudio2, Core Audio, Tempest 3D (на PS5). Устанавливаются звуковые каналы, громкости, эффекты.
  4. Сетевая подсистема. Если игра поддерживает мультиплеер, запускаются системы для соединения с другими игроками: через Epic Online Services, Steam или сторонние решения на UDP/TCP.
  5. Система ввода-вывода. Она обрабатывает сигналы от мыши, клавиатуры, геймпада или других контроллеров. Используются DirectInput, SDL, XInput или нативные API консолей.
  6. Файловая подсистема. Загружает игровые ресурсы из архивов .pak. Это единый формат, в котором Unreal упаковывает текстуры, ассеты, модели, аудио и логику. Это ускоряет чтение, позволяет проверять целостность и загружать только нужные элементы.

Компиляция шейдеров

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

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

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

Обычно шейдеры компилируются один раз — при первом запуске. В дальнейшем движок использует готовый кэш. Повторная компиляция может потребоваться при установке DLC, смене видеокарты или обновлений движка. Или если разработчики по какой-то причине забыли включить использование кэша.

И да, тут тоже могут быть свои ошибки, которые приведут к вылету или зависанию:
  • Неподдерживаемое железо
  • Устаревшие драйвера
  • Некорректные .pak-файлы
  • Перегрузка CPU из-за физики
  • Блокировка записи в папку с игрой
  • Конфликт с антивирусом или правами доступа

Меню игры

Само меню — это отдельная сцена. Его загрузка активирует весь набор систем: UI, интерактивные элементы, отклик на нажатия, анимации интерфейса.

После загрузки движка и появления главного меню начинается следующий этап — запуск первого уровня и переход к самому игровому процессу.

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

Загрузка уровня

В Unreal Engine уровни представлены как Persistent Level — основной, постоянно активный уровень. Он может содержать ландшафт, освещение, архитектуру и базовую логику.

Если уровень большой — например, открытый мир — используется система World Partition. Она разбивает карту на ячейки и загружает только те, что находятся рядом с игроком. Это снижает нагрузку и экономит ресурсы.

Для небольших сцен, вроде главного меню или заставки, применяется обычный Level Streaming — подгрузка ассетов по мере необходимости. Всё это работает через .pak-файлы — архивы с текстурами, моделями, звуками и логикой.
На этом этапе активно используется Texture Streaming Pool — система, которая выделяет объём видеопамяти под текстуры.

Например:

  • до 12 ГБ VRAM на Windows и консолях
  • 6–8 ГБ на macOS и Linux

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

Рендеринг сцены

Как только мир загружен, запускается система рендеринга. Именно она превращает 3D-данные в изображение на экране.
На Windows это чаще всего DirectX 12, который использует Command Lists — инструкции для GPU. На Linux и macOS — Vulkan или Metal, а на консолях — собственные API: GNMX на PS5, DirectX Ultimate на Xbox.

Современные проекты используют Nanite — технологию виртуализации геометрии. Она позволяет отрисовывать десятки миллионов полигонов без потерь в производительности. Движок автоматически подгружает только ту детализацию, которая видна в кадре, снижая нагрузку на GPU и минимизируя количество вызовов отрисовки (draw calls).

Динамическое освещение

За глобальное освещение отвечает Lumen — система, которая использует трассировку лучей и поля расстояний (Signed Distance Fields) для расчёта света, теней и отражений.

Если видеокарта поддерживает аппаратный Ray Tracing — например, через RT-ядра NVIDIA или AMD — Lumen использует их напрямую. В противном случае применяется программная трассировка, которая ложится на CPU и может снижать FPS.

Чтобы скомпенсировать это, включается Temporal Super Resolution — технология апскейлинга, позволяющая рендерить картинку в более низком разрешении и масштабировать её до 4K с минимальными потерями.

Пользовательский интерфейс

Интерфейс в Unreal Engine построен на Widget Blueprints — визуальных элементах UI. Кнопки, панели, курсор, миникарта и прочие элементы интерфейса обрабатываются движком отдельно от игровой сцены.

Логика управления интерфейсом может быть реализована как через Blueprints, так и на C++ — в зависимости от сложности проекта.

Каждое нажатие, каждое движение мыши — это событие, которое движок ловит через систему ввода и связывает с нужным действием.

Физика и взаимодействие

Физический движок Chaos отвечает за поведение объектов: столкновения, падения, взрывы, разрушения. Он использует BVH (Bounding Volume Hierarchies) — иерархии, которые позволяют быстро определять, какие объекты соприкасаются. При необходимости можно использовать Constraint Solvers — системы, рассчитывающие соединения между объектами: верёвки, мосты, мягкие тела. Если используется Physics Materials, можно задавать параметры трения, отскока и плотности для каждого объекта.

Анимации и логика

Анимации управляются через Animation Blueprints. Например, персонажи используют Full Body IK Solver, чтобы ноги правильно стояли на поверхности.

Параллельно работают Behavior Trees — древовидные структуры, управляющие поведением NPC: атаки, уклонения, патрули, диалоги.

Игровой цикл

Всё это работает внутри основного цикла игры — Game Loop, который состоит из трёх этапов:

  1. Update — обновление состояния мира: физика, анимации, AI
  2. Tick — обработка ввода игрока
  3. Render — отрисовка кадра
Например, когда ты нажимаешь "W" происходит следующее:
  • Tick-система фиксирует нажатие
  • Игровая логика двигает персонажа
  • Физика рассчитывает столкновения
  • Анимация подстраивает походку
  • Рендеринг выводит всё на экран

Сетевые функции

Если игра мультиплеерная, включается Network Subsystem. Она использует Replication System — механизм синхронизации между клиентами и сервером. Для этого могут использоваться:

  • UDP или TCP-соединения
  • Epic Online Services
  • Steamworks
  • PSN/Xbox Live SDK

Сеть может управлять не только перемещением игроков, но и объектами, голосовым чатом, сохранениями, телеметрией.

Звук

За звук отвечает Audio Mixer или сторонние системы вроде FMOD и Wwise. Они управляют воспроизведением музыки, звуков окружения, эффектов, голосов. Поддерживается пространственное позиционирование, 3D-звук, реверберация.

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

Поддержка платформы

Попутно работают нативные API, которые обрабатывают системные события, окна, разрешения, курсор, режимы экрана и другие элементы взаимодействия с операционной системой:

  • WinAPI — на Windows
  • Cocoa — на macOS
  • X11/Wayland — на Linux
  • OS SDK — на консолях

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

Движок, каждую секунду координирует десятки сложных процессов — чтобы всё выглядело и ощущалось как единое живое пространство.

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

Unreal Insights.png

Выход из игры

В этот момент начинается финальный этап — корректное завершение работы всех подсистем Unreal Engine и освобождение ресурсов.

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

Сигнал завершения

Вернёмся к выходу из игры. Это событие фиксируется через Input Subsystem или Window Manager, в зависимости от платформы:

  • На Windows — через WM_CLOSE
  • На macOS — через Cocoa ApplicationDelegate
  • На Linux — через X11/Wayland события
  • На консолях — через SDK событий платформы

После получения сигнала движок начинает процедуру graceful shutdown — «мягкого завершения».

Сохранение данных

Первый шаг — сохранение всего, что должно быть сохранено:

  • Прогресс игрока (системы SaveGame, JSON/INI/Custom binary)
  • Настройки графики и управления
  • Состояние сессии — в сетевых играх: позиция, инвентарь, события
  • Облачные сохранения через Steam Cloud, Epic Cloud, PSN/Xbox Live

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

Деактивация подсистем

После этого Unreal Engine поочерёдно завершает работу ключевых подсистем.

1. UI / Widget System
— Закрываются все активные виджеты и интерфейсные элементы.
— Прерываются анимации и обработка нажатий.
— Объекты UI удаляются из памяти.

2. Gameplay и логика
— Удаляются все Actor’ы, Components и Blueprint-сущности.
— Останавливаются таймеры, тики, AI-бихейворы, event dispatchers.
— Вызываются события EndPlay для каждого объекта.

3. Physics и анимация
— Прекращается симуляция Chaos Physics.
— Завершается работа IK-солверов и анимационных графов.
— Освобождаются ресурсы, связанные с коллизиями и телами.

4. Аудиосистема
— Останавливаются все проигрываемые звуки.
— Завершается обработка эффектов: реверберация, пространственное позиционирование.
— Отключаются аудиодвижки: FMOD, Wwise, AudioMixer.

5. Сетевая подсистема
Если мы говорим про онлайн-игры, то происходят:
  • Отключение от сервера
  • Завершение сессии
  • Синхронизация данных
  • Закрытие портов или WebSocket-соединений
  • Очистка памяти
Когда все подсистемы остановлены, начинается процесс освобождения ресурсов:
  • Удаляются неиспользуемые UObjects, Textures, Meshes, Sounds
  • Очищается GPU-память от загруженных материалов и рендер-целей
  • Закрываются файлы .pak и стриминговые каналы
  • Удаляются временные буферы, ассеты, кэш-компиляции
Здесь особенно важен механизм Garbage Collector. Он рекурсивно проходит по всем ссылкам и удаляет объекты, не привязанные к сцене. Это предотвращает утечки памяти

Завершение рендеринга и окон

Финальный этап — отключение графического вывода:
  • Завершаются рендер-пайплайны
  • GPU сбрасывает все активные команды
  • Удаляются Render Targets, Post-Process Chains, Depth Buffers
  • Окно приложения закрывается через системный вызов. Например, DestroyWindow на WinAPI
На macOS или Linux — это может сопровождаться остановкой OpenGL/Vulkan/Metal контекста.

Выход из процесса

После завершения всех задач Unreal Engine завершает свой основной цикл:
  • Останавливаются все потоки
  • Завершается работа Game Thread, Render Thread, Audio Thread, RHI Thread
  • Возвращается код завершения в операционную систему (обычно 0, если всё прошло корректно)
  • Процесс закрывается

Возможные проблемы при выходе

Ну и куда же без ошибок. Вот некоторые из типичных проблем:
  • Зависание при выходе из-за висящих потоков
  • Утечка памяти, если объекты не были удалены
  • Недосохранённые данные
  • Разорванное соединение с сервером до отправки финальных пакетов
  • Краш при закрытии из-за обращения к уже уничтоженному объекту
Чтобы избежать этого, опытные разработчики внедряют деферралы — отложенное уничтожение объектов — и логируют процесс завершения.

Возможные последние этапы

Многие студии добавляют на этапе выхода:
  • Отправку аналитики — сколько играл, как закрыл, на каком уровне
  • Проверку ошибок — краш-репорты, телеметрия
  • Уборку мусора — удаление кэша, логов, временных файлов
  • Релиз соединений с внешними API — Discord Rich Presence, Twitch, OBS SDK и т.д.
728 0 850 6
2
2025-10-29
Круто!) Спасибо за энергичное видео!))
2025-11-09
Спасибо ! Весьма интересное
RENDER.RU