[Unity] 원신 모델 파일 변환 및 쉐이더와 애니메이션 적용, 각종 문제 해결법

1. PMX to FBX 변환

https://stereoarts.jp/

Stereoarts Homepage □ Theta Shader Pack 概要 Unity 向けの THETA / THETA S の全天周画像をリアルタイムに Equirectanguler に変換するシェーダーと、それらの補助スクリプト一式です。 ThetaShaderPack_20150926.zip 2015/09/26 初版 □ SAFullBodyIK 概要 Unityの人体モデルに手軽にフルボディIKを導入するためのコンポーネントです。 GitHub にて公開中です。 Stereoarts/SAFullBodyIK □ SAColliderBuilder 概要 Unity ...

stereoarts.jp

위 사이트 방문하여 MMD4Mecanim를 다운을 먼저 받는다.

내리다보면 해당 항목이 있는데 'MMD4Mecanim Beta 20200105.zip'을 클릭하여 다운받으면 된다.

이제 유니티를 켜고 3D 프로젝트로 새로 생성해준다. 필자의 버전은 2021.3.3f1

테스트로 넣어볼 캐릭터는 페이몬. 다른 캐릭터로 해도 상관없지만 포스팅과 다르게 구동이 되지 않는다거나 하는 문제는 아래에서.

다운받은 MMD4Mecanim을 압축을 해제하고 유니티 패키지를 설치해준다.

기본으로 전부 체크되어 있는 상태로 Import.

업데이트 하라는 문구가 나오면 그냥 Yes 누르면 된다.

사용할 모델 PMX도 압축을 풀어서 에셋폴더에 던져놔준다.

폴더를 살펴보면 MMD4Mecanim 파일이 있을텐데 이것을 클릭.

인스펙터 창에 무수히 많은 중국어가 보일텐데 다 무시하고 제일 하단에 체크박스 3개 전부 체크하고 Agree 눌러주면 된다.

이후 나온 창에서 MMD의 VMD 모션을 사용하지 않을꺼면 바로 Process를 눌러주면 되고, 사용할 경우 VMD란에 파일을 넣고 Process 해준다.

필자는 다른 휴머노이드 타입의 애니메이션을 리타겟팅하여 사용할 것이기 때문에 VMD 사용하지 않고 Process.

도스창에 이상한 문자들이 지나가면 해당 폴더에 FBX 파일이 나온다.

FBX를 씬에 올려놓은 모습. 잘 나오는 것 같다.

2. 툰쉐이더

현재 모델의 상태를 보면 툰쉐이딩이 들어가 있지만 빛의 영향을 받고 있다. 좀더 카툰에 가깝도록 아예 빛의 영향을 받지 않도록 설정해보자.

해당 설정값은 본인이 사용하는 용도에 따라 조절하면 된다. 여기서는 0으로 설정하려고 함.

모델의 폴더를 가면 Materials 폴더에 페이몬의 대한 재질이 나열되어있는데, 여기서 ShadowLum 수치 값을 줄여주면 그림자가 더욱 사라진다.

0번부터 7번까지 모든 ShadowLum 값을 0으로 설정해 보겠다.

(좌) ShadowLum 0, (우) ShadowLum 1.5

유니티의 Directional Light를 조정하여 어둡게 설정하고 비교를 해보면 극명하게 차이가 난다.

(좌) ShadowLum 0, (우) ShadowLum 1.5

Directional Light를 다시 조정하여 밝게 설정하고 비교를 해봐도 차이가 많이 난다.

필자는 0인 상태로 두고 작업한다.

이제 쉐이더를 변경해보자. MMD4Mecanim에서 제공하는 툰쉐이더는 많은 편인데 다 설명하진 않는다.

필요한 것이 있으면 하나씩 눌러서 확인해보자.

필자는 카툰렌더링에 가깝게 모든 머티리얼을 MMDLit-Edge 쉐이더로 변경해보겠다.

모든 머티리얼에 아웃라인이 들어갔는데, 눈 부분에도 아웃라인 쉐이더가 적용되어 너무 부각되어 보인다.

얼굴부분에만 기존의 MMDLit-BothFaces 쉐이더로 변경해준다.

엣지 쉐이더로 인해 더욱 카툰스러워졌다. 본인이 원하는 결과값을 도출하려면, 쉐이더를 변경하는 것 뿐만 아니라 변경한 쉐이더 안에 있는 수치들의 종류가 굉장히 많은데 하나씩 건드려보면서 적용하면 된다.

원신 모델 뿐만 아니라 작업중인 프로젝트에서 툰쉐이더를 사용하려고 한다면, 이 에셋을 사용해도 괜찮을 것 같다.

모델에 대한 설명은 여기까지 하고 휴머노이드형 다른 애니메이션을 적용시켜보자.

3. 휴머노이드형 애니메이션 리타겟팅

https://www.mixamo.com/#/?page=1&type=Motion%2CMotionPack

