Как я оптимизировал мультиплеер в Unreal Engine вместе с ИИ, а потом исправлял за ним косяки

Такое ощущение, что сейчас бессмысленно писать технические статьи. В моем случае, про мультиплеер в Unreal Engine. Все уже давно написано, и как будто бы ничего не изменилось: Сетевая оптимизация для Unreal Engine 4, What Every Programmer Needs To Know About Game Networking, Making Fast‑Paced Multiplayer Networked Games is Hard. Если лень читать, попросите Чат ГПТ — он быстро по пунктам перескажет статью. Да, и вообще, Чат ГПТ сам вам расскажет, как все делать.
Но я думаю, есть смысл рассказать про свой личный опыт по оптимизации мультиплеера и что сейчас особенно актуально — по работе вместе с ИИ. Эта статья — не очередное нытье на тему: «ИИ заменит нас всех», а скорее нытье на тему: «ИИ заменит нас всех плюс мой опыт сетевой оптимизации и как ИИ помог (и не очень) мне в этом». Погнали
Начало
Как‑то так совпали две вещи: началась по истине массовая истерия в программистских кругах вокруг ИИ и мое желание реанимировать свой старый пет‑проект про мультиплеерные гонки на ховеркарах. Очень давно я пытался его оптимизировать, но тогда опыта в мультиплеере было мало, поэтому вышло как вышло:
https://www.youtube.com/watch?v=hIDivVLJD6U

Вроде неплохо, но по факту было допущено много ошибок. К тому же в самом редакторе Unreal Engine я неправильно настроил эмуляцию сети. В итоге в реальных условиях лаги остались, хоть и не такие заметные.
Сейчас я уже матерый прогер по мультиплееру в Unreal Engine и понимаю много вещей, о которых раньше даже не знал. Тем не менее оптимизировать мультиплеер в одной конкретной игре, хоть и не рокет саенс, но все равно требует время и усилий, и я ленился тратить свое свободное время на это.
Первые эксперименты с ИИ
Вайб‑кодинг когда появился? Год‑два назад. Тогда это все казалось шуткой. Я включал AI assistant в JetBrains Rider. Он вроде немножко экономил время, но как‑то раз так накуролесил (а я не заметил), что потом пришлось срочно фиксить его косяки. После этого я его отключил.
Также я использовал ChatGPT, когда подготавливал вопросы к собеседованию по Unreal Engine. Он мне хорошо помог, но его галлюцинации меня поражали. Часто придумывал несуществующие методы, допускал ошибки в рассуждениях. На серьезных щах пытался доказать, что он прав. Короче я снова подумал, что до использования ИИ в работе еще далеко. Это было, кстати, зимой.
Наконец, совсем недавно я дал ему второй шанс. Все говорили, что он очень умный. И я снова решил это проверить. У меня была проблема: дедикейтед сервер пускал клиентов через раз. Я день пытался дебажить, но безуспешно. Тогда я закинул километровый лог в чат гпт и мы с ним довольно быстро нашли проблему:

Я подумал: прикольно, но продолжил работать по старой схеме — всё сам. Лишь решил, что в следующий раз снова закину ему лог с ошибкой — снова поможет мне.
Переломная точка
Примерно месяц назад (да, я знаю, я слоупок) я общался с другом из Микрософта, он выражал беспокойство, что через пару лет всех программистов выставят на мороз. Я даже не подумал, что он всерьез говорит. Я ему рассказал, что я скармливаю логи ЧатуГПТ, и он помогает мне находить ошибки. Он ответил: что я еще на первом уровне понимания работы современных нейронок. У них в Микрософте все сервисы имеют MCP‑протоколы, везде работают агенты. Он даже баг‑трекер не открывает. Опус 5 делает все за него. Я отмахнулся — в Unreal Engine ничего такого нет.
Спустя неделю мой друг, тоже программист Unreal Engine, рассказал, как он в Курсоре за ночь написал плагин для репликации тысячи акторов для своей игры. За неделю он с ИИ делает то, что обычно за месяц делает целый отдел.
Наконец, я решил попробовать. Купил Claude подписку за 20 баксов, запустил десктопную версию и попросил ее помочь мне сделать client side replication на моем пет‑проекте. Она сделала все сама за полчаса. Я лишь корректировал ее работу в паре моментов. Правда, я пропустил один критический косяк, но об этом позже. Сам на новом проекте с кастомным movement я бы делал это неделю, а потом еще бы правил ошибки. Я был в шоке. Я как будто оказался в будущем. Последний раз я такое испытывал в году 2005м, когда увидел спутниковые Google Maps.

