https://www.youtube.com/watch?v=anoA9d2vn9A&t=54s
현재 다양한 분야에서 개발에 사용하고 있는 디자인은 OOD (객체 지향 디자인) 이다.
알게 모르게 어디에서도 만날 수 있으며 유니티에서 기본적으로 개발하는 방식 또한 OOD 이다.
속성, 기능을 하나로 묶어 객체로 표현하고 이 객체를 기반으로 점차 확장, 연결하여 다양하고 긴밀한 객체들을 개발한다.
상속 개념. Unity 에서 Monobehaviour를 통해 상속
매가 몸통박치기 스킬을 가지고 있을때, 닭도 가지고 싶으면 ?
개발자가 의도한 대로 빠르게 코드로 옮길 수 있는 장점이 있는 반면에 여러가지 단점도 있다.
CPU와 메모리가 발전한 속도가 차이가 있다.
퍼포먼스 갭(둘의 차이)이 커지고 있다.
CPU는 멀티코어를 사용해서 더 빠르게 발전할 수 있다.
메모리는 그게 없으니까 발전 할 수 있는게 차이가 있다.
잉여 자원이 많이 남는 CPU를 적극적으로 사용하여 성능을 끌어올릴 수 있는 디자인에 대해 연구하게 된다.
데이터 지향 디자인
객체를 구성하는 데이터들을 동일한 것끼리 모아서 관리하고 접근하는 디자인
데이터를 모아서 CPU에 전달하기 때문에 CPU 활용도가 OOD보다 높으며 병렬 처리, 모듈화 등 좋은 장점들이 있다.
하지만…
기존의 개발 방식과 너무나도 다르면서 난이도가 수직 상승!
어렵다기 보다는 기존 방식과 다르기에 생각의 전환이 필요하다
DOTS는 Data-Oriented Technology Stack의 약자. 기존의 Object-Oriented 디자인이었던 유니티의 전통적인 방식이 아닌 데이터에 초점을 맞춘 아키텍처.
Sparse Set (스파스 셋)
엔티티를 구성하는 각 구성요소 별로 묶어서 관리하는 방식
ex) 마인크래프트, 오버워치, 앞선 그림과 비슷하다
Archetype (아키타입)
엔티티의 조합 타입별로 묶어서 관리하는 방식
ex) Unity, Unreal
메이저 게임 엔진에서 주로 채용된 방식으로 동일한 조합의 형태만을 모아서 빠르게 접근할 수 있도록 관리하는 DOTS 이다.
GameObjects와 호환되는 데이터 지향 프레임워크로서 고성능의 제어 및 결정성으로 더욱 스케일이 큰 컨텐츠를 만들 수 있다.
Unity에서는 ECS 대표 예제인 MegaCity를 제공하고 있다.
유니티의 기존 자산을 활용하여 DOTS 시스템 구축에 집중할 수 있다.
수월한 데모 실행을 위해 아래와 같은 설정이 필요하다
유니티 ECS는 병렬 처리를 위해 Subscene으로 나누어져 있다.
일반 하이라이커에서는 해당 내용을 볼 수 없지만 엔티티 하이어라키에서는 포함하고 있는 엔티티들을 살펴볼 수 있다.
컨텐츠에서 존재하는 엔티티들의 활동을 실시간으로 확인할 수 있는 인터페이스.
각 엔티티들의 활동 개수와 처리 시간을 확인할 수 있어 퍼포먼스의 비중을 편리하게 분석할 수 있다.
각 엔티티들의 활동 개수와 처리 시간을 확인할 수 있어 퍼포먼스의 비중을 편리하게 분석할 수 있다.
ECS 구축을 위해 작성한 모든 DOTS 컴포넌트를 목록으로 확인할 수 있는 창
오클루전 컬링같은 경우에는 랜더링 이슈. ECS같은 경우에는 랜더링은 아니다.
ECS, 유니티 DOTS의 가장 중요한 정보로서 데이터 그룹을 결정하는 아키타입의 목록을 확인하고 자세하게 분석할 수 있는 창이다.
하나의 패키지를 만드는 데 어떠한 아키타입이 있는가?
CPU 연산 능력 활용도가 많이 올라가니까 기본 방식에 비해 무조건 좋은 것이 아닌가? 라고 생각할 수 도 있을 것 입니다.