Mixamo Get animated. Animate 3D characters for games, film, and more. Sign Up for Free Log In Empowering creativity with animated 3D characters. Bring your projects to life with 3D characters, skeletal rigs, and animations, ready for use in film, games, interactive experiences and illustration. Read...

www.mixamo.com

무료로 여러개의 애니메이션을 제공하는 Mixamo 페이지.

여기서 아무거나 가져와서 적용을 해보려고 한다.

아래로 스크롤하여 Mma Kick이라는 애니메이션을 선택해준다.

후에 주황색의 DOWNLOAD 버튼을 클릭하여 다운로드 해준다.

다운로드 세팅창이 뜨면 Format은 유니티에서 사용할 것이기 때문에 FBX for Unity(.fbx)로 설정해준다.

Skin은 프리뷰의 모델을 같이 가져오는 것인데, 우리는 페이몬에 사용할 것이므로 필요없기에 Without Skin을 선택하여 애니메이션 파일만 가져온다.

프레임과 키프레임은 기본 값인 30, none으로 두고 다운로드 해준다.

다운받은 FBX 파일을 유니티 에셋 폴더에 골인.

이제 해당 애니메이션을 다른 모델로 리타겟팅 해보자.

다운받은 애니메이션 파일을 클릭하고, 인스펙터 창에 나타난 Animation Type을 Humanoid로 바꾸어 준 후 Apply를 눌러서 저장.

사용할 페이몬 모델 파일도 똑같이 Humanoid로 변경 후 Apply하여 저장해준다.

페이몬 모델을 Humanoid로 바꾸어주면 에러메세지가 표시되는데 이것을 해결하기 위해 Configure... 버튼을 클릭한다.

휴머노이드형 아바타의 리깅 바인드 상태가 문제가 생긴 것이기 때문에 수정해주면 된다.

보는 것 만으로도 어지러운 창이 활성화되는데, 별로 어렵지 않다.

하나씩 차근히 오류를 해결해보자.

씬 화면에서 볼 수 있듯 본 이름이 빨간색으로 표시되어있고, 좌측 상단에 'Character is not in T pose' 라는 문구가 표시된다.

언리얼에서는 모델의 포즈가 현재상태까지는 허용되지만, 유니티는 정확한 T pose 형태가 아니면 이렇게 오류를 내뿜는다.

인스펙터 창을 아래로 쭉 스크롤하면 Pose라는 드롭다운 메뉴가 작게 있는데, 이것을 클릭하고 'Enforce T-pose' 즉, 완전한 T포즈로 변경시켜준다.

이제 씬 화면에서 보던 불길한 빨간색 에러 메세지도 없고 본도 모두 초록색으로 잘 표시된다.

한가지 더 남았는데, 인스펙터 창을 보면 머리 부분이 빨간색으로 표시되어 있다.

인간형태의 이미지 좌측 하단에 Body, Head, Left Hand, Right Hand 메뉴가 있는데 머리 부분이 문제이므로 Head를 클릭하여 확인해준다.

확인해보니 Right Eye와 Jaw가 서로 동일한 본을 사용하고 있는 것이 문제다.

페이몬 모델의 경우 Jaw를 담당하는 턱 부분의 리깅이 없으므로 Jaw를 None으로 설정해준다.

깔끔하게 해결된 모습.

작업이 마무리 되면 다시 Body로 넘어와서 제일 하단에 있는 Apply 버튼을 클릭하여 저장해주고 Done을 눌러 작업에서 나와준다.

페이몬에서 사용할 아바타와 애니메이션에 사용된 아바타가 Humanoid 형태로 바인딩이 걸려있기 때문에

위의 형태로 잘 매치만 되어있다면 어느 모델에서든 사용이 가능하다!

상단 메뉴 Windows - Sequencing - Timeline을 선택하여 타임라인 에디터 창을 열어준다.

Create Empty를 선택하여 빈 오브젝트를 만들고, 이름을 Timeline으로 변경해준다.

만들어둔 Timeline 오브젝트를 선택하면 타임라인 창에서 Create 버튼이 활성화되는데, 경로를 원하는 곳에 만들어준다.

타임라인이 활성화 된 모습.

씬에 올려져 있는 모델을 드래그 앤 드롭으로 타임라인 죄측 빈칸에 두면 트랙을 새로 생성할 수 있다.

여기서 'Add Animation Track'을 선택하여 새로운 애니메이션 트랙을 만듦.

모델의 이름으로 되어있는 애니메이션 트랙이 만들어 진 것을 확인할 수 있음.

애니메이션 파일을 드롭다운해보면 삼각형 모양의 아이콘으로 되어있는 애니메이션 파일이 있음.

이 파일을 타임라인 우측 빈칸에 드래그 앤 드롭으로 애니메이션 트랙에 올려주면 됨.

해당 애니메이션을 넣으면 위 이미지와 같은 상태가 되면 완성!

타임라인 창에서 스페이스 바를 누르면 재생을 할 수 있어, 테스트를 해보면 된다.

씬 뷰나 게임 뷰에서 확인하시면 잘 작동되는 모습을 볼 수 있다 와아~~

