작업실/코이카츠

MMDD에서 눈동자가 튀어나오는 문제의 근본적인 해결법

T.M.S. 2022. 9. 11. 05:16

MMDD에서는 눈동자 시선에 관해 고질적인 문제점이 있는데, 바로 MMD 모션의 눈동자 시선값에 따라서 눈알이 튀어나오는 경우가 있다는 것이다.

 

이런 문제를 해결하기 위해 유저들도 나름 MMD 모션의 eye본을 비활성화 한다던가 덜 움직이게 함으로써 해결해왔다.

 

허나 이와 같은 방식은 어디까지나 모션에 제약을 거는 임시 방편에 불과했기에 근본적인 해결책은 되질 않았는데, 이번 기회에 근본적인 해결법을 공유하려고 한다.

 

따라만 하면 될 정도로 상당히 쉽게 풀어 설명했기에 글이 꽤나 길지만 설명에 비해서는 간단하기 때문에 금방 할 수 있을 것이다.

 

사진은 전부 1440p로 올렸으니 잘 보이지 않는다면 클릭해서 확대해보도록 하자.

 

1. 왜 이런 문제가 일어날까?

 

(급한 사람은 2번 항목부터 읽어도 상관 없다.)

 

문제를 해결하려면 먼저 문제의 원인을 알아야 한다.

코이카츠 자체에서 시선을 바꾸면 정상적으로 눈알이 움직이는데 왜 MMDD에서는 이상하게 보일까?

 

시로코를 불러왔다

 

내 설명을 도와줄 시로코를 조수로 데려왔다.

 

이 상태에서 코이카츠 자체 시선, MMDD 모션으로 불러온 시선 두 가지의 비교를 해 보도록 하겠다.

(여담이지만, 정확한 정면 시선은 조작 -> z축 위치값이 250 이상 되게끔 맞춰놓으면 된다. 왜 그런지는 후술할 것이니 끝까지 읽어보자.)

 

좌) 코이카츠 자체 설정 / 우) MMDD 로 이동한 시로코의 시선

 

자세히 보면 MMDD쪽의 눈동자가 살짝 튀어나와 깨진 것을 확인할 수가 있다.

 

왜 이런 차이가 일어나는 것일까?

 

필자가 개인적으로 이것저것 알아본 결과 눈동자의 움직이는 방식에 차이가 있다는 점을 깨달았다.

 

각각의 시선 이동 방법

 

코이카츠 자체에서 이동하는 눈동자는 시선을 따라서 상하좌우로 이동을 하는 반면에 MMD 모션은 시선을 따라서 XYZ축으로 회전을 한다.

 

MMD에서 쓰이는 모델링들은 시선이 축으로 회전하는 방식을 기준으로 만들어졌기에 원래라면 아무런 이상이 없어야 하는데, MMD의 모션을 그대로 코이카츠로 가져오니 이런 경우가 생기는 것이다.

그러면 eye본을 끄거나 회전축의 강도를 제한함으로써 시선 변화를 억제하는 것 말고는 딱히 방법이 없는 것일까?

 

우리에게는 KKPE가 있다.

 

2. KKPE를 이용해서 근본적인 원인을 해결해보기 – 사전 작업.

 

본이 문제라면 본을 고치면 된다.

 

다행스럽게도 우리에게는 본을 조정할 수 있는 툴이 있다.

 

KKPE를 이용해서 eye본의 위치를 조정하면 어느정도 정상적으로 나온다.

 

다만 그 전에, 몇 가지 사전 작업이 필요하다.

 

해당 캐릭터의 마테리얼 에디터를 열어 face 항목에 들어가 보자.

 

마테리얼 에디터를 킨 모습

 

필자는 스튜디오에서 마테리얼 에디터를 켰지만 코이카츠 인게임에서 직접 들어가도 상관없다.

매번 사전 작업을 해줘야 하는 게 귀찮다면 인게임에서 따로 만들어서 별개의 프리셋으로 저장해놓자.

 

MainTex 항목의 Export 버튼을 눌러 메인 텍스쳐를 추출한 뒤 포토샵같은 편집 툴로 열어보면 이런 모습일 것이다.

 

얼굴 메인 텍스쳐

 

이어서 cf_O_face 항목의 Export UV Map 버튼을 눌러 UV맵을 추출하고 메인 텍스쳐 위에 겹쳐서 눈의 위치를 파악한다.

 

얼굴 텍스쳐와  UV 맵

 

눈에 해당되는 부분을 적절히 지워주고 UV맵을 지워준 뒤 저장한다.

 

얼굴 텍스쳐 최종 수정본

 

다시 스튜디오로 돌아와서 수정했던 face의 메인 텍스쳐를 다시 적용해준다.

 

완료되었으면 sirome 항목으로 이동한다.

 

sirome  항목

 

sirome는 눈 부위 중 흰자를 담당하는데, 이 부분이 눈동자를 가리지 않아야 한다.

 

따라서 알파 쉐이더로 바꿔줘야 눈동자가 어느 위치에 있든 제대로 나온다.

 

필자는 KKUSS 쉐이더를 주로 쓰기 때문에 KKUSSalpha 쉐이더로 교체했지만 기타 다른 알파 쉐이더도 가능하므로, 꼭 KKUSS 쉐이더가 아닌 원하는 알파 쉐이더로 바꿔줘도 무방하다.

 

