ecs란?
Unity ecs의 ecs는 entity component system으로, 기존의 component system과 다른 구조를 가지고 있다.
ecs는 Dots, data oriented technology stack를 기반으로 설계된 시스템이다. 간단하게 축약하자면, 기존의 방식은 그대로 유지하되, 게임오브젝트로 작업을 하던것이entity로 수행을 하게 되는 것이다
기존 component system
기존의 component system은 우리가 생성한 gameobject에 component를 붙여서 object를 완성해 나간다. 이러한 component들은 개별로 메모리에 저장이 된다. 이때, component 저장이 되는 메모리는 랜덤한 위치에 저장이 되게 된다.
이 구조로는 많은 캐시 미스라는 이슈가 존재한다. 캐시미스를 줄인다면 CPU의 성능을 극단적으로 올릴수가 있다.
캐시미스?
캐시미스는 간단히 말해 cpu가 원하는 값이 캐시에 존재하지 않으면 생기는 현상이다. 그런데, 이 캐시미스가 cpu 성능에 영향을 왜 주는 것일 까. 그이유는, cpu가 원하는 캐시 장소에 메모리가 존재하지 않으면, 다음 단계의 캐시 메모리에 접근하여 값을 찾는다. 이 행위를 외부메모리에서 찾을 때까지 반복하게 된다.
캐시미스가 발생하는 순간, 데이터를 가져올떄까지 프로세스가 기다리게 된다. 여기서 프로세스 병목(Processing Bottleneck)이 발생하게 되는 것이다.
entity?
하나의 오브젝트를 이루는 데이터들을 모아둔 그룹이다. 오브젝트에 포함이 되는 컴포넌트 들의 모음이라고 생각을 할수 있고, 각 개별 컴포넌트들의 그룹 id로서 역할을 한다. 코드도 포함하지 않고, 어떤 기능도 포함하지 않는다.
그래서
간단히 이해하자면, 그래서 이 entity를 사용하면, 컴포넌트에 접근하는 것이 아닌 시스템에 접근을 해서, 어떤 entity로 작업을 수행할지 정적으로 선언하고, entity 청크리스트에서 해당 entity를 찾아 온다. 이 청크 리스트는 연속으로 할당된 메모리 공간이므로 캐시히트율이 증가하게 된다.
즉, ecs는 오브젝트의 데이터를 하나의 구조체로 관리하고, 이 데이터를 순차적으로 접근 할수 있게 해주는 시스템이다.
'Game Dev > Unity' 카테고리의 다른 글
개인 프로젝트 - 터치 크래프트 (2) (0) | 2024.01.20 |
---|---|
개인 프로젝트 - 터치 크래프트 (1) (0) | 2024.01.20 |
유니티 - Unity Memory Leak 이유와 관리 방법(Memory Profiler) (0) | 2023.12.01 |
유니티 네트워킹 - NetworkVariable vs RPC (0) | 2023.10.14 |
유니티 Field of View 구현 - 폴리곤 Mesh (0) | 2023.09.16 |