Engine/Unreal

MMD 모델을 Unreal Engine5에 가져오기 1 - PMX를 FBX로 변환하기

Makuri 2024. 8. 20. 01:31
728x90

홀로라이브에서는 공식적으로 2차 창작에 사용할수 있도록 멤버들의 MMD를 제공해준다.

https://www.mmd.hololive.tv/

 

MMDホロライブ

みなさまに愛されるキャラクターを生み出していく過程には、携わる全ての方々の圧倒的な愛がこもっています。ホロライブの二次創作コンテンツを制作いただくことで活動を支えていただ

www.mmd.hololive.tv

이번에는 홀로라이브 멤버들을 언리얼 엔진으로 가져오는 과정을 이야기해보고자 한다.

 

1. MMD 모델 파일 다운로드

위 홀로라이브 홈페이지에서 원하는 멤버의 Download 선택하면 니코니코 Solid 로 연결된 모델 페이지에서 다운로드 할수 있다. 

니코니코 Solid에서 다운로드 받기 위해서는 니코 니코 동화 로그인이 필요하므로, 계정이 없다면 회원가입 한 뒤에 다운로드 하자.

Hololive 공식 홈페이지 MMD 페이지 - 미나토 아쿠아
니코니코 Solid - 미나토 아쿠아 (공식) 페이지

MMD모델 파일은 zip 파일로 다운로드 받게 되는데, 압축 해제를 위해 열어보면 일본어 파일이기 때문에 언어코드가 깨져서 나올 것이다.

반디집에서는 오른쪽 위에 코드 페이지를 통해 언어 코드 변경할수 있으므로 일본어로 변경해준다.

코드 페이지 변경 전
코드 페이지 변경 후

2. pmx 파일을 fbx로 변경

pmx 는 MMD에서 사용하는 전용 형식이라서, 대부분의 렌러링 프로그램에서는 열 수 없다. 그래서 pmx 를 obj나 fbx 형식으로 변환해야 한다.

1) Blender & Cats on Add on

https://github.com/absolute-quantum/cats-blender-plugin

 

GitHub - absolute-quantum/cats-blender-plugin: :smiley_cat: A tool designed to shorten steps needed to import and optimize model

:smiley_cat: A tool designed to shorten steps needed to import and optimize models into VRChat. Compatible models are: MMD, XNALara, Mixamo, DAZ/Poser, Blender Rigify, Sims 2, Motion Builder, 3DS M...

github.com

 

과거에는 Blender에 Cats on Add on 플러그인을 쓸수 있었는데, 플러그인이 Blender 최신 버전에 대한 지원이 끊기면서 현재 Blender 4.x 에서는 에러가 나서 사용할수 없다. 따라서 기각.

(물론 옛날 버전의 Blender를 가져오면 쓸수 있다. Blender 2.8 버전이면 된다는 듯 하다.)

2) 온라인 컨버터 사이트

의외로 수요가 있는지, 온라인 컨버터 사이트들이 존재하는 듯 한데..잘 되는 곳도 있고 아닌 곳도 있더라. 

다운로드가 조금 걸리지만 컨버팅이 성공했던 사이트 하나 공유해둔다.

나중에도 이 사이트가 잘 운영되고 있고, 온라인이 되는 작업 환경이라면 간단하게 써먹어볼만 하다.

https://anyconv.com/pmx-to-fbx-converter/

 

PMX to FBX Converter Online - AnyConv

AnyConv is a five-star ⭐ PMX to FBX converter ⭐ ️Change pmx to fbx format in batch. Fast and free. No software installation required.

anyconv.com

 

3) Pmx2Fbx

https://github.com/anydream/Pmx2Fbx

 

GitHub - anydream/Pmx2Fbx: Pmx2Fbx: Convert MMD PMX to FBX model file format.

Pmx2Fbx: Convert MMD PMX to FBX model file format. - anydream/Pmx2Fbx

github.com

좀 오래된 깃헙에 컨버터 소스를 올려둔 프로젝트가 있어서 가져와봤다. 

아무래도 좀 오래된 빌드라서 배포된 빌드는 잘 안되기도 해서 직접 소스를 받아서 빌드해보기로 했다.

- Autodesk FBX SDK 설치

선행 조건으로 Autodesk의 FBX SDK가 필요하다.

https://aps.autodesk.com/developer/overview/fbx-sdk

 

FBX SDK

Easily transfer content into the FBX format  Autodesk® FBX® SDK is a free* C++ software development kit (SDK) that lets you create plug-ins, converters, and other applications that use Autodesk FBX technology. With FBX you can translate and exchange 3D

aps.autodesk.com

단, Windows 2020.3.2 버전을 설치하길 바란다. 왜냐하면 그 다음 버전인 Windows 2020.3.4 부터 x86 (32 bits) 라이브러리 지원이 끊겼다. Pmx2Fbx 프로젝트가 Win32 구성만 있기 때문에 x86 라이브러리가 필요하다.

(물론 Pmx2Fbx를 x64 라이브러리를 사용하도록 솔루션 구성을 하면 되긴 하다. 부수적인 오류는 수정하고..)

해당 버전에서 사용 중인 비주얼 스튜디오 버전으로 다운로드 받아서 설치하면 된다.

(참고로 VS2022 에서 VS2017 버전이나 V2019 버전을 받아도 되긴 한다.)

이때 설치 중간에 나오는 설치 경로를 메모장 등에 보관해둔다.

 

이제 Pmx2Fbx를 빌드해보자. Release 빌드를 기준으로 설명한다.