Render Queue는 일종의 레이어라고 생각하면 편하다.

 

Render Queue 값이 높은 순서대로 오브젝트가 보이게 되는데 상식적으로 눈이 얼굴보다 바깥에 있으니 face의 Render Queue보다 대략 100정도 높은 수치로 설정하면 된다.

 

각각의  Render Queue  설정 수치

 

필자는 face의 Render Queue값을 2500로 설정했으니 sirome의 Render Queue값을 2600으로 설정하였다.

 

마찬가지로 hitomi의 Render Queue 값 역시 sirome보다 100정도 높게 설정한다.

 

필자의 sirome Render Queue는 2600이었으니 2700으로 설정하였다. (사진은 생략)

 

사전 작업이 끝났다.

 

3. KKPE를 이용해서 근본적인 원인을 해결해보기

 

KKPE를 열어서 cf_J_hitomi_tx_L 본을 찾아보자.

 

찾기 힘들다면 검색란에 hitomi를 검색하면 금방 나온다.

 

KKPE 창을 연다

 

Symmetrical이 체크 되어 있는지 확인해보고 안 되어 있다면 체크 해 놓는다.

 

체크하면 흰색으로 강조표시가 생긴다.

 

Position 탭에서 Z축을 0.003~-0.005 범위로 조정해 눈동자가 살짝 안으로 들어가게 해 준다.

 

눈동자를 살짝 안으로 밀어 넣는다

 

이렇게 해 놓으면 눈동자를 안쪽으로 집어넣었기 때문에 회전축을 중심으로 회전해도 바깥으로 튀어나오지 않는다.

 

주의혹여나 앞서 했던 사전 작업을 해 놓지 않았다면 눈동자가 들어간 만큼 face 텍스쳐에 묻히게 되니 반드시 사전 작업을 하도록 하자.

 

Z축으로 hitomi 본을 이동시키고 나서 보면 눈동자의 위치가 살짝 중앙으로 몰려있을 것이다.

그에 대한 보정도 해주자.

 

Y축을 0.001, X축을 0.0005정도 이동한다.

 

눈동자 위치 보정

 

끝이다.

 

이후에 적절한 모션을 불러와서 눈동자가 정상적으로 움직이는지 테스트를 해본다.

 

Before

 

After

 

문제가 해결되었다.

 

만약 아직도 살짝 튀어나와 보인다면 cf_J_hitomi_tx_L 본의 Z축을 최대 -0.005까지 이동해보자.

 

4. 단점

 

근본적인 원인을 해결했다고는 하지만 이 방법 역시 단점은 존재한다.

 

데포르메 표정을 지으면 얼굴이 깨져버린다.

바로 데포르메 표정을 지으면 눈이 깨진다는 것인데, >< 표정이나 ㅠㅠ 같은 표정을 지으면 눈동자 부분이 투명해져서 머리 안쪽이 그대로 보인다는 것이다.

 

데포르메 표정을 꺼야 한다.

 

이는 사전 작업에서 얼굴의 메인 텍스쳐를 일부 지워냈기 때문에 생긴 문제인데, 해당 방법을 사용하게 되면 어쩔 수 없이 데포르메 표정들을 꺼야한다.

 

데포르메 표정이 없는 모션들은 정상적으로 나오니 걱정말고 모션을 감상하도록 하자.

 

사용하면서 이 점에 유의하길 바란다.

 

 

P.S.)

 

여담으로 단점에 관해서 한 마디 적어보려고 한다.

 

필자의 개인적인 생각으로는 사실  단점이라고 적어뒀지만 이 방법을 사용하지 않는다면 시선처리 모션에 제약을 주는 방법 밖에 없으니 그게 그거라고 생각한다.

 

데포르메 표정을 끄거나, 시선을 끄거나 둘 중 하나를 고르자면 필자는 시선의 변화가 더 다채롭기에 데포르메 표정을 끄는게 낫다고 본다.

 

어디까지나 개인 취향이지만.

 

 

5. 번외 - 시선을 정확히 정면에 위치시키는 방법

 

아까 말했듯이 시선을 정확히 정면으로 위치시키기 위해서는 시선의 z축 위치값을 최소 250 이상으로 설정해야 한다.

 

EyeTargetL 본

 

KKPE에서 target을 검색해 EyeTargetL 본을 찾는다.

 

EyeTarget본은 Look At Target본을 따라가면서 눈동자의 시선을 직접적으로 결정하는 본이다.

 

Look At Target 본의 위치를 기준으로 EyeTarget본의 Rotation 값이 결정된다.

 

그래서 우리가 코이카츠의 시선을 위치로 정하는 것이다.

 

Rotation탭에 들어가면 각각의 축에 일정 값이 있을텐데, 이 모든 축을 영점으로 맞춰줘야 비로소 정확하게 정면을 바라보게 된다.

 

그리고 XYZ축의 회전값이 0,0,0으로 되는 Look At Target 본의 최소치가 Z축 250이다.

영점이 맞춰진  EyeTarget 본

 

Z축으로 250을 설정해주면 다음과 같이 변하면서 캐릭터가 정면을 바라보게 된다.