Mass Framework란?
Mass Framework란 Unreal Engine 5.0에서부터 실험적 기능으로 도입된 데이터 중심적인 객체 구성을 지원하는 프레임워크이다. 이 방식은 당시에 매트릭스 샘플에서 사용을 확인할 수 있었는데, 대량의 오브젝트들을 월드에 배치하려면 Mass를 이용하는게 좋다. 기본적으로 Mass에서 말하는 장점은 Cache-hit에 유리하다는 것이다. CS 관련 수업을 들었다면 대충 느낌을 알 수 있을텐데, Mass와 UObject 방식을 비교해서 raw하게 느낌만 알아보자. 자세한 기술적 검증을 거친 정보가 아니라, 대충 이런 느낌이구나... 라는 이해를 돕기 위한 설명이므로 실제와 다를 수 있다.

(이미지는 GPT에 의해 생성됨) 이와 같이, 만약 우리가 APawn을 상속하는 객체를 생성했다면, 이처럼 UObject부터 AActor를 따라 APawn으로 내려오는 상속, 그리고 AIController를 기반으로 작동하는 AI지원 등... 개발 난이도는 이미 쌓아진 지원 클래스들이 많은 만큼 아주 쉬울 것이다.다만, 문제점이 있는데, 이런 기반을 누릴 수 있는 만큼 왼쪽 이미지처럼 각 객체가 갖는 용량, 계산량이 너무 많아진다는 것이다. 따라서, 월드 내에 이런 오브젝트가 많아질수록 더 많은 부하가 발생한다.게다가 각각의 오브젝트의 용량이 커지다보니, 오브젝트를 캐시에 올렸을 때, 사용되지 않는 메모리도 같이 그룹으로 올라오게 된다. 따라서 Cache-miss가 많아지므로 속도가 더더욱 느려진다.

Mass는 이런 문제점에서 시작했다. 월드에 동일한 객체가 많이 설치된다면, 굳이 그 객체들의 데이터를 객체 자신(UObject)가 가질 필요가 있는가?그래서 오브젝트들이 가지고 있던 데이터들을 모두 묶어서 월드에서 관리한다. 월드에서 엔티티의 위치, 속도, 체력 등 데이터들을 Fragment로 관리한다. 엔티티 수만큼의 배열 공간을 확보하고, Index를 둔 다음, Fregment들끼리 그 Index를 가지고 상호참조하면서 데이터 계산을 하는 것이다.예를 들어, 어떤 공격 상황이 있다고 할 때, Attacker가 Victim을 공격하면, Victim.Health -= Attack.Damage 한다고 하자. 오브젝트 주도 개발에서는 이 경우, Victim과 Attacker가 모두 캐시에 올라오고 연산한 뒤, 다시 내려간다.반면에, Mass에서는 Victim(Entity ID=1), Attacker(Entity ID=2)를 확인한다. 그 후, HealthFragment[1].Health -= DamageFragment[2].Damage 가 되는 것이다. 이 환경에서는 HealthFragment와 DamageFragment만 캐시에 올라오고 내려갔을 것이다.이 상황에서, 캐릭터 Attacker, Victim가 메모리에 올라올 때는 애니메이션이나 뭐 기타 함수 등 상황에 필요없는 것들도 많이 메모리에 올라왔겠지만, 이 경우 체력과 데미지만 올라왔다.물론, 이렇게 생각할 수 있다. 어차피 엔티티 수 많아지면 HealthFragment, DamageFragment도 크기가 커져서 별 차이 없는 것 아닌가?이 때, 엔티티가 아주 많은 환경을 고려해볼 수 있다. 예를 들어, 뱀서라이크 같은 장르에서 플레이어가 공격을 발사해서 적 50마리가 한번에 맞았다고 하자. 그러면 플레이어와 적50개체가 모두 메모리에 올라갔다 내려갔다하면서 계산되겠지만, 매스에서는 Health,Damage Fragment만 올라와도 계산이 된다.---설명이 잘 됐는지는 모르겠지만, 아무튼 느낌은 이렇다.다만, Mass의 경우 UObject 방식처럼 명확한 데이터 소유권을 갖는 실체가 없기 때문에 약간의 모호성이 있다. 디버깅도 살짝 까다롭고... 하지만 리턴이 꽤 괜찮기 때문에 재밌는 시스템이다.