Фанатский патч для GTA Online ускорил загрузку в 3 раза
Будет неплохо, если разработчики его изучат и реализуют аналогичные улучшения сами
Кстати, на сайте читать удобнее
Онлайн-режим Grand Theft Auto 5 грузится очень долго: в некоторых случаях его полная загрузка может занимать больше десяти минут, это гораздо дольше, чем загрузка одиночного режима. Латвийский инженер под ником t0st, играющий в GTA Online, решил разобраться, в чем тут дело.
Проведя несколько экспериментов, t0st выяснил, что на его PC (AMD FX-8350, SSD-накопитель Kingston и 16 гигабайт DDR3) одиночная кампания грузится 70 секунд, а мультиплеер — в среднем 360 секунд. Опросы среди фанатов показывали, что может быть и хуже.
Инженер заметил, что увеличение производительности PC по-разному влияет на скорость загрузки мультиплеера и одиночного режима. У игроков с мощным железом GTA Online могла грузиться за пару минут, но загрузка сюжета не ускорялась. Значит, есть простор для оптимизации.
Затем t0st решил посмотреть, как вообще происходит загрузка онлайн-режима. Оказалось, что большую часть времени GTA Online грузит на 100% одно из ядер процессора, не создавая нагрузку ни на сеть, ни на диск, ни на память. Это было странно.
Чтобы найти суть проблемы, инженер запустил GTA Online под профайлером и обнаружил пару мест, где во время загрузки игра проводила больше всего времени. Затем нужные места были изучены с помощью дизассемблера и x64dbg.
Оказалось, что большую часть времени при загрузке игра тратит на парсинг гигантского JSON-объекта весом примерно в 10 мегабайт. Внутри у него порядка 63 тысяч записей; скорее всего, полагает t0st, это каталог всех предметов, которые можно купить в игре.
Изучив парсер JSON и обработку файла, t0st пришел к выводу, что код работает крайне неоптимально. Например, при добавлении нового элемента из JSON в игровые данные происходит поиск по всему массиву уже добавленных уникальных ключей вместо использования hashmap или похожих быстрых решений.
Кроме того, оказалось, что все идентификаторы и элементы в JSON и так уникальны — проверять их еще раз нет никакого смысла. Так или иначе, t0st понял, что проблему можно устранить: нужно лишь сделать неофициальный патч.
Инженер переопределил пару функций, использовавшихся при обработке JSON, убрав из них ресурсоемкие, но бессмысленные проверки. К сожалению, код привязан к адресному пространству игры, после выхода официального патча оно может изменить.
После патча загрузка GTA Online ускорилась с приблизительно 360 секунд до примерно 110 секунд — то есть более чем в три раза. Инженер надеется, что разработчики из Rockstar Games обратят внимание на его эксперимент и сделают разбор JSON более эффективным.
- Для GTA 5 делают фанатский ремастер с новыми ассетами, текстурами и материалами
- Фанатский патч для ускорения загрузки GTA Online пропатчили: теперь он работает на всех версиях игры
- Прошлое Алой Ведьмы в «Ванда/Вижн» оказалось не таким, как в «Первом мстителе»
- Обзорный трейлер Ху Тао, нового персонажа Genshin Impact
- Серию GTA предложили запретить в Чикаго из-за роста числа угонов
- Фанат превращает GTA 5 в сериал: вот первый эпизод