Провел стресс-тест своей ballistic system в UE5. С примерно одинаковыми затратами получилось обработать:
• 10к ProjectileMovementComponent • 33к ballistic units в кастомной системе
ProjectileMovementComponent начинает упираться не столько в саму баллистику, сколько в overhead движка:
Tick на каждый projectile UObject/Component система обновление transform’ов внутренние MoveComponent вызовы огромный объем мелких операций на GameThread
В итоге CPU тратит кучу времени просто на обслуживание объектов.
В моей ballistic system вся симуляция идет централизованно:
без отдельного Tick на каждый projectile с parallel update async trace processing batched simulation
За счет этого получилось спокойно обработать 33k ballistic units при играбельном FPS.
Ballistic system теперь работает в несколько потоков. Когда BallisticUnit становится много, simulation автоматически разбивается на batch’и и распределяется между CPU threads. То есть система сама решает: когда выгоднее работать в одном потоке, а когда переходить в parallel mode.
Сделал debug-инфраструктуру для снарядов. Теперь система умеет в realtime показывать:
• траектории полёта • точки попаданий • скорость снарядов • загрузку системы • количество активных projectile’ов • режим работы CPU
Самое важное: debug почти не влияет на производительность и полностью вырезается из Shipping build.
Начинаю собирать Blueprint-facing gameplay API поверх simulation core, чтобы gameplay systems, FX и weapon logic могли взаимодействовать с ballistic pipeline без прямого доступа к core.
Сейчас работаю над собственной ballistic system для UE5 на C++.
Ушёл от стандартных ProjectileMovementComponent и actor-based пуль в сторону полностью data-oriented architecture. Упор идет в оптимизацию симуляции большого количества BallisticUnits. Что уже реализовано: - BallisticManager - Ballistic subsystem - gravity + drag - Hit collision - object pooling - SOA memory layout
Начали работу над ui для статуса и информации о персонаже. Сейчас готовы наброски инвентаря. В планах сделать взаимодействовать с хотбаром. А также получать информацию о предметах и его нынешнем состоянии.
Для экипировки игроку будут доступны слоты - Основное оружие - Дополнительное оружие - Броня - Дополнительное снаряжение(амулеты и тд) - Быстрые расходники - Заклинания
• Из прошлого проекта вместе с другими системами был перенесен инвентарь с базовыми функциями. Скоро появится возможность взаимодействия с сундуками и другими станциями по типу верстаков хранилищ. Также паралельно будет идти работа над хотбаром и возможно экипировкой.
• За основу системы передвижения персонажа мы взяли GASP от эпиков. Там есть базовый функционал для отзывчивого передвижения и камеры а также система паркура. От этого мы будем строить свои механики и системы.