Unity DOTS & ECS

박지예·2023년 11월 24일
0

공부

목록 보기
41/42
post-thumbnail

https://www.youtube.com/watch?v=anoA9d2vn9A&t=54s

서론

평소에 개발하는 디자인

현재 다양한 분야에서 개발에 사용하고 있는 디자인은 OOD (객체 지향 디자인) 이다.

알게 모르게 어디에서도 만날 수 있으며 유니티에서 기본적으로 개발하는 방식 또한 OOD 이다.

Object Oriented Design

속성, 기능을 하나로 묶어 객체로 표현하고 이 객체를 기반으로 점차 확장, 연결하여 다양하고 긴밀한 객체들을 개발한다.

상속 개념. Unity 에서 Monobehaviour를 통해 상속

객체 지향 디자인의 문제점

매가 몸통박치기 스킬을 가지고 있을때, 닭도 가지고 싶으면 ?

개발자가 의도한 대로 빠르게 코드로 옮길 수 있는 장점이 있는 반면에 여러가지 단점도 있다.

  • 기능이 추가 될때마다 구조가 복잡
  • 과거 개발 히스토리를 파악해 두어야 함
  • 연산처리가 객체 중점 : CPU 보다는 메모리를 많이 사용

CPU와 메모리가 발전한 속도가 차이가 있다.

퍼포먼스 갭(둘의 차이)이 커지고 있다.

CPU는 멀티코어를 사용해서 더 빠르게 발전할 수 있다.

메모리는 그게 없으니까 발전 할 수 있는게 차이가 있다.

연산 중심의 효율적인 디자인?

잉여 자원이 많이 남는 CPU를 적극적으로 사용하여 성능을 끌어올릴 수 있는 디자인에 대해 연구하게 된다.

Data Oriented Design

데이터 지향 디자인
객체를 구성하는 데이터들을 동일한 것끼리 모아서 관리하고 접근하는 디자인

데이터를 모아서 CPU에 전달하기 때문에 CPU 활용도가 OOD보다 높으며 병렬 처리, 모듈화 등 좋은 장점들이 있다.

하지만…

기존의 개발 방식과 너무나도 다르면서 난이도가 수직 상승!

어렵다기 보다는 기존 방식과 다르기에 생각의 전환이 필요하다

DOTS란 무엇인가!?


DOTS는 Data-Oriented Technology Stack의 약자. 기존의 Object-Oriented 디자인이었던 유니티의 전통적인 방식이 아닌 데이터에 초점을 맞춘 아키텍처.

DOTS의 종류

Sparse Set (스파스 셋)

엔티티를 구성하는 각 구성요소 별로 묶어서 관리하는 방식

ex) 마인크래프트, 오버워치, 앞선 그림과 비슷하다

Archetype (아키타입)

엔티티의 조합 타입별로 묶어서 관리하는 방식

ex) Unity, Unreal

아키타입(Archetype)이란?

메이저 게임 엔진에서 주로 채용된 방식으로 동일한 조합의 형태만을 모아서 빠르게 접근할 수 있도록 관리하는 DOTS 이다.

Entity Component System

GameObjects와 호환되는 데이터 지향 프레임워크로서 고성능의 제어 및 결정성으로 더욱 스케일이 큰 컨텐츠를 만들 수 있다.

Unity에서는 ECS 대표 예제인 MegaCity를 제공하고 있다.

기존 오브젝트와 호환

유니티의 기존 자산을 활용하여 DOTS 시스템 구축에 집중할 수 있다.

메가시티 프로젝트

수월한 데모 실행을 위해 아래와 같은 설정이 필요하다

  • 편집 메뉴, 프로젝트 설정, 품질에서 중간 또는 낮음을 선택한다
  • Jobs 메뉴의 Burst에서 Enable Compilation이 켜져 있고 Safety Checks가 켜져 있지 않은 지 확인한다. 꺼져있는지.
  • 작업 메뉴의 편집 > 기본 설정 > 작업, 누출 감지 수준에서 비활성화 됨이 선택되어 있는지 확인

엔티티 하이어라키

유니티 ECS는 병렬 처리를 위해 Subscene으로 나누어져 있다.

일반 하이라이커에서는 해당 내용을 볼 수 없지만 엔티티 하이어라키에서는 포함하고 있는 엔티티들을 살펴볼 수 있다.

시스템

컨텐츠에서 존재하는 엔티티들의 활동을 실시간으로 확인할 수 있는 인터페이스.

각 엔티티들의 활동 개수와 처리 시간을 확인할 수 있어 퍼포먼스의 비중을 편리하게 분석할 수 있다.

각 엔티티들의 활동 개수와 처리 시간을 확인할 수 있어 퍼포먼스의 비중을 편리하게 분석할 수 있다.

컴포넌트

ECS 구축을 위해 작성한 모든 DOTS 컴포넌트를 목록으로 확인할 수 있는 창

오클루전 컬링과 차이

오클루전 컬링같은 경우에는 랜더링 이슈. ECS같은 경우에는 랜더링은 아니다.

아키타입

ECS, 유니티 DOTS의 가장 중요한 정보로서 데이터 그룹을 결정하는 아키타입의 목록을 확인하고 자세하게 분석할 수 있는 창이다.

하나의 패키지를 만드는 데 어떠한 아키타입이 있는가?

ECS 관련 사이트

무조건 ECS가 좋은 방법인가요?

CPU 연산 능력 활용도가 많이 올라가니까 기본 방식에 비해 무조건 좋은 것이 아닌가? 라고 생각할 수 도 있을 것 입니다.

  • 성능은 좋지만 제대로 구현하기 위해 배워야 할 내용이 너무 많아요
  • 유니티 컴포넌트를 100% 사용하기에는 아직 업데이트가 좀 더 필요해요
  • 게임 개발 스케일, 난이도를 확인하여 OOP, DOTS를 선택하는 것이 중요
profile
언젠간 바다로 갈거야!🐋

0개의 댓글