단일 헤더 ECS 라이브러리

2024. 1. 27. 20:39Projects

 

Skills: C++, Memory Management

Project Duration: 2022/05/15 ~ 2022/05/20

Github: https://github.com/SeolYang/EntityComponentSystem

 

GitHub - SeolYang/EntityComponentSystem: ECS with C++20

ECS with C++20. Contribute to SeolYang/EntityComponentSystem development by creating an account on GitHub.

github.com

청크 기반의 ECS(Entity Component System)의 구현과 코드 분석 및 프로파일링을 통한 최적화 및 리팩토링.

* 개발 노트

내 맘대로 짜보는 ECS - Archetype

tuple에 대한 type traits 구현 몇 가지

 

tuple에 대한 type traits 구현 몇 가지

is_tuple, is_tuple_elemntis_tuple은 파라미터 인수로 주어진 타입이 튜플이면 true_type (is_tuple_v도 제공된다)is_tuple_element는 첫 번째 파라미터 인수가 tuple type(std::tuple)이고. 그 튜플로 부터 추론된 튜플의

seolyang.tistory.com

내 맘대로 만들어 보는 ECS - 3

 

내 맘대로 만들어 보는 ECS - 3

auto& poolProxy = ComponentPoolProxy::Get();Entity e1 = GenerateEntity();poolProxy.CreateComponent(e1);Entity e2 = GenerateEntity();poolProxy.CreateComponent(e2);poolProxy.CreateComponent(e2);poolProxy.Attach(e1, e2);auto filterAllTest = FilterAll({ e1, e2

seolyang.tistory.com

내 마음대로 만들어 보는 ECS - 4

 

내 마음대로 만들어 보는 ECS - 4

여전히 엔티티에 컴포넌트를 새롭게 추가한다고 해도, 엔티티가 가지고 있는 컴포넌트 들의 고유 집합인 아키타입을 새로 만들지도, 옮겨가지도 않는다.  하지만 이제 사전에 정의한 아키타입

seolyang.tistory.com

내 마음대로 만들어보는 ECS - 5

 

내 마음대로 만들어보는 ECS - 5

결국 원래 구조는 포기하고, 아에 완전히 새로 짜버렸다.. Wicked Engine 개발자가 제안했던 방식을 완전히 버리고 (내부적으로 계층 구조, 그러니까 자신의 자식 노드 또는 형제 노드들이 자신과 메

seolyang.tistory.com

내 맘대로 만들어보는 ECS - 7

 

내 맘대로 만들어보는 ECS - 7

이 때까지 총 4가지 버전의 ECS를 작성했다.Wicked Engine의 아티클에 충실한 구현Wicked Engine을 기반으로 정적으로 아키타입을 정의할 수 있는 버전동적으로 컴포넌트 추가 시 아키타입이 없다면, 새

seolyang.tistory.com

내 마음대로 만들어보는 ECS - 8

 

내 마음대로 만들어보는 ECS - 8

간밤에 한 최적화로 테스트 환경 내에서 동일한 시간 내에 평균 50만개의 컴포넌트를 더 생성 할 수 있게 되었다.결론적으로, 단순 성능 비교로는선형 접근의 경우 평균적으로 약 91% (2554ms -> 1335m

seolyang.tistory.com

내 마음대로 만들어 보는 ECS - 9

 

내 마음대로 만들어 보는 ECS - 9

오늘은 계속해서 들었던 의문점 왜 이렇게 메모리를 많이 쓸까? 의 답을 찾아서 수정 해보았다. 그럼 과연 저장되는 데이터를 제외하고 나면 어디서 메모리를 사용할까? 일단 1번. unordered_map의

seolyang.tistory.com

 

 

* 첫 번째 구현

 

* 개선

 

* 메모리 최적화 + 정적 분석을 이용한 C++ 코어 가이드라인 적용

` From (메모리 최적화 전)

 

` To (메모리 최적화 후)

 

'Projects' 카테고리의 다른 글

Kei (Vulkan)  (0) 2024.01.27
복셀 기반 콘 트레이싱을 활용한 전역 조명 효과 구현 (OpenGL)  (0) 2024.01.27
Escape (Unity)  (0) 2024.01.27
Mile Engine (Direct3D 11)  (0) 2024.01.27
GLTF 모델 뷰어 (OpenGL)  (0) 2024.01.27