게임 개발/유니티 엔진

유니티 엔진의 맵/오브젝트를 언리얼 엔진으로 옮기기

술단고 2024. 9. 2. 15:48

 

이번 졸업 프로젝트 게임을 개발하던 도중, 한 가지 문제에 부딪쳤다.

바로 유니티 엔진에서만 지원하는 에셋샘플 맵오브젝트를, 언리얼 엔진으로 옮길 수가 없다는 것이다.

 

유니티 → 언리얼 의 이주 자체가 어려운건 알고 있었지만,

특히 유니티 엔진의 씬(레벨)을 언리얼 엔진의 레벨(씬)으로 옮기는게 이렇게 어려울줄 몰랐다.

이곳저곳 구글링을 해봤으나 제대로 된 정보가 거의 없었고...

블렌더까지 설치하며 메쉬 병합을 해보는 등 엄청나게 땅을 파며 드디어 알아냈다.

 

이하의 과정을 따라하면, 유니티 엔진의 맵, 오브젝트, 레벨, 씬을 언리얼 엔진으로 그대로 옮길 수 있다!


 

1. 유니티를 최대한 최신 버전으로 설치한다.

이번 기회에 설치하게 된 2022.3.44f1 LTS

 

사실 필수적인 작업은 아니지만,

추후에 서술할 FBX Exporter가 유니티 에디터의 버전에 영향을 받는다.

2020~2021 버전으로 해도 Blender를 사용하지 않을 것이라면 괜찮은 것 같다.

 

2. Package Manager에서 FBX Exporter을 설치한다.

Window - Package Manager - Unity Registry에서 FBX Exporter 검색 후 설치

 

 

유니티의 오브젝트 / 프리팹을 언리얼에서도 열 수 있는 파일로 만드려면, FBX가 제격이다.

FBX는 3D 모델에 쓰이는 확장자이자 파일이며, 무려 애니메이션도 포함 가능한 파일이다.

 

3. 열심히 만든 맵 / 오브젝트를 하나의 오브젝트 아래로 묶는다.

수많은 맵 오브젝트들을 MapObject라는 부모 오브젝트를 하나 만들어 하위로 두었다.

 

 

유니티에서 만든 맵 오브젝트를 하나하나 따로 추출하여 언리얼에서 재조립하는건, 정말 말도 안되게 비효율적이다.

따라서, 우선 이 모든 오브젝트들을 하나의 오브젝트로 묶는다. 마치 프리팹을 만드는 과정과 유사하다.

 

4. 해당 오브젝트를 FBX로 내보낸다.

Export To FBX 후 사항 선택하기

 

여기가 중요하다.

별다른 작업을 하지 않을 것이라면, Export To FBX 선택 후 오른쪽과 같이 옵션을 맞춘다.

만약 옮기려는 오브젝트 / 맵에 애니메이션이 포함되어 있다면,

Include 옵션을 Model(s) + Animation으로 해준다. 아니라면 Model만 하는것이 안전하다.

 

여기서 Embed Textures를 체크해야, Blender로 옮길 때 텍스처 정보를 같이 불러올 수 있다.

이 Embed Textures 옵션은 2022 버전 이상의 최신 유니티 에디터에서만 생긴다.

 

또한 Blender를 이용할 예정이라면, Export Format을 ASCII가 아닌 Binary로 설정해주어야 한다.

블렌더는 ASCII FBX를 지원하지 않기 때문이다.

 

(선택) 4-1. Blender에서 불러오기 후 후처리

원한다면 Blender에서 불러올 수 있다.

 

만약 메쉬 병합을 하여 저 많은 오브젝트를 하나로 합치거나,

별도로 편집하고 싶은 부분이 있다면 Blender를 사용해도 좋다.

 

메쉬 병합을 하고 싶다면, 단축키 A를 눌러 모든 오브젝트를 선택하고,

Ctrl + J 를 눌러 메쉬를 병합할 수 있다.

 

이 때 모든 재질(텍스쳐) 정보를 잃고 저렇게 하얗게 표시되는 경우가 있을 수 있는데,

Emdeb Textures 옵션을 체크해 얻은 텍스처 png들을 옵션에서 할당해주면 괜찮아질 것이다.

 

편집 이후 다시 이 파일을 FBX로 내보내면 된다.

필자는 저 많은 오브젝트를 모두 언리얼에 옮길 것이기 때문에, Blender는 쓰지 않겠다.

 

5. 언리얼 엔진에 FBX 임포트하기

오브젝트가 담길 폴더를 하나 만들고 FBX를 드래그한다.

 

