개요
매스 엔티티(Mass Entity) 는 언리얼 엔진에서 사용할 수 있는 데이터 지향 계산을 위한 프레임워크입니다. 이 프레임워크는 시스템 내에서 특정 함수 기능을 담당하는 몇 가지 플러그인으로 나뉘어져 있습니다.
매스 게임플레이(Mass Gameplay) 플러그인은 매스 엔티티 플러그인에서 직접 파생되며 월드 내 표현, 스폰, 레벨 오브 디테일 메커니즘, 리플리케이션, 스테이트 트리 를 위한 함수 기능을 포함합니다.
이 문서에서는 매스 게임플레이 플러그인에서 사용할 수 있는 서브시스템을 살펴봅니다. 매스 엔티티에 대한 자세한 내용은 매스 엔티티 개요를 참고하세요.
서브시스템
매스 표현
매스 표현(Mass Representation) 서브시스템은 매스 엔티티의 다양한 시각적 요소를 관리합니다.
매스 표현 서브시스템은 각 표현 LOD 값에 대해 다음과 같은 4가지 타입의 표현 중에서 하나를 선택할 수 있게 해줍니다.
- 고해상도 액터
- 저해상도 액터
- 인스턴스드 스태틱 메시(Instanced Static Mesh, ISM)
- 표현 없음
ISM은 액터를 표현할 수 있는 가장 저렴한 방식으로, 버텍스 애니메이션을 사용하여 움직이거나 애니메이팅할 수 있습니다. ISM 액터를 애니메이팅하는 방법에 대한 자세한 내용은 언리얼 엔진 마켓플레이스에서 도시 샘플을 다운로드하여 확인할 수 있습니다.
ISM 애니메이션은 현재 일부 사용 사례에서만 완전히 지원되므로 실험단계 기능으로 간주됩니다.
매스 표현 서브시스템은 표현 타입 간의 트랜지션을 처리하며, 매스 액터 스포너 서브시스템 및 매스 LOD 서브시스템과 함께 직접 작동합니다. 이와 더불어 이 서브시스템은 스폰된 액터를 재활용하며 풀에 자동으로 저장할 수 있습니다.
매스 스포너
매스 스포너(Mass Spawner) 서브시스템은 매스 스포너 오브젝트와 프로시저럴 호출을 기반으로 엔티티를 스폰 및 관리합니다. 이 서브시스템은 사용 가능한 엔티티 템플릿에 정보를 호스트하는 매스 엔티티 템플릿 레지스트리(Mass Entity Template Registry) 인스턴스를 소유합니다.
이 서브시스템을 사용하려면 매스 스포너 액터를 생성하여 레벨에 배치해야 합니다. 매스 엔티티 정의 에셋(Mass Entity Definition Asset) 을 추가하여 스폰할 액터 타입을 지정하고 매스 엔티티 분포 인스턴스 제너레이터(Mass Entity Distribution Instance Generator) 를 추가하여 액터를 스폰할 위치를 지정할 수 있습니다.
매스 LOD
매스 LOD(Mass LOD) 서브시스템은 각 매스 엔티티에 필요한 레벨 오브 디테일을 계산합니다.
이 서브시스템은 LOD 값 4개, 즉 '높음(High)', '중간(Medium)', '낮음(Low)' 및 '꺼짐(Off)'을 출력합니다. 각 LOD 레벨에 대해 레벨이 연관된 거리와 레벨당 엔티티의 최대 수를 환경설정할 수 있습니다.
이 서브시스템은 다음과 같은 3가지 클라이언트 시스템을 갖습니다.
- 매스 (표현/시각화) LOD
- 매스 시뮬레이션 LOD
- 매스 리플리케이션 LOD
매스 LOD는 또한 LOD 중요도 부동 소수점 값을 0.0f(높음)에서 3.0f(꺼짐)까지 계산할 수 있습니다.
매스 (표현/시각화) LOD
매스 (표현/시각화) LOD 는 시각적 LOD를 처리하기 위해 특별히 설계되었습니다. 이 시스템은 먼 거리의 LOD뿐만 아니라 표시 여부까지 계산합니다. 또한 서로 다른 LOD 거리에서 엔티티가 카메라 프러스텀 내에 있는지 여부를 제공할 수 있습니다.
이 시스템은 거리, 프러스텀, 표시 여부에 의해 컬링되는지에 따라 모든 엔티티를 서로 다른 청크로 그룹화합니다. 다음 그래픽은 다양한 그룹화를 예시를 보여줍니다.
매스 시뮬레이션 LOD
매스 시뮬레이션 LOD 는 모든 엔티티 계산의 로드 밸런싱을 위해 구현되었습니다. 이 시스템은 모든 엔티티를 동일한 LOD를 가진 청크로 그룹화하여 쿼리에 필터를 사용할 때 유용합니다. 또한 모든 계산에 변수 빈도 업데이트를 제공하기 위한 옵션을 제공합니다.
매스 리플리케이션 LOD
매스 LOD 리플리케이션 은 LOD 프레임워크를 사용하여 리플리케이션을 위한 각 엔티티의 연관성을 파악합니다. 매스 (표현/시각화) LOD 및 매스 시뮬레이션 LOD와는 달리 이 시스템은 연결된 클라이언트(뷰어)당 각 엔티티에 대한 LOD를 계산합니다. 이 시스템은 네트워크 대역폭을 최적화할 수 있도록 지원합니다.
매스 리플리케이션(실험단계 기능)
매스 리플리케이션(Mass Replication) 서브시스템은 클라이언트-서버 방식으로 네트워크에 엔티티를 리플리케이트합니다. 이 서브시스템은 서버에서 클라이언트로의 단방향 리플리케이션을 수행합니다.
이 서브시스템은 연관성을 처리하고 엔티티의 빈도를 업데이트하여 매스 리플리케이션 LOD 시스템을 통해 대역폭 소비를 제한합니다.
매스 리플리케이션은 언리얼 엔진 5.1의 실험단계 기능입니다. 이 서브시스템은 커스텀 값을 리플리케이트하기 위해 C++ 구현을 필요로 합니다.
매스 스테이트 트리
매스 스테이트 트리(Mass StateTree) 서브시스템은 매스 엔티티와 스테이트 트리 시스템을 통합하는 데 사용됩니다. 이를 통해 각 엔티티를 위한 스테이트 트리를 환경설정하고 다른 매스 시스템에서 전송한 신호를 기반으로 각 엔티티의 스테이트 트리를 업데이트할 수 있습니다.
스테이트 트리 로직은 엔티티를 환경설정하거나 엔티티 데이터를 설정하는 데만 사용되기 때문에 특정 동작에 대해 적절한 프로세서가 실행됩니다.
매스 신호
매스 신호(Mass Signal) 서브시스템은 이름이 지정된 신호를 전송하여 엔티티에 처리할 것이 있음을 알릴 수 있도록 합니다. 현재 이 서브시스템은 매스 스테이트 트리에 처리할 것이 있는 경우 이를 알리는 용도로 사용됩니다.
신호는 엔티티에 전송된 페이로드가 없는 이벤트와 유사합니다. 매스 프레임워크는 주로 패턴을 풀링하는 데 초점을 맞추므로 이 서브시스템은 무언가를 빈번하게 업데이트해야 할 때 가장 유용합니다.
매스 무브먼트
매스 무브먼트(Mass Movement) 서브시스템은 매스 에이전트를 위한 단일 무브먼트 모델을 정의합니다. 프래그먼트와 프로세서가 구성되어 있어 다른 트레이트가 속도 또는 힘을 직접 수정할 수 있습니다. 이러한 값은 매스 에이전트에서 사용되는 엔드 무브먼트 값에 결합됩니다.
예를 들어 에이전트를 스티어링할 때 이 서브시스템은 초기 스티어링 힘을 설정하여 무브먼트 중에 콜리전을 피하도록 변경할 수 있습니다.
매스 스마트 오브젝트
매스 스마트 오브젝트(Mass SmartObject) 서브시스템은 매스 엔티티와 스마트 오브젝트 시스템을 통합하는 데 사용됩니다. 이 서브시스템은 필요한 트레이트, 프래그먼트, 프로세서를 제공하여 스마트 오브젝트 쿼리를 수행하고 매스 엔티티에서 표현한 에이전트에서 간단한 동작을 실행합니다.