Clone 받아서 보면 다음과 같다. PmxLib.sln 솔루션 파일을 VS로 열어본다.

16년도 프로젝트니 당연히 플랫폼 도구 대상 변경이 뜬다. 확인을 눌러 변경해준다.

Readme의 설명에 따라 속성 관리자 창을 열고 FBXSDK (Debug 빌드면 FBXSDK_d)를 수정해야 한다.

1) '공용 속성 - C/C++ - 일반 - 추가 디렉토리'에 있는  첫번째 경로를 아까 FBX SDK를 설치한 경로의 include 폴더로 지정

C:\Program Files\Autodesk\FBX\FBX SDK\2020.3.2\include

2) '공용 속성 - 링커 - 일반 - 추가 라이브러리 디렉터리'에 있는 첫번째 경로를 아까 FBX SDK를 설치한 경로의 Lib 경로로 지정한다.

C:\Program Files\Autodesk\FBX\FBX SDK\2020.3.2\lib\vs2017\x86\release

(Debug 빌드 (FBXSDK_d) 라면 C:\Program Files\Autodesk\FBX\FBX SDK\2020.3.2\lib\vs2017\x86\debug )

3) 프로젝트가 FBX SDK의 예전 버전을 기준으로 작성되어서인지, 라이브러리 구성을 추가해주어야 한다.

'공용 속성 - 링커 - 입력- 추가 종속성' 에 libxml2-md.lib 와 zlib-md.lib를 추가로 넣어준다.

4) 이 상태로 빌드해보면 일부 빌드에러가 난다. 현 시점에서 발생하는 에러 위주로 다음과 같이 수정한다.

PmxReader.h 에 '#define _MAX_INT_DIG 32' 를 추가해준다.

5) 여기까지 오면 빌드가 성공할 것이다. 그런데 희안하게도, 추후 fbx 로 변환을 하면 텍스처 파일이 이상한 파일명으로 복사되는 현상이 있는데, 이걸 위해 FbxHelper.cpp에서 g_bLatin를 false 로 수정해준다.

 

6) Release | Win32 구성으로 설정하고 빌드한다.

7) 솔루션 파일이 있던 경로의 Release/PmxLib.exe 이 빌드되어 나올 것이다.

8) 콘솔 프로그램이기 때문에, cmd를 열어서 인자를 넣어서 실행해주어야 한다.

PmxLib.exe {pmx 파일 경로} 로 실행하면 된다.

그러면 같은 파일 이름 + .fbx 이 붙은 파일이 생성된다.

이 파일을 blender 로 열어보면 잘 나온걸 확인할 수 있다.

딱히 스샷이 잘못된건 아닌데, 오른쪽 위에 Viewport Shading 을 선택하고, Bone을 꺼주면 깔끔하게 볼수 있다.

 

비교

2번의 온라인 컨버터와 3번의 Pmx2Fbx 로 변환한 파일을 비교해보면 파일 크기 차이가 꽤 크게 난다.

변환된 fbx의 결과물은 별로 차이가 없어서 온라인 컨버터 쪽은 조금 의아하다.

이하, Pmx2Fbx로 추출한 경과로 설명하겠다.

 

3. Unreal5를 위해 Export 하기

이 상태의 fbx를 그대로 Unreal5에 Import 하면 매터리얼 등이 깨져나오는 현상이 있었다.
그래서 깔끔하게 보이는 Blender에서 한번 Export 하고 넘어가기로 했다.

1)  Export 설정

Blender 메뉴에서 File - Export - FBX (.fbx) 를 선택

Include 에서
Visible Objects (보이는 오브젝트) 선택
Object Types 에서 Empty와 Camera, Lamp 제거 (Shift + 클릭)

Transform 에서
Forward를 X Forward로 변경
Up을 Z Up으로 설정
(Unreal Engine에서는 X+를 정면으로 보기 때문에)

Geometry 에서
Smoothing 을 Face로 변경 ( Unreal5에 스무딩 그룹을 포함시키기 위해)

그 외에는 기본 설정으로 둔다.
Animation 모두 선택 등등

Export FBX를 누른다.

위에서 파일명을 지정한대로 fbx 파일이 새로 생겼다. (맨 위)

(만약 fbx 파일이 터무니없이 작으면 추출할 때 Include 설정이 제대로 안된거니까, 확인)

2) Unreal5 에 Import 하기

Unreal5 의 콘텐츠 브라우저에 드래그 앤 드롭으로 가져오면, FBX 임포트 옵션이 나온다.

메시에서
스켈레탈 메시 체크
메시 임포트 체크
스켈레톤 없음 선택 ( 스켈레톤 자동 생성됨 )
노멀 임포트 메서드를 Import Normals 로 선택
피직스 에셋 생성 체크 해제 ( 콜리젼 때문에 바닥 좌표가 틀어진다. 콜리젼 및 피직스 에셋은 필요하면 나중에)

트랜스폼에서
균등 스케일 임포트를 10으로 설정 (기본적으로 크기가 작다)

기타에서
씬 변환을 체크 해제 (UE 좌표계로 강제 전환을 막는다)

머티리얼에서
위치 검색 Local
머티리얼 임포트 메서드 Create New Materials

모두 임포트를 클릭한다. 잠시 뒤 Import 가 완료된다.

스켈레탈 메시를 열어보면 잘 나오는걸 확인 할 수 있다.

 

다음에는 애니메이션을 적용해보고자 한다.

728x90