Галлюцинации
Все про них писали, но я еще не столкнулся на тот момент с ними. Итак, Claude Opus 5 написал мне client side prediction за полчаса. Круто! Я проверил — все работает отлично. Запустил эмуляцию плохой сети и заметил небольшую проблемку: ховеркар начинает немного поддергиваться. Так как проблема выявилась только со включенной эмуляцией плохой сети, я сразу погрешил на синхронизацию (reconciliation) серверного состояния с клиентским. Но даже не попытавшись найти проблему сам, я сразу отдал ее Клоду. И вот тут началось...
Клод предлагал различные правдоподобные гипотезы, мы их постоянно проверяли. Он добавлял логи, я запускал. Он снова предлагал новую гипотезу, добавлял логи, я запускал. Потом я даже записал видео. Ничего не помогало. Я попытался решить проблему с Codex — те же яйца, только в профиль. Они оба настолько убедительно говорили в чем проблема, что у меня даже не возникало сомнения.



Так продолжалось два дня. Два дня мы искали ошибку. Пока наконец, пелена не спала с моих глаз, и я не спросил себя. Я же программист, я сам могу найти ошибку. И вот, сделав то, что ИИ не умеет, а именно, включив логику, я методом исключения нашел в чем была проблема.
При обработке ввода с клиента, сервер вырезал Z‑компоненту из входного вектора. Я пропустил эту ошибку, потому что подумал, что все норм — ведь я управляю кораблем в двух координатах. Нашел я ее очень быстро — просто по очереди перебирая все шаги, которые делает сервер. ИИ так не умеет. Он не умеет анализировать сложные алгоритмы. Client‑side prediction описан миллион раз, он реализован в UCharacterMovementComponent в самом Unreal Engine. Его он воспроизвел с легкостью, а вот чтобы донастроить, мозгов ему не хватило.
Забавно, но когда я дал чату гпт проревьюить статью, он предложил переписать предыдущий абзац: «ИИ так не умеет. Он не умеет анализировать сложные алгоритмы». Я бы ослабил именно утверждение, но сохранил укол. Например, по смыслу: «И вот тут обнаружилась пока еще очень важная разница. ИИ отлично генерировал новые гипотезы, но не смог систематически пройти всю цепочку исполнения и методом исключения сузить проблему. Мне же оказалось достаточно последовательно проверить каждый этап.»
Простой вывод, который я сделал из этого: доверяй, но проверяй. Держи архитектуру и ключевые места в голове. Ты как программист должен все прекрасно понимать на всех уровнях абстракции. И нет — это не микроменеджмент, беда неопытных тим лидов. Это другое. Я могу отдать джуну этот алгоритм, пусть он с ним собачится, ищет ошибки. Не справится за неделю, поставим на карандаш. Я сделаю выводы, буду давать задачи попроще, а сложнее — миддлу. В случае нейронки, я за все отвечаю в конце концов. Я не могу сказать нейронке: «работай пока не найдешь ошибку». Она ничего не найдет, а я потрачу время и деньги.
Этот случай не отпугнул меня. Теперь я уже не откажусь от КЛОДа, ЧатаГПТ и прочих. Они делают меня 10х‑программистом (помните такой термин был лет 5–10 назад: «10x»?)

