road to UE Senior
56 subscribers
96 photos
19 videos
2 files
8 links
UE5 разработка — C++ и Blueprint.
Архитектура, performance.

GitHub: github.com/wirnullptr
ArtStation: artstation.com/wir
Download Telegram
Продолжаю переписывать ballistic architecture в UE5 в сторону полноценной data-oriented simulation.

Что добавлено на текущий момент:

• centralized BallisticSubsystem
• fixed timestep simulation
• sparse/dense allocation
• generation-safe handles
• impact event buffering
• ownership pipeline
• physical material support
• surface response foundation


Самое важное:
simulation layer полностью отделен от gameplay layer.

BallisticUnit simulation:

* не вызывает damage
* не спавнит FX
* не трогает Blueprint
* не работает с gameplay systems напрямую

Simulation только:
movement, traces, energy calculation и hit generation.

После этого impacts складываются в event buffer и уже отдельной фазой отправляются через delegates в gameplay layer.

Параллельно постепенно готовлю архитектуру под:

* ParallelFor
* async traces
* SIMD
* penetration
* ricochet
* networking/prediction

Начинаю собирать Blueprint-facing gameplay API поверх simulation core, чтобы gameplay systems, FX и weapon logic могли взаимодействовать с ballistic pipeline без прямого доступа к core.
❤4🔥11
Ballistic system теперь работает в несколько потоков.
Когда BallisticUnit становится много, simulation автоматически разбивается на batch’и и распределяется между CPU threads.
То есть система сама решает: когда выгоднее работать в одном потоке, а когда переходить в parallel mode.

Сделал debug-инфраструктуру для снарядов. Теперь система умеет в realtime показывать:

• траектории полёта
• точки попаданий
• скорость снарядов
• загрузку системы
• количество активных projectile’ов
• режим работы CPU

Самое важное:
debug почти не влияет на производительность и полностью вырезается из Shipping build.

Добавил полноценное профилирование ballistic subsystem.

Теперь можно в realtime смотреть:

• сколько времени занимает simulation
• насколько загружен CPU
• когда система переходит в parallel mode

Всё интегрировано с Unreal Insights и stat system UE5.
🔥3❤21
Провел стресс-тест своей 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.

Процессор: Intel Core I5 12400F
❤3😈11
Нашел свой первый проект который делал 3 года назад🎁

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

Скачать: https://drive.google.com/file/d/1S576ljznmtMzchUBqmx9uqQRsIDHkgQW/view?usp=sharing
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
22❤1
Ballistic System Framework report

Что было сделано:

• Добавлена система баллистических профилей через Data Assets.
• Общие параметры снарядов больше не хранятся отдельно для каждого экземпляра.
• Вместо набора дублирующихся данных каждый снаряд теперь хранит только ссылку на свой профиль.
• Полностью обновлен пайплайн спауна под новую архитектуру.

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

* данными конкретного снаряда;
* данными типа снаряда.

На практике это означает, что десятки тысяч одинаковых снарядов больше не таскают за собой одинаковые значения массы, гравитации и параметров коллизии.
❤3❤‍🔥1👍1
REPORT🎁

Немного поправил архитектуру и по мелочам сделал рефакторинг.

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

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

Roadmap перед релизом первой версии:

Фаза 0 — Фундамент
переработка архитектуры, математика под оптимизацию. ☑️

Фаза 1 — Заморозка дальних снарядов Снаряды, которых не видно, перестают считаться каждый кадр.☑️

Фаза 2 — Система урона GAS или что-то попроще, на выбор.

Фаза 3 — Сеть Работает в мультиплеере (в приоритете — listen server), при этом одиночная игра не платит за сеть.

Фаза 4 — Полировка Финальная сборка в отдельный плагин под релиз.

Дальше в планах: урон по дистанции/скорости, хедшоты, рикошеты и разлёт осколков при попадании.

Уже готова Фаза 1, завтра будет пост о результатах и приросте производительности.
Please open Telegram to view this post
VIEW IN TELEGRAM
1