블로그 이미지
한국IT전문학교 게임프로그래밍 2018년 졸업생 / 배우고 익히고 정리하는 곳 무명의 공룡

카테고리

분류 전체보기 (133)
Unity (5)
AR / VR (8)
홀로렌즈2 (2)
Unity 3D 액션 게임 제작 (2)
정리 (9)
소소한 배움 (6)
그외 (7)
비공개 (56)
--이전 프로젝트들-- (0)
Tree-sha (팀 3D) (9)
Icicle Game (2D) (19)
MMD RPG (3D) (9)
Total
Today
Yesterday

달력

« » 2024.12
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31

공지사항

이 글을 보시기 전에 유니티3D로 MMD 사용하기 2를 보고 오시면 더 좋습니다.


위 글에서 대략 혹은 생략하고 지나갔던 표정(모프) 부분을 좀 더 상세히 적어봤습니다.


도움을 준 모델은 아피미쿠 되겠습니다.




어떤 방식의 모션을 적용하든 표정은 따로 컨트롤이 가능합니다.




표정(Morph)


주로 표정을 담당하게 되서 표정이라 했지만 Morph엔 표정 뿐만 아니라 모델에 포함 된 부가적인 기능 모두를 담당합니다.


가장 기본적인 표정인 눈깜빡임(まばたき), '아' 벌린 입모양(あ) 등은 대부분의 모델에 공통적으로 들어가 있고 눈썹, 동공, 눈동자, 뿐만 아니라 모델에 따라 안경, 홍조, 눈물 맺힘, 치마 길이, 기장 길이 등 정말 많은 부분의 조정이 가능합니다.


수치는 0~1 사이의 값을 입력해야 하는데 표정 같이 변화가 서서히 일어나야 자연스러운 부분은 서서히 늘리는게 좋고 안경 같이 외형의 변화는 바로 0이나 1로 입력해 주는 편이 좋습니다.


이런 부분은 MMD를 다루고 오신 분이라면 이미 더 잘 알고 계시리라 생각합니다.



당장 제가 쓰고 있는 아피미쿠만 해도 어마어마 합니다.


다만 이름들이 일본어이기도 하고 추상적 모양이기도 해서 그냥 하나하나 뭐가 뭔지를 알아보고 그걸 조정하시는 편이 좋습니다.


저번 글에 경우 스크립트에서 GetMorph("まばたき").weight 이런 식으로 값을 가져와 변경하는 방법을 적었었고 vmd 모션에 포함 된 표정이 우선 된다고 적었었는데...


현재까지 알아낸 바에 따르면 꼭 그렇지만은 않더군요.


정확히 말하면 vmd모션에 입력된 값이든 weight에 값을 넣든 해당 순간에 값이 더 높은 것을 인식합니다.


まばたき의 경우 '눈 깜빡임'이라 1로 두면 눈을 감는데 vmd 모션에서 0일 때 weight에 1을 주면 눈을 감습니다.


반대로 vmd 모션에서 1이라 눈을 감고 있다면 weight에서 아무리 0을 준들 눈을 뜨진 않습니다.



테스트로 vmd 모션으로는 눈을 두 번 깜빡이고 입을 한 번 여는 모션을 만들고 유니티 스크립트로 1초에 걸쳐 눈을 떳다 감았다 하게 만들었습니다.


보다시피 vmd 모션의 눈 깜빡임도 정상적으로 작동하지만 둘 중 높은 값을 우선합니다.



자 그러면 사실상 유니티에선 vmd 모션에 적용된 표정을 아예 무시할 수 없는거 아닌가? 할 수 있는데 다른 방법이 있습니다.


MMD4Mecanim 패키지를 받았다면



대략 이러한 스크립트들이 더 있을겁니다.


다른건 대부분 자동으로 붙거나 상호 내부적으로 연관된거라 딱히 보실 필요 없고 Helper가 붙은 스크립트들이 관련하여 조작에 도움을 주는 스크립트입니다.


여기서는 MMD4 Mecanim Morph Helper를 쓰면 되겠네요.


MMD4 Mecanim Anim Morph Helper라는 스크립트도 있는데 이건 정확히 어떻게 다뤄야 하는지 파악 중에 있습니다.



인스펙터 창에 올리면 이렇게 보입니다.


여기서 Override Weight를 체크하면 vmd 모션의 표정은 아예 무시됩니다.


사용법이 조금 괴상한데 Name에 Morph명을 적고 Weight에는 목표 수치를 적고 Speed에는 시간을 적습니다.


만약 Speed가 2, Name이 まばたき, Weight에 1을 넣었다면 2초에 걸쳐 まばたき의 값이 1로 서서히 바뀝니다.


Speed인데 숫자가 높아지면 더 느리게 변하는 모습을 볼 수 있습니다.


물론 실제로 쓴다면 인스펙터 창이 아닌 스크립트를 통해 사용해야 할텐데 예시 코드를 작성해 봤습니다.




이 코드를 사용하여 위에 GIF 이미지를 뽑았습니다.


웃긴게 Helper 만으로는 현재 weight 값을 알 수 없어 결국 모델로부터 weight 값을 가져와야 하고 이렇게 되면 굳이 Helper를 써서 표정관리를 할 필요가 있나 싶은 의문이 듭니다.


Override 기능이 필요하고 혹여라도 표정 변화가 몇 초에 걸처 바뀌는 방식을 써야한다면 Helper를 쓰시고 그게 아니라면 그냥 모델에서 직접 바꾸는 방식을 쓰는게 나을 것 같습니다.






추가 중...

'MMD RPG (3D) > 진행' 카테고리의 다른 글

(MMD4Mecanim)모션에 관해  (4) 2018.04.29
MMD4Mecanim  (0) 2018.04.06
예정  (0) 2018.04.05
진행상황 동영상  (2) 2018.04.03
(유니티3D)3인칭 조작  (2) 2018.03.18
Posted by 무명의 공룡
, |