Оптимизация мультиплеера
Ну ладно, нейронки нейронками, но давайте я хоть немного расскажу про оптимизацию мультиплеера. Вкратце.
Пересказывать те статьи, что я привел в начале, не буду. Базовые оптимизации Unreal Engine бессмысленны без фундаментальной базы: сеть есть сеть. Можно до бесконечности уменьшать размеры пакетов, уменьшатьNetUpdateFrequency, но пинг останется. Даже с идеальным RTT в 40 мс и нулевыми потерями, в таких играх как гонки — отсутствие фундаментальной оптимизации будет видно сразу.
В итоге мой список:
Преждевременная оптимизация — зло. NetUpdateFrequency, Relevancy, дорминант не дорминант и прочее — это преждевремнная оптимизация. Делать это надо в конце вместе с профайлером.
Использовать только Reliable при активной разработке не страшно, даже каждый тик. Два игрока в локальной сети не повлияют на буфер пакетов, зато можно будет отложить тонкую настройку алгоритмов на более поздний этап. Главное не забыть об этом перед тем как отправлять в продакшн
Сначала база: client‑side prediction, reconciliation, snapshot interpolation и прочее. Без этого никак.
Вот и все про оптимизацию.
Нужны ли программисты?
А теперь к вопросу, который набил уже всем оскомину. Но действительно очень актуальный. В этот раз это не просто хайп.
Лет 10 назад я прошел курс на Курсере Эндрю Ына про нейронные сети. Там по большей части была векторная алгебра, перемножение матриц, системы уравнений. Закончив его, я смог сам создать математическую модель, натренировать нейронку, а потом на джаве написать определитель игральных карт: масть и достоинство. В голове я подвел: «окей, я примерно знаю, как работают нейронки. Мне это не особо интересно, двигаемся дальше». Так вот, сейчас я не понимаю, как они работают. Для меня сейчас эта какая‑то фантастика. Я не понимаю, как она отвечает на вопрос: почему у нас в проекте Гуиды конвертятся неправильно. Особенно, когда она отвечает, что надо использовать другой юникод. Как она это выяснила?!
Пока что нейронки не умеют в сложные алгоритмы. Ключевое слово пока. А что будет через 3 года? Да ладно, три года, что будет через полгода?
Я сеньор/тимлид. Я не знаю, нужен ли я буду через 5 лет. Да, я не запускаю ракеты в космос, но все равно я и не CRUD‑сервисы клепаю. У меня нет четкого ответа на этот вопрос. Я думаю про офлайн. Надо перекочевывать туда. Virtual Production, например. И мой опыт не пропадет. ИИ туда еще не добрался.
Пока что
Бонус
В конце, я думаю, стоит все‑таки показать, что я там наоптимизировал:
https://www.youtube.com/watch?v=rJTq1AMDTG8

Если вам понравилось моя статья, подпишитесь на тг‑канал: Митя Мультиплеер. Новые подписчики мотивируют меня писать дальше.
Комментарии (13)

