Кирилл Гейзеров — Entity Component System вместо классического ООП в C++
Автор: C++ Russia — Конференция по разработке на Cpp
Загружено: 2025-10-02
Просмотров: 2901
Описание:
Подробнее о конференции C++ Russia: https://jrg.su/9Sszhd
— —
Скачать презентацию с сайта C++ Russia — https://jrg.su/kBNdD8
Игровой движок — это обработка тысяч объектов в реальном времени. ООП, к которому мы привыкли в C++, не лучшим образом подходит для обеспечения нужной гибкости и производительности:
1. Жесткая связь между данными и логикой.
2. Сложность управления зависимостями.
3. Неэффективная организация данных.
Добавим сюда еще «плюсовые» сложности:
1. «Слабое связывание» в C++ часто происходит через указатели, управление которыми в условиях динамичного игрового мира — задача со звездочкой.
2. Неявный резолвинг указателей виртуальных таблиц — также не очень бьется с производительностью, когда циклы обработки могут за кадр обрабатывать тысячи полиморфных сущностей.
Все это приводит не только к низкой производительности, плохой масштабируемости, но и к снижению эффективности разработки игр, т. к. время на дебаг увеличивается в разы, повышается требование к компетенции разработчиков, что часто сильно бьет в рамках ограниченного времени доставки обновлений.
Кирилл рассказал об альтернативном пути архитектурирования движков на C++: ECS (Entity Component System). ECS предлагает иной взгляд на организацию структуры движка:
1. Слабая связанность и модульность. Данные и логика их обработки разделены. Такой подход упрощает добавление новой функциональности без необходимости затрагивать уже существующие механики. В дополнение к этому в основу ECS заложено предпочтение доступа к объектам через ID вместо указателей, что сильно упрощает работу с динамичными сценами.
2. Гибкость. Минимум наследования, максимум агрегации. Если нужно обработать, например, физику всех сущностей за раз, мы обрабатываем только физику. Если нужно построить некий агрегат — мы можем сконструировать его налету, используя только те компоненты, которые нужны для решения задачи.
3. Оптимизация производительности. Компоненты хранятся в памяти в виде пулов, что значительно улучшает производительность за счет повышения эффективности кэширования и использования SIMD-инструкций.
В докладе рассмотрели аспекты реализации ECS на C++, DOD (Data Oriented Disign), а еще поговорили про выбор стратегии мультипоточности для подобных систем.
Доклад будет интересен не только игроделам, но и всему C++ комьюнити.
Повторяем попытку...

Доступные форматы для скачивания:
Скачать видео
-
Информация по загрузке: