본문 바로가기

ETC/Un[real]ity

언리얼 vs 유니티: 2. 에셋 관리 방식

게임을 만들기 위해서는 다양한 리소스가 필요합니다. 캐릭터 모델링 메쉬, 모델링의 겉모습을 표현해 줄 텍스쳐, 리깅 된 모델링을 움직여 줄 애니메이션, 글자를 그리게 해 줄 폰트 등등. 이들은 게임엔진에서 사용하려면 일련의 과정을 거쳐야만 합니다. 복잡한 과정들을 간단히 요약하자면, 범용적으로 통용되는 파일 포맷으로 저장된 데이터들을 엔진에서 메모리에 로드 가능한 형태의 에셋으로 변환해주는 작업들입니다. 프로젝트가 개발중인 단계에서는 로딩 속도나 수정, 개발 사이클과 관련해 어떻게 전략을 수립할 것인지가 마일스톤 일정을 맞추는 데에 비중있는 역할을 차지하기도 합니다.

 

유니티

에셋을 프로젝트에 임포트하더라도 원래의 파일을 그대로 유지하고있습니다. 이미지 파일 포맷인 PNG, TGA, BMP 등을 프로젝트내 에셋 폴더에 넣게 되면, 파일은 그대로 유지되면서도 에셋의 이름과 같은 이름을 가진 META 파일이 생성됩니다. 이 META 파일 안에는 이 메쉬 에셋의 임포트 설정이 기록되어있습니다.

 

리깅된 캐릭터 fbx 파일

이 파일을 토대로 Library 폴더에 데이터캐쉬(Cache)를 생성합니다. 프로젝트를 유니티 엔진으로 열고, 프로젝트의 루트 디렉터리를 보면 Library 폴더가 생깁니다. 이 폴더에 미리 게임 엔진에서 바로 사용할 수 있도록 데이터를 만들어 저장해두는 것입니다.

 

Library 폴더 안

 

이러한 에셋 관리 방식에서는 외부 툴에서 바로 프로젝트에 파일을 저장하도록 파이프라인을 구성할 수 있습니다. 이미 임포트하여 사용하고 있던 이미지의 색을 바꾸거나, 폰트를 바꾸었을 때 포토샵에서 수정 후 프로젝트의 Assets 폴더 내 이미지 에셋을 바로 덮어쓰기 해도 됩니다. 엔진은 이전에 사용하던 임포트 설정에 따라 새로운 이미지를 불러들입니다.

임포트 설정은 해당 에셋을 프로젝트 뷰에서 선택하면 인스펙터에 표기됩니다. 모델 파일 포맷같은 경우 머티리얼이나 텍스쳐 등의 Embeded 리소스가 존재할 수 있습니다. Extract Materials 버튼을 눌러 인덱스에 맞는 기본 머티리얼을 생성할 수 있습니다.

 

일부 파일포맷에 한해 그 에셋을 토대로 보조 에셋을 만들어 낼 수 있는 기능을 직접 구현해 사용할 수 있습니다. 유니티에서는 스키닝된 모델의 애니메이션을 공유하기 위해 휴머노이드를 사용하기 용이한 아바타 생성 기능을 제공하고 있습니다.

유니티는 에셋을 그대로 유지한채로 임포트 설정을 메타에 저장하기 때문에, 동일한 이름의 에셋이 확장자만 다르다면 구분하여 사용이 가능합니다. White.tga, White.fbx, White.wav, White.json 은 모두 다른 에셋으로 인식될 수 있습니다.

 

언리얼

에셋을 프로젝트에 임포트 후 저장하면, 파일 디렉터리에서 확인시 uasset이라는 확장자로 파일이 생성됩니다. 지원하는 파일에 따라 원본 파일의 데이터를 저장하는 경우도 있지만 대부분은 변환된 데이터만을 저장합니다. 이것이 에셋 관리에 있어 유니티 엔진과 다른 점들 중 하나입니다. 파일 임포팅을 시도하면 다이얼로그가 항상 나타납니다. 어떤 설정에 따라 임포트할 것인지 묻고, 임포트 후에도 변경할 수 있는 옵션과 그렇지 않은 옵션이 존재합니다. 파일 하나를 임포트한다고 항상 하나의 uasset이 생성되는 것은 아닙니다. 스키닝된 메쉬를 스켈레탈메시로 임포트하는 경우, 본 구조 데이터를 담은 스켈레톤과, 물리 시뮬레이션을 위한 피직스 에셋, 그리고 스켈레탈 메시가 생성됩니다.

 

 

스켈레탈 메시가 엔진에서 제공하는 기능들을 정상적으로 사용하기 위해서 다음 에셋들을 생성해주는 옵션이 기본으로 켜져 있습니다. 임포트시 표시되는 다이얼로그에서 이미 있는 스켈레톤을 선택해도 되고, 피직스 에셋을 생성하지 않아도 됩니다.

외부 툴에서 프로젝트 내의 에셋에 바로 접근할 수 없습니다. 그래서 작업하는 폴더와 작업물이 저장될 위치를 따로 마련해야합니다. 이미 임포트 된 리소스를 수정할 수는 없고, 이전에 임포트했던 source file의 경로의 리소스를 덮어쓰기 한 뒤, 엔진에서 리임포트를 시켜주는 방식을 사용하여야 합니다. 엔진에서 꼭 리임포트를 해주어야한다는 것이 유니티에 비해 단점으로 작용할 수도 있지만, 큰 프로젝트에서 리소스 관리를 해주는 경우 오히려 괜찮은 기능으로 활용될 수도 있습니다.

 

 

 

에셋은 원본 소스 파일의 경로를 저장하고 있습니다. 새로운 경로로부터 리임포트도 가능합니다. 엔진을 다루는 직군과 아트 리소스를 제작하는 직군이 겹치는 부분이 크지 않아 버전 컨트롤 도구를 통해 전달받는 경우 크게 불편함을 느끼지 못할 수도 있습니다.

언리얼 엔진은 지원하는 파일 포맷에 대해 임포트 파이프라인을 거쳐 uasset 파일로 변경시킵니다. 그래서 동일한 이름의 여러 타입 오브젝트를 한 경로에 위치시킬 수 없습니다. White.tga와 White.wav 는 모두 White.uasset 으로 저장될 것이므로, 동일한 이름을 허용하지 않고 있습니다. 이를 고려해 리소스 작업시 네이밍 규약을 미리 정하고 숙지한 뒤 export하는 것이 바랍직합니다.

추가 내용)

언리얼 프로젝트 디렉토리에 직접 FBX 파일을 옮겨두어 언리얼이 자동으로 임포트하도록 하는 방법도 있습니다. 유니티와 비슷하게 동작한다고 생각할 수 있습니다. 이런 경우 원본 에셋이 변경되면 언리얼이 자동으로 변경사항을 감지해 임포트한다고 합니다. 직접 테스트해보지는 않았으나, 확인 후 내용을 업데이트하도록 하겠습니다.