Emelian
27.08.2026 12:49Пока что нейронки не умеют в сложные алгоритмы.
А что вы понимаете под «сложными алгоритмами»? Реализацию уже известных или разработку новых? Если второе, то чем это отличается от формулировки: «решение, ранее неизвестных, сложных задач»?
Но, тогда главным становится роль архитектора ПО. Который определяет, какие именно задачи решать и в рамках какой концепции.
В принципе, общая логика понятна. Задачи, концептуально, формулирует бизнес (а в вопросах безопасности и обороны – государство), который хочет, чтобы: «у него всё было, но ему за это ничего не было». Типа, чтобы и коммерческий результат был, и себестоимость его была минимальной. Еще проще, чтобы конкретный сотрудник приносил прибыль фирме в размере 10х, а стоил для неё только 1х. Тогда пусть балуется ИИ-ями и прочей «ерундой», главное, чтобы был выгоден не завтра, а сегодня.
А что будет через 3 года? Да ладно, три года, что будет через полгода?
Ничего не будет! ИИ-истерия явно снизиться. ИИ-пузырь слегка схлопнется. Ибо, главную задачу бизнеса: «Заработай мне денюх, вместо меня!» ИИ ещё долго выполнить не сможет.
Он может помочь заработать, если у вас есть «самовнедряющиеся» идеи, ресурсы, благоприятные обстоятельства, навыки и способности. А для ленивого, глупого и бестолкового Васи Пупкина, никакой ИИ денег не заработает, зато с удовольствием растранжирит все токены, которые он ему выделит
Я сеньор/тимлид. Я не знаю, нужен ли я буду через 5 лет.
Если станете архитектором ПО, или будете владеть собственным бизнесом, в рамках которого сможете определять и решать задачи (один или с помощью команды) помогающие вашему бизнесу зарабатывать «монгольские тугрики», то проблем у вас не будет. А если ваша судьба будет в руках менеджера, который тупо считает, окупаете ли вы свою зарплату или нет, то уже ему решать стоит ли вашей фирме тратить на вас бабосы?
Как вариант, дождаться ухода «капитализьма» и прихода «Социализма-2.0» (хотя бы на уровне «Цифрового Коммунизма»), т.е., общества основанного на социальной справедливости. Заодно и Китай слегка догоним за счет экономического централизма (плюс Госплан, Госснаб, пятилетки и новые технологии служащие всему обществу, а не только «более равным» его членам). /У Китая «людёв» больше на порядок, чем у нас, а мы богаче его ресурсами, тоже на порядок. Так что гонка в развитии обещает быть интересной. .
P.S. Я уже два года жду на «Хабре» статьи, с примерно таким сюжетом. Вы берете известную программу, с закрытым исходным кодом, скажем, для определенности, платформу «1С77». Она относительно простая и «широко известная в узких кругах». Затем, с помощью продвинутых ИИ-ёв делаете её «вайб-копию» или «вайб-клон». То бишь, исходная «програмулина» выступает в роли визульно-интерактивного ТЗ. Не хотите «семерку», возьмите, в качестве «подопытного кролика» любою другую, попроще.
ИИ, непосредственно, наверное, еще не может анализировать поведение бинарной программы и давать её концептуальное описание. Если сможет, я буду только рад.
Вы, ну или любой другой «энзазист» генерируете исходники для бинарной программы, которые компилируете и сравниваете полученный результат с оригиналом.
Скажем, в свое время, я декомпилировал с помощью «народного» дизассемблера «ИдаПро» бинарные исполнимые файлы в ассемблер и обратно в dll или exe-файлы ( https://erfaren.narod.ru/ ). И, хотя, «ИдаПро» (с платным плагином) Ильфака Гильфанова позволяет восстанавливать бинарный код до уровня Си, я, всё же имею в виду другое, а именно полноценный, структурированный проект на С++ с указанным фреймворком, («1С77» написана на C++ / MFC, а я хочу иметь её «вайб-копию» на C++ / WTL).
Более того, автор подобной статьи мог бы вносить архитектурные изменения, допустим, вместо 32-х разрядной БД, основанной на dbf/cdx, использовать 64-х разрядный Sqlite. И т.д. и т.п.
Вот тогда было бы здорово оценить не только возможности «Искусственного Идиота», но и «Кожаного Мешка», в которых последний играет, по сути, роль архитектора.
Вот, когда статьи подобного рода здесь появятся, вот тогда и будем решать, может ли ИИ делать что-то более полезное, чем просто участвовать в процессах, без воспроизводимых (другими!) результатов. Хотя бы на уровне моей статьи: («Минималистский графический интерфейс, на C++ / WTL, для консольного загрузчика» : https://habr.com/ru/articles/955838/ ), которую я написал в соавторстве с бесплатным ИИ (а без него бы не смог!).

Jijiki
27.08.2026 12:49насчет ИИ расуждающих моделей, они уже могут, что-то вам подсказать по концепциям и показать скелет - основу реализации, как и почему другой момент.
момент про что будет никто не знает, потомучто эра агентов даёт сингулярность, разраб если он один тратит деньги и остаётся со скелетом, что сделал рой 1 на 1, и как вы представляете правки в проекте, который равен например 7 летнему проекту, который делала комманда людей на протяжении 7 лет.
"по началу кажется вот щас напишу движок у меня он будет легче, потом почитал то сё, посмотрел там сям.... и вот уже клиент весит 2 гига на диске, а движок стал тяжелым..., поначалу кажется, щас перепишу либу 1 в 1 с нуля снизу вверх и она будет легче, но это тоже иллюзия любое погружение в конкретику родит ту же либу жирности, и возможно родит новые проблемы", но, поучиться возможно да удобно....
если вам так интересен ваш "ps" - рассуждающие модели уже могут показать вам скелет, зависит от промпта как подойти к глобальной сложной теме, чтобы рассуждающая модель подделась и начала вам обьяснять по шагам как делать..... если это прям под ключ, то врятли, проблема в контексте, сложные задачи без декомпозиций, тригерят модель на растекание контекста как я понимаю, и если глубина маленьная, модель или быстро забудет или запутается, или в лучшем случае вы доделаете только скелет, а дальше разраб остаётся 1 на 1 с горой текста ) который как мы понимаем надо рефакторить, кто будет его рефакторить такой)?)