4. 문제 해결

Q. 모델이 들어있는 폴더을 넣었는데 MMD4Mecanim 파일이 없습니다.

A. MMD4Mecanim.unitypackage를 먼저 Import 하신 후에 모델파일을 넣으셔야 나옵니다.

Q. MMD4Mecanim으로 FBX 변환이 잘 이루어지지 않습니다.

A. 해당 모델 폴더를 넣을 때 한국어가 들어있으면 그럴 수 있습니다. 또한, 넣고난 후 해당 폴더의 이름을 변경하시면 MMD4Mecanim에서 자동적으로 제공하는 경로가 변경될 수 있습니다. 이럴경우 수동으로 입력해 주어야 합니다.

'각청' 이라는 폴더로 가져와서 '111'이라는 이름으로 폴더 명을 변경했습니다.

FBX Path란에 자동으로 지정된 경로 이름은 처음 상태의 경로를 지정해주기 때문에 수동으로 변경하시고 Process 하셔야 합니다.

이런식으로 변경해주셔야 정상적으로 변환이 됩니다.

Q. 모델을 FBX로 변환했는데 전부 하얀색으로 보입니다.

A. 정말 극혐이지만 해결방법은 있습니다.

MMD 변환으로 모델을 씬에 올려놨는데 이런 기본 Standard 머티리얼로 범벅이 된 원신 모델이 상당히 많습니다.

모든 쉐이더가 Standard로 되어있고 머티리얼 이름도 제각각이라 수동으로 넣어준다고 해도, 대체 어디가 어딘지 모를 경우가 많습니다.

먼저, 프로그램을 다운로드 하시고 열어주세요.

위 Load your XML or PMX2FBX 버튼을 클릭해주세요.

유니티에서 변환이 완료되었으면, 그 폴더로 가면 해당 모델에 대한 .XML 문서 파일이 있습니다. 이것을 열어줍니다.

Texture List에 선택된 파일이 어느 머티리얼에 사용되었는지 Material Description에 나옵니다.

이것을 보고서 일일히 수동으로 넣어주는 고문을 해야 합니다.

0.men 머티리얼 쉐이더를 MMDLIt-BothFaces로 놓고 작업을 시작해 봅시다.

面.png 텍스처가 0.men 머티리얼에 사용되고 있는 것을 알 수 있습니다.

그리고 Material Description에서 하이라이트 시킨 부분을 자세히 살펴봅시다.

<materialName>은 해당 텍스처가 사용되고 있는 머티리얼 이름입니다.

MainTex에 사용되고 있는 텍스처를 넣어주시면 됩니다.

<diffuse>는 쉐이더의 Diffuse 수치 값입니다.

쉐이더의 Diffuse를 위의 값과 동일하게 변경해주면 됩니다.

색상 스펙트럼에서 RGB 0-1.0을 선택하시고 똑같이 수치값을 적어주시면 됩니다.

<spacular>와 <ambient>도 마찬가지로 동일한 수치값을 넣어주시면 됩니다.

<shiness>도 마찬가지로 5로 설정해주고,

<edgeColor>도 설정해주면~

<toonID> 라는 것이 보입니다.

MMD4Mecanim 패키지에 내장된 툰 텍스처의 번호를 뜻하는 것이므로, 값이 0이면 toon0을 사용하면 됩니다.

적용은 요곳에 하시면 됩니다.

이렇게 Material Description을 보고 수동으로 하나하나씩 전부 설정해주면 됩니다.

머티리얼들끼리 파라미터 값들이 완전 똑같거나, 일부분만 다를 경우 값일 복사하고 다른 머티리얼에 바로 붙여넣으시면 작업이 500배는 빠릅니다.

대부분의 원신 모델 머티리얼이 수치값이 같거나 비슷합니다. 하나만 작업하여 전부 복붙하시고 텍스처 변경과 값들만 수정하시는걸 추천드립니다.

해당 머티리얼 좌측 상단 이미지를 우클릭하여 'Copy Material Properties' 클릭

붙여넣을 머티리얼을 클릭 후 동일하게 우클릭하여 'Paste Material Properties' 클릭하시면 손쉽게 붙여넣을 수 있습니다.

(좌) Standard 쉐이더로 되어있는 오류, (우) MMDLIt-BothFaces 쉐이더로 수동 설정

이 방식이 번거로우시다면, Blender에서 FBX로 변환 후 가져오시면 대부분은 머티리얼이 문제가 해결된 상태로 가져옵니다.

https://youtu.be/X-kR-pK04ws

이 영상을 참고하시면 될 것 같습니다.

Q. 휴머노이드 아바타에 에러가 없었는데 애니메이션이 이상합니다.

A. 처음에 휴머노이드로 변환하고 Apply했을 때 에러가 없는 경우도 있습니다.

하지만 모든 본이 정상작동 하더라도 위의 내용처럼 하나의 본이 여러곳에 쓰이는 경우도 있기에 아바타 확인을 먼저 하시는 것을 추천드립니다.