이 때 웬만하면, FBX를 담을 폴더를 하나 새로 만드는걸 추천한다.

수많은 스태틱 메쉬들과 머티리얼 파일들이 정말 산처럼 쌓일 것이기 때문에,

다른 파일들과 섞여버리면 정말 골치아플 것이다.

 

나나이트 빌드를 체크해주자.

 

FBX를 임포트 할 때 나나이트 빌드는 체크해주는 것이 좋다.

언리얼 5에선 나나이트 가상화 지오메트리를 지원하는데, 체크해준다면

나나이트가 활성화 된 스태틱 메쉬가 되어 지오메트리 복잡성이 증가해 많은 오브젝트를 다룰 수 있고,

매우 효율적인 방식으로 데이터 포멧을 렌더링하기 때문에 최적화에 도움이 될 것이다.

 

참고) https://dev.epicgames.com/documentation/ko-kr/unreal-engine/nanite-virtualized-geometry-in-unreal-engine

 

만약 스켈레탈 메시를 원한다면 스켈레탈 메시도 체크해주면 된다.

나는 스태틱 메시로 임포트해보겠다.

다른건 그대로 두고, 스케일을 바꾸고 싶다면 균등 스케일 임포트를 수정한다.

 

이후 모두 임포트를 누른다.

 

6. 기다린다.

옮기려는 오브젝트가 많을 수록 로딩이 오래 걸린다...

 

옮기려는 오브젝트가 너무 많으면 크래시가 뜰 수 있다.

 

 

너무 많고 복잡한 오브젝트를 한 번에 옮기려고 하면, 이렇게 크래시가 터지며 프로젝트가 꺼질 수 있다.

그럴 땐 오브젝트 크기를 좀 줄여보도록 하자..!

나같은 경우엔 맵에 들어가는 메쉬가 너무 많다보니, 땅 / 건물 / 자동차 / 환경 등등으로 분할하여 옮겼다.

 

로딩 40% 대에서 뚝 멈출 때가 있는데, 기다리면 전부 임포트될 것이다.

 

수많은 메시지 로그

 

다 옮겨지면 엄청난 메시지 로그가 뜰 텐데, 빨간 심각한 오류가 아니라면 무시해도 괜찮다.

 

임포트된 수많은 오브젝트들

 

FBX 파일 하나에 수많은 메쉬가 들어있으면,

유니티의 프리팹처럼 하나로 퉁친 오브젝트가 임포트되는 것이 아니다.

 

옮겼던 해당 오브젝트의 수많은 메쉬들이 별도로 하나씩 전부 임포트된다!

 

만약 이게 싫다면 Blender를 거쳐 메쉬를 병합해야 한다.

그 편이 렉도 덜 걸릴테고 좋지만, Blender를 따로 설치해야 하고 텍스처 문제도 해결해야 한다.

 

7. 맵에 적용한다.

설마 이 많은걸 하나하나 일일히 옮기나요...?

 

 

메쉬 파일이 많다고 겁먹을 필요 없다.

필자도 이 오브젝트를 모두 하나하나 옮겨야 하는 줄 알고 겁을 지레 먹었는데,

다행히도 오브젝트별로 위치정보를 기억하고 있다!

 

필터 설정

 

임포트한 폴더에서 스태틱 메시 필터링을 걸어주자.

 

필터링 후

 

그럼 이렇게 스태틱 메시 파일만 보이게 되는데, 이 때 Ctrl + A를 눌러 모든 스태틱 메시를 선택한다.

이후 맵으로 드래그해주면!

 

옮기기 성공!

 

 

약간의 로딩 후에 오브젝트들이 옮겨진다!

 

이 때 필자의 해당 스크린샷도 그렇고, 몇몇 오브젝트가 머티리얼을 잃어버릴 수도 있다. 이 경우는 유니티에서는 지원하는 복수 머티리얼이지만, 언리얼에서는 지원하지 않는 머티리얼 형식이라 참조값을 잃어버리는 경우이다.

 

이럴 땐 머티리얼이 없는 오브젝트만 선택해 적당히 어울리는 다른 머티리얼로 교체해주면 된다.

 

원하는 오브젝트들을 복수 선택 후 머티리얼을 골라주면, 적용 완료!

 

 


 

 

오늘은 이렇게 유니티의 오브젝트 / 맵을 언리얼로 옮기는 방법을 알아보았다!

정말... 한국어로 된 가이드는 하나도 없고, 영어로 된 가이드도 거의 없다시피 해서

이것저것 해본 결과 간신히 알아낸 정보이니 찾아온 독자들에게 도움이 됐으면 좋겠다.