Emelian
27.08.2026 12:49это назвали вроде как отмыв кода
Назвать можно хоть «горшком», главное, в печь не класть.
Хорошо, возьмите бинарник опенсорсной программы и пусть по нему ИИ восстановит проект, который можно будет сравнить с оригиналом, на предмет качества. Речь то идет, скорее, о тестировании возможностей «Искусственного Идиота». А то мы постоянно слышим, что ИИ-тяне программистов уже почти заменили, а сами, при этом, не могут даже «вайб-копию» сделать. Только что-то там делать на уровне процессов, без результатов.
как вы представляете правки в проекте, который равен например 7 летнему проекту, который делала команда людей на протяжении 7 лет
Я имел в виду проект попроще, например, платформу «1С77». Её ваяли 10 человек два года. Более того, есть опенсорс «2С», давно заброшенный, но всё же, формально «фунциклирующий». «1С77» явно состоит из модулей. Вот и давайте проектировать аналогичную систему как «модульный учет», так чтобы с каждым модулем мог справится один «разраб», с ИИ-ями. Например, существует опенсоср «WtlGridCtrl», давайте на его базе сфарганим объект «Справочник», Добавить нам нужно только поддержку групп (фактически, нарисовать их). Эта задача вполне по силам одному «юзверю». Как нарисуем группы на контроле, сразу можно пытаться подключить Sqlite, что тоже демонстрируется во многих проектах на Гитхабе. И так медленно, но верно, лет через «надцать», напишем первую статью на «Хабре» по разработке ПО для ПК с помощью ИИ-ёв. А то уже ИИ-ям стало скучно ваять только процессы, сервисы, мобильные приложения и прочую не ПК-ашность.

mitya_kukharev Автор
27.08.2026 12:49А то мы постоянно слышим, что ИИ-тяне программистов уже почти заменили, а сами, при этом, не могут даже «вайб-копию» сделать. Только что-то там делать на уровне процессов, без результатов.
Ну к слову сказать, мой знакомый через ИИ написал эмулятор сервера MMO Star Wars The Old Republic. ИИ взломал игру, ассеты и так далее. Пока в процессе, но уже работает. Можно войти, создать персонажа, побегать по карте. ИИ как раз-таки хорошо реверс инженеринг умеют делать.

domix32
27.08.2026 12:49Несмотря на все оптимизации даже с нулевым пингом кадры ощущаются как просадка FPS до примерно 30-40.

mitya_kukharev Автор
27.08.2026 12:49А причем здесь FPS?

domix32
27.08.2026 12:49Да собственно все к тому же ощущению от игры. Ровно по той же причине по которой вы добавляли интерполяцию - чтобы игра ощущалась плавной и без скачков. Если видео писались поверх отладочной сборки я бы понял, но тогда это довольно странная демонстрация получается. Если же это релиз, то это просто вам инфа на будущее, про которую стоит задуматься.

mitya_kukharev Автор
27.08.2026 12:49ну FPS зависит от компьютера игрока, от того как игра оптимизирована графически. А сеть - это другое. FPS никак не связан с пингом. Если вы видите "просадку FPS" при нулевом пинге, значит проблема в другом.

domix32
27.08.2026 12:49Да я в общем-то про предоставленные вами видео говорил. Просто пытаться разглядеть плавное движение, там где она и без сети-то не очень плавная несколько сомнительное занятие. Избавились от постоянный подтягиваний к координатамна клиенте - хорошо.

Emelian
27.08.2026 12:49Пока в процессе
Вот именно! «Пока в процессе»! Как говорят физики – экспериментаторы: «Прибор должен быть не в принципе, а в кожухе!». То бишь: «Лучше один раз потрогать, чем сто раз увидеть!».
ИИ как раз-таки хорошо реверс инженеринг умеют делать.
Только, почему-то, никто не хочет продемонстрировать это в своих статьях. Хоть сам делай, с помощью бесплатных ИИ-сервисов, как в процитированной, выше, моей статье.

Jijiki
27.08.2026 12:49классный визуал у вас, мне больше нравится сглаженный и такой олдскулл с туманом, тропинками, лесами, опушками, океанами/реками/морями, я щас как раз тоже делаю пет-проект на Opengl4.6 DSA, созрел наконец-то, полноценный мир бесшовный) где есть пещеры и прочее, кароче РПГ игра, пока проект у меня на прогонке теста гипотезы, но вообще там всё работает как в воксельке ), кстати хотел бы вам посоветовать, сделайте воксельный движок(понимаю что мне щас накидают в панамку, но специально хочу минусаторам написать, что воксельный бесконечный мир база для открытого мира, меняется только ситуация, а всё остается как в концепции воксельки, просто оперируем 2д составляющей как в олдскулах, тоесть по-сути это технология 2000 года ) )), он база для вката в такие миры, какой вы показали, в гонках просто подгружать побыстрее надо чанки) и в релиз-релиз билдите ) я уже по некоторым причинам рабочую демку показать не могу, долго сбрасывать тестовые текстуры в цвет ), но у меня уже полноценный 3д редактор мира с дампом на диск ) без анриала, поэтому и советую )
Dhwtj
Более того, программист должен уметь проектировать на разных уровнях абстракций. Понимать цели, возможности и баланс.