최근에 출시된 언리얼 엔진 5.1에는 더 작아진 워크스페이스와 더 빠른 데이터 동기화를 지원하는 새로운 기능인 버추얼 에셋이 도입되었습니다.
현재 베타 버전인 버추얼 에셋은 벌크 데이터에서 정형 데이터를 분리할 수 있는 방법을 제공하여 개발자가 Perforce와 같은 소스 컨트롤 시스템에서 필요한 것만 동기화할 수 있게 해줍니다. 이를 통해 개발자는 전체 오브젝트 데이터에 액세스할 필요가 없어 더 작은 워크스페이스와 더욱 빠른 동기화를 실현할 수 있습니다.
이 기술 블로그에서는 언리얼 엔진 팀의 시니어 제품 매니저 그레이스 엔(Grace Yen)과 버추얼 에셋 리드 개발자 폴 칩체이스(Paul Chipchase)가 버추얼 에셋에 대해 자세히 설명합니다. 버추얼 에셋이 여러분의 프로젝트에 적합한지 살펴보세요.
버추얼 에셋을 통해 해결할 수 있는 문제
지난 몇 세대 동안 이뤄진 게임 개발 역사에서 프로젝트의 규모와 관련된 일부 흥미로운 데이터 트렌드를 확인할 수 있었습니다. 일부 언리얼 엔진 사용자를 대상으로 비공식 설문조사를 진행하여 검증한 결과, 프로젝트 규모가 점점 더 커지고 있을 뿐 아니라 많은 개발자들이 여러 해에 걸친 게임 수명 주기 동안 지속적인 업데이트를 하면서 GaaS(Games-as-a-Service) 모델로 이동하는 추세를 보였습니다.
이와 더불어 업데이트 제공 방식도 끊임없이 발전하고 있었습니다. 일부 팀은 '기능 스트림'을 사용하여 빌드가 안정화되고 출시 준비가 완료될 때까지 최첨단 기능이 나머지 팀에게 영향을 미치지 않도록 합니다.
일부 팀원은 라이브 서비스를 지원하기 위해 제품의 여러 출시 라인과 '메인' 및 '고급' 타입의 개발 워크스트림을 갖춘 모델들 간에 작업하고 있다는 사실을 발견했습니다.
이는 또 다른 문제를 야기합니다. 팀원이 SSD 공간 부족으로 어려움을 겪는 사례가 늘어나며, 경우에 따라서는 현재 수행 중인 작업에 사용할 여유 공간을 만들기 위해 곧 다시 필요할 작업 스트림을 비동기화해야 하는 낭비적인 결정을 내려야 할 수 있습니다.
팬데믹이 확산되기 전, 에픽게임즈를 비롯한 일부 스튜디오는 동기화 크기와 시간에 관련된 문제를 경험했습니다. 에픽게임즈는 사용자에게 더 빠른 액세스 포인트를 제공하기 위해 퍼포먼스 에지 서버와 같은 솔루션을 디플로이했습니다. 하지만 2020년에 재택 근무를 해야 했을 때 팀원들은 인터넷 연결이 안정적이지 않거나 인터넷 속도가 제각각인 문제를 경험하기 시작했습니다.
최고의 팀을 구성한다는 것은 때때로 팀원들이 서로 다른 곳에 있게 된다는 것을 의미하며, 에픽게임즈는 이러한 지점에서 역동성이 발현될 수 있다고 생각합니다. 팀 구성원이 두 위치에서 시간을 보내는 하이브리드 시나리오에서도 위치별로 할당된 하드웨어에 여러 번 동기화해야 하는 복잡한 문제가 발생할 수 있습니다.
픽셀 스케일의 디테일과 많은 오브젝트 수를 지원하도록 디자인된 언리얼 엔진 5의 가상화 지오메트리 시스템인 나나이트와 같은 강력한 기술을 통해 향후에는 프로젝트 규모가 더욱 커질 것으로 예상됩니다.
요약하면, 사람들은 점점 더 많은 시간과 공간을 동기화하는 데 소비하고 있으며, 그 이유는 다음과 같습니다.
프로젝트 규모가 점점 더 커지고 있음
게임 수명 주기가 길어짐에 따라 더 많은 콘텐츠가 추가되고 있음
문제가 확대되고 있는 이유는 다음과 같습니다.
새로운 기능 출시 또는 라이브 서비스 관리와 같은 여러 작업 스트림을 동기화해야 함
SSD 같은 물리적 하드웨어는 프로비저닝 비용이 더 비싸고 어려우며 더 많은 시간이 소요됨
팀의 규모가 클수록 효율적으로 작업하기가 더 어려워질 수 있음
하이브리드 작업자와 원격 작업자 간에 동기화 문제가 발생할 수 있음
나나이트를 활용하기 시작한 팀은 비주얼 퀄리티를 높일 수 있지만 데이터 세트 또한 커짐
에픽게임즈가 버추얼 에셋에 접근하는 방식
에픽게임즈의 버추얼 에셋 솔루션은 필요한 데이터만 동기화하고 나중에 필요한 추가 데이터에 신속하게 액세스할 수 있어야 한다는 근본적인 아이디어를 기반으로 빌드되었습니다.
이 접근법은 팀이 문제를 해결하기 위해 작업해 온 일부 방식에서 전환한 것입니다. 저희를 포함한 여러 팀은 개발자들에게 다운타임을 최소화하기 위해 사전에 계획을 수립하고 야간 동기화를 구성하는 방법을 전수하는 데 능숙해졌습니다. 버추얼 에셋을 사용해도 이런 방식은 여전히 유효합니다. 버추얼 에셋의 강점은 프로젝트에 참여하고 있는 모든 사용자가 데이터를 더 빠르고 효율적으로 동기화할 수 있게 해 준다는 것입니다. 특히 미리 계획할 수 없고 아직 최신 상태가 아닌 작업 스트림에서 긴급한 문제가 발생하는 경우에 더욱 유용합니다.
패키지 파일(.umap/.uasset)을 평가한 결과, 사용자가 동기화해야 하는 데이터를 최소화할 수 있는 획기적인 방법을 고안해 낼 수 있었습니다. 흔히 사용자는 에셋에 대한 충분한 정보만 있으면 에디터에서 의미 있는 방식으로 에셋을 표시할 수 있습니다. 예를 들어 텍스처의 경우에는 섬네일과 좌표 및 스케일 같은 에디터 프로퍼티가 필요할 수 있습니다. 하지만 UTexture 오브젝트의 벌크 데이터는 원본 원시 픽셀 데이터이므로 실제로는 미리 필요하지 않습니다. 이에 착안하여 이러한 에셋을 두 부분으로 나눴습니다.
'정형 데이터'는 소스 컨트롤에서 에셋이 현재 위치한 곳에 남아 있습니다. 여기에는 에디터가 에셋을 로드하고 나타내는 데 필요한 모든 것이 포함되어 있습니다.
'벌크 데이터'는 필요하지 않을 가능성이 높은 부분으로, 별도의 소스 컨트롤 영역에 분할됩니다.
버추얼 에셋 개발의 원칙 중 하나는 사용자의 기존 워크플로를 유지하는 것이었습니다. 팀원은 동일한 방식으로 더 빠르게 동기화하고 작업할 수 있어야 합니다. 핵심 에셋 메타데이터를 분할하고 원본 소스 위치에 남겨둠으로써 사용자는 이전과 동일한 방식으로 데이터를 동기화할 수 있습니다. 이 툴은 필요한 경우 새 소스 위치에서 벌크 데이터를 가져오기 위한 작업을 처리합니다. 이를 진행하려면 소스 컨트롤 관리자와 협력하여 원본 소스 컨트롤 위치와 동일한 액세스 권한을 가진 별도의 위치를 구성해야 합니다.
정리하기:
벌크 데이터가 다른 소스 컨트롤 위치에 저장되도록 에셋을 분할합니다.
사용자는 이전처럼 작업하지만 더 작은 핵심 에셋 메타데이터 조각을 동기화합니다.
드문 경우지만, 가지고 있지 않은 벌크 데이터가 필요한 경우 이를 가져올 수 있습니다.
버추얼 에셋 디플로이 방법
버추얼 에셋 기능은 현재 베타 버전이므로 시험해 보는 것은 좋지만 변경의 여지가 있으므로 프로덕션 프로젝트에서는 주의해서 사용해야 합니다. 하지만 시즌 22부터 포트나이트 프로덕션에 사용할 수 있을 정도로 충분히 강력하다는 점을 강조하고 싶습니다.
다음은 팀에서 버추얼 에셋을 사용하는 데 도움이 되는 몇 가지 모드입니다.
프로젝트의 규모와 프로덕션 스케줄에 따라 다른 접근 방식을 시도할 수 있으며, 예를 들면 다음과 같습니다.
새 프로젝트를 시작하는 경우 즉시 버추얼 에셋을 사용하는 것이 좋습니다.
풀 프로덕션 중인 프로젝트가 있는 경우 반복작업이 많은 게임 영역이나 에셋에 버추얼 에셋을 적용하는 것을 피하고 싶을 수 있지만 장기간 사용하지 않은 더 큰 에셋을 패스(pass)할 수 있습니다.
또는 크기별로 상위 에셋을 타기팅하고 이러한 에셋을 달성하기 쉬운 목표로 삼아 가상화할 수 있습니다.
고려해야 할 사항:
아직 '오프라인으로 작업' 모드가 구현되지는 않았지만 유용한 기능이라고 판단하고 있습니다. 이 모드는 언리얼 엔진 5.2에 포함될 예정입니다. 즉, 비행기에서와 같이 연결이 끊어진 상태에서 작업 중인 사용자가 있는 경우 현재로서는 버추얼 에셋이 제대로 작동하지 않습니다. 편집하려는 항목의 벌크 데이터를 얻을 수 없는 위치에 사용자가 있는 경우 에디터에 크래시가 발생하지는 않지만 벌크 데이터를 가져오려면 다시 연결해야 합니다.
기본 데이터가 분할됩니다. 프로덕션 중에는 문제가 되지 않지만 기존 인프라 외부에서 게임의 콘텐츠 데이터를 출시할 계획인 경우 추가적으로 고려해야 하는 사항이 있습니다. 이 경우 독립형 언리얼 가상화 툴을 사용하여 벌크 데이터를 패키지 파일에 다시 한번 저장함으로써 가상화된 에셋을 원본 형태로 '리하이드레이션'할 수 있습니다.
이 구현은 사용자가 적절한 연결 속도로 공유 데이터 캐시에 액세스할 수 있는 경우에만 제대로 작동합니다. 그렇지 않으면 눈에 띄는 멈춤 현상이 발생하게 되므로 모든 동기화 시간과 공간을 미리 확보하는 것이 나을 수 있습니다. 이에 대해서는 다음 섹션에서 더 자세히 다룹니다.
현재는 Perforce 소스 컨트롤만 지원합니다.
이 기능은 아직 베타 버전입니다. 내부적으로 디플로이되었고 현재 작업 중이지만, 버추얼 에셋이 언제 정식 버전 상태로 전환되는지 또는 이 기능이 향후 어떻게 지원될지는 확실하지 않습니다.
버추얼 에셋이 프로젝트에 적합한지 여부 판단
다양한 요인이 관련되어 있기 때문에 버추얼 에셋이 여러분의 프로젝트에 도움이 될 것인지에 대한 확답은 드릴 수 없습니다. 하지만 아래에 나와 있는 질문은 버추얼 에셋이 프로젝트에 시도할 만한 솔루션인지 결정하는 데 도움이 될 것입니다. 가상화가 일방적인 해결책이 아니라는 점에 유의하는 것 또한 중요합니다. 선택에 따라 언제든지 어떤 가상화된 데이터도 리하이드레이션할 수 있습니다.
팀에서 현재 디스크 공간 부족 문제를 겪고 있나요? 아니면 이러한 문제가 예상되는 지점까지 데이터가 지속적으로 증가하고 있나요?
팀원이 두 개 이상의 프로젝트 버전을 동기화해야 하는 경우가 많으며 일반적으로 버전 간에 많은 콘텐츠를 공유하나요?
팀원이 적절한 공유 파생 데이터 캐시(Derived Data Cache, DDC)에 액세스할 수 있나요?
이 질문은 답이 정해져 있는 질문이기도 합니다. 대부분의 팀원이 공유 DDC에 액세스할 수 있고 외부 작업자가 일부 있는 경우 프로젝트 전체에서 버추얼 에셋을 사용할 수 있지만 특정 팀원은 사용하지 않도록 설정할 수 있습니다. 팀원이 체크인할 때 에셋을 '가상화 해제'할 경우 이를 포착하고 자동으로 수정하기 위해 스크립트를 실행하려고 시도할 수 있습니다. 하지만 이렇게 하면 소스 컨트롤에 혼란이 발생할 수 있습니다.
버추얼 에셋의 이점을 극대화하기 위한 팁
언리얼 에디터 체크인 워크플로를 사용하는 것을 권장합니다. 이 경로를 거치면 체크인 시 에셋이 여전히 가상화되어 있는지 확인하게 됩니다. 가상화된 에셋을 확인하기 위해 Perforce에서 실행할 수 있는 일부 툴을 제공하지만 사용자가 이를 우회하여 건너뛸 가능성은 항상 존재합니다.
버추얼 에셋의 실제 사용 사례
에픽게임즈는 언리얼 엔진에서 출시하는 기능을 고객에게 선보이기 전에 직접 사용해 보는 것을 좋아합니다. 내부/샘플 프로젝트에서 버추얼 에셋을 지원하는 것 외에도 포트나이트에 이 기능을 도입했습니다. 아래 수치는 포트나이트에서 확인된 공간 및 시간 절감 사항에 대한 시각적인 예시일 뿐이며 수치는 게임의 에셋 타입 구성에 따라 달라집니다. 예를 들어 실제 게임은 아니지만 수많은 나나이트 메시가 사용된 에인션트의 협곡에서 버추얼 에셋을 적용하여 50배를 절감했습니다.
포트나이트에서 측정한 수치는 다음과 같습니다.
다음 단계
언리얼 엔진 5.1의 버추얼 에셋:
Perforce와의 연동
텍스처 및 오디오 에셋 지원
에셋 타입, 패키지 경로 등으로 활성화할 수 있는 다양한 모드 제공
에셋 콘텐츠의 해시로 레퍼런스되는 벌크 데이터
다음을 비롯하여 보다 다양한 버추얼 에셋 기능을 추가할 계획입니다.
모든 데이터를 미리 동기화하기 위한 오프라인으로 작업 모드
보다 다양한 에셋 타입 지원(예: 나나이트를 비롯한 스태틱 메시)
다른 소스 컨트롤 솔루션에 대한 지원
지금까지 읽어 주셔서 감사합니다. 이 가이드가 도움이 되었기를 바랍니다. 버추얼 에셋에 대한 자세한 내용은 여기에서 다른 문서를 참고하세요.
지금 언리얼 엔진을 다운로드하세요!
세계에서 가장 개방적이고 진보된 창작 툴을 받아보세요.
모든 기능과 무료 소스 코드 액세스를 제공하는 언리얼 엔진은 제작에 바로 사용할 수 있습니다.