매스 엔티티 개요

언리얼 엔진 매스 엔티티 시스템의 개요입니다.

Choose your operating system:

Windows

macOS

Linux

기본 개념

매스 엔티티(MassEntity) 는 언리얼 엔진 5에서 사용 가능한 데이터 지향 계산을 위한 프레임워크입니다.

매스 엔티티의 주요 데이터 구조는 프래그먼트(Fragment) 로, 계산에 사용되는 최소 단위의 데이터 조각을 나타냅니다. 프래그먼트의 종류로는 트랜스폼, 속도, LOD 인덱스 등이 있습니다. 프래그먼트는 컬렉션으로 그룹화 가능하며, 이 컬렉션의 인스턴스는 ID와 연계될 수 있습니다. 이 컬렉션 인스턴스를 엔티티(Entity) 라고 부릅니다.

엔티티 생성은 객체 지향 프로그래밍의 클래스 인스턴싱과 유사합니다. 그러나 엔티티는 클래스와 기능을 엄격하게 선언하는 대신 프래그먼트 컴포지션으로 빌드되고 이 컴포지션은 런타임에서 변경할 수 있습니다. 예를 들어, 엔티티의 컴포지션은 트랜스폼과 속도 같은 두 가지 프래그먼트를 포함할 수 있습니다.

프래그먼트와 엔티티는 로직을 포함하지 않고 데이터만 갖는 엘리먼트임에 주의해야 합니다.

아키타입(Archetype) 은 컴포지션이 동일한 엔티티의 컬렉션입니다. 각 아키타입은 특정 환경설정의 여러 프래그먼트 타입으로 구성됩니다. 예를 들어 [트랜스폼, 속도] 프래그먼트 컴포지션을 갖는 아키타입이 있다고 합시다. 그러면 이 아키타입과 관련된 모든 엔티티는 동일한 프래그먼트 컴포지션을 갖습니다.

아키타입 내의 엔티티는 메모리 청크(Chunk) 로 조직됩니다. 이 방식은 메모리에서 동일한 아키타입의 엔티티와 관련된 프래그먼트를 가져올 때 최고의 퍼포먼스를 실현합니다.

프로세서(Processor) 는 프래그먼트에 프로세싱 로직을 공급하는 스테이트 없는 클래스입니다. 프로세서는 엔티티 쿼리(EntityQuery) 를 사용하여 작업 수행에 필요한 프래그먼트 타입을 지정합니다. 엔티티 쿼리는 개별 엔티티의 식별자에 관계 없이 프로세서에 프래그먼트 배치를 제공합니다.

태그(Tag) 는 데이터를 포함하지 않는 사소한 프래그먼트입니다. 태그의 존재 여부 자체가 데이터로 활용됩니다. 태그는 엔티티 컴포지션의 일부입니다.

청크 프래그먼트(ChunkFragment) 는 엔티티 대신 청크와 연결된 프래그먼트입니다. 청크 프래그먼트는 레벨 오브 디테일(Level of Detail, LOD) 계산 등의 관리 프로세스에 사용되는 청크 단위 데이터를 저장하는 데 사용됩니다. 청크 프래그먼트는 엔티티 컴포지션의 일부입니다.

엔티티 프로세싱

MassCommandBuffer

프로세서는 프래그먼트 또는 태그를 추가하거나 제거하여 엔티티의 컴포지션을 변경할 수 있습니다. 그러나 프로세스 중에 엔티티의 컴포지션을 변경하면 엔티티가 한 아키타입에서 다른 아키타입으로 이동하게 됩니다.

프로세서는 매스 커맨드 버퍼(MassCommandBuffer) 명령을 사용하여 컴포지션 변경을 요청할 수 있습니다. 이 명령은 위 문제를 예방하기 위해 현재 프로세싱 배치의 끝에서 배치 프로세스됩니다.

EntityView

프래그먼트 직렬 프로세싱은 엔티티에서 작업을 수행하는 가장 효율적인 방법입니다. 그러나 때로는 현재 프로세스 중이 아닌 다른 엔티티에도 액세스해야 합니다. 이를 위해 프로세서는 엔티티 뷰(EntityView) 명령을 사용합니다.

엔티티 뷰는 현재 프로세싱 큐에 없는 다른 엔티티의 데이터에 액세스하는 안전하고 최적화된 방법을 제공합니다.

서브시스템

매스 엔티티 프레임워크는 캡슐화 및 코드 정리를 위해 다수의 서브시스템으로 나뉩니다. 모든 서브시스템은 월드 서브시스템이므로, 서브시스템의 수명은 생성된 월드의 수명에 귀속됩니다.

MassEntity 서브시스템

매스 엔티티(MassEntity) 서브시스템은 매스 엔티티 프레임워크에서 가장 중요한 서브시스템입니다. 이 서브시스템은 엔티티 아키타입(Entity Archetype)을 생성하고 호스팅합니다.

이 서브시스템은 프래그먼트를 추가하거나 제거하는 등의 엔티티 작업을 위한 인터페이스 역할을 합니다. 또한 엔티티를 다른 아키타입으로 이전하는 역할도 합니다. 다른 서브시스템은 매스 커맨드 버퍼 명령을 사용하여 이 함수 기능을 비동기적으로 호출할 수 있습니다.

MassSimulation 서브시스템

매스 시뮬레이션(MassSimulation) 서브시스템은 매스 엔티티의 주기적인 프레임별 실행을 조율합니다. 이 서브시스템은 매스 프로세싱 페이즈 매니저(MassProcessingPhaseManager) 를 사용하여 프로세서를 엔진의 서로 다른 틱 단계에 실행되는 그룹으로 분할합니다.

매스 엔티티 프레임워크는 매스 시뮬레이션 서브시스템과 상호작용하지 않아도 데이터를 처리할 수 있습니다.

MassSpawner 서브시스템

매스 스포너(MassSpawner) 서브시스템은 매스 스포너 및 프로시저럴 호출을 바탕으로 엔티티를 스폰하고 관리합니다. 이 서브시스템은 사용 가능한 엔티티 템플릿에 대한 정보를 호스팅하는 매스 엔티티 템플릿 레지스트리(MassEntityTemplateRegistry) 인스턴스를 소유합니다.

엔티티 템플릿

엔티티 템플릿(Entity Template) 은 언리얼 엔진 에디터의 매스 엔티티 환경설정(MassEntityConfig) 데이터로부터 생성됩니다. 이 에셋은 생성되는 동안 엔티티에 추가할 수 있는 특성(Trait) 세트를 선언합니다. 또한 매스 엔티티 환경설정 에셋은 부모 에셋을 갖고 특성을 상속받을 수 있습니다.

특성

특성(Trait) 은 특정 함수 기능에 공급되는 프래그먼트와 프로세서를 총칭하는 이름입니다. 엔티티에는 특성 인스턴스를 몇 개든 추가할 수 있습니다. 각 특성 인스턴스는 엔티티가 그 특성이 공급하는 행동을 보이도록 프래그먼트를 추가하고 환경설정합니다. 특성의 일반적인 예시로는 회피(Avoidance) 행동, 타깃 바라보기, 스테이트 트리(State Tree) 사용하기 등이 있습니다.

MassRepresentation 서브시스템

매스 리프레젠테이션(MassRepresentation) 서브시스템은 엔티티의 여러 비주얼적 측면을 스폰하고 관리합니다. 엔티티는 UMass 액터 스포너(UMassActorSpawner) 서브시스템으로 스폰됩니다.

MassActorSpawner 서브시스템

매스 액터 스포너(MassActorSpawner) 서브시스템에는 매스 엔티티 프레임워크가 액터를 스폰하는 데 필요한 모든 함수 기능이 포함됩니다.

MassActor 서브시스템

매스 액터(MassActor) 서브시스템은 매스 엔티티가 스폰한 액터를 트래킹합니다.

MassAgent 서브시스템

매스 에이전트(MassAgent) 서브시스템은 매스 에이전트 컴포넌트를 포함하는 액터를 관리합니다. 이 액터들은 컴포넌트로부터 액터와 관련된 엔티티에 대한 추가 특성 등의 함수 기능을 받습니다.

매스 에이전트 컴포넌트가 있는 액터는 시뮬레이션의 일부가 아닐 때도 매스 엔티티와 커뮤니케이션할 수 있습니다. 예시: 플레이어의 위치를 사용하여 에이전트 크라우드의 회피를 계산할 수 있습니다.

매스 엔티티는 액터가 시뮬레이션 밖에 있더라도 MassAgent 컴포넌트가 있는 액터와 커뮤니케이션할 수 있습니다.

MassCrowd 서브시스템

매스 크라우드(MassCrowd) 서브시스템은 레벨 내 존 그래프(Zone Graph) 데이터를 사용하여 에이전트 크라우드의 움직임을 조율합니다. 이 서브시스템은 레인(lane) 및 스테이트(state)와 관련된 접근 가능한 데이터를 사용하여 크라우드의 이동을 유도합니다.

MassMovement 서브시스템

매스 무브먼트(MassMovement) 서브시스템은 에이전트가 인근의 다른 에이전트가 있는 위치로 모이는 데 사용하는 공간 해시 그리드를 호스팅합니다.

MassStateTree 서브시스템

매스 스테이트 트리(MassStateTree) 서브시스템은 스테이트 트리(State Tree) 시스템을 매스 엔티티와 통합하는 데 사용됩니다. 주요 기능은 매스 엔티티 프레임워크가 사용하는 스테이트 트리 에셋을 트래킹하고 관리하는 것입니다.

MassDebugger 서브시스템

매스 디버거(MassDebugger) 서브시스템은 매스 엔티티의 디버깅 함수에 대한 인터페이스입니다. 이 시스템은 게임플레이 디버거(Gameplay Debugger) 시스템에 모든 관련 데이터를 제공하여 런타임에서 뷰포트에 매스 엔티티 디버깅 정보를 표시할 수 있게 합니다.