개발 기록 목록

찰랑이는 밀레시안의 머리카락을 위해


'언리얼 엔진으로 개발하는데 당연히 머리카락은 찰랑 거리겠죠?'


안녕하세요 개발자K입니다.

밀레시안님들의 머리카락에 생기를 불어넣기 위해 물리 기반 애니메이션을 적용하는 과정에 대한 이야기를 해보려고 합니다.


태초에 뼈대가 있었다



(위 스샷은 예시를 들기위해 생략된 뼈대의 형태입니다. 실제 게임에서는 다양한 움직임을 더 많은 뼈대가 들어갑니다.)


캐릭터의 움직임을 만들기 위한  전통적인 애니메이션 기법은 다음과 같습니다.

캐릭터의 기본 뼈대가 있고, 해당 뼈대를 XYZ방향으로 움직여 프레임마다 '키'를 넣어주는 키 애니메이션이 보편적이죠.

예를 들어 '걷기'라는 모션을 생각해 봅시다.

다리가 앞뒤로 움직여야 하니 Thigh, Calf, Foot, Toe 뼈대를 프레임마다 위치를 옮겨서 '키'를 잡아줘야 합니다. (왼발, 오른발 각각)

물론 팔도 자연스럽게 움직여 봅시다 UpperArm, ForeArm, Hand 뼈대를 프레임마다 위치를 옮겨서 키를 잡아줍시다 (왼팔, 오른팔 각각)

자연스러운 움직임을 위해서는 몸통도 리듬을 타게 해 줍니다. ( Pelvis, Spine, Neck 등등 )

걷기를 예시로 들었지만 마비노기에서 캐릭터의 모든 움직임은 위와 같은 방식으로

프레임마다 뼈대의 위치를 옮겨서 '키'를 잡아주는 '키 애니메이션' 방식으로 되어 있습니다.
(다양한 스킬들의 모션, 액션들의 모션 등등 모든 움직임이 말이죠.)


위 뼈대가 움직일 때 붙어있는 모델링도 같이 움직여야 하겠죠? 이를 위한 작업을 '리깅 및 스키닝'이라고 합니다.

모델링의 각 정점을 뼈대에 연결하고(리깅), 뼈대에 움직임에 영향을 받을 가중치를 부여(스키닝)해서 설정을 해 줍니다,

이를 통해 뼈대가 움직일 때 붙어있는 모델링의 피부가 늘어나거나 줄어들게 됩니다.

캐릭터의 '기본 뼈대'는 공용으로 사용하기 때문에 모델링이 변경되더라도 스키닝이 정상적으로 되어있다면, 정상적으로 애니메이션이 동작합니다. 


헤어 애니메이션

포니테일의 예시를 들어보겠습니다.

위에서 설명한 기본 뼈대를 중심으로 키 애니메이션 데이터가 모두 생성된 상태에서 포니테일 헤어에 애니메이션이 추가되어야 한다고 합니다.

그럼 우선 기본 뼈대에 움직임을 위한 포니테일 용 뼈대를 추가해야겠군요.



이제 기존에 캐릭터 움직임을 위해 만들었던 애니메이션들에 포니테일 용 추가 뼈대의 움직임을 위한 '키'를 추가해 주면 됩니다.

(모든 캐릭터 애니메이션(13,586개)에 포니테일 용으로 추가된 뼈대의 '키'를 한땀한땀 잡아주는 작업을 해 줘야합니다.)

그런데... 이번엔 양 갈래 머리가 추가되었습니다 ( 기본 뼈대에 양갈래 머리 용 뼈대 추가 → 모든 애니메이션에서 프레임 별 키 추가 )

그런데... 이번엔 포니테일인데 왼쪽으로 묶은 포니테일이라고 합니다 ( 기본 뼈대에 왼쪽 포니테일 용 뼈대 추가 → 모든 애니메이션에서 프레임 별 키 추가 )

그런데... 이번엔 더듬이 앞머리가 추가되었습니다. ( 기본 뼈대에 더듬이 앞머리 용 뼈대 추가 → 모든 애니메이션에서 프레임 별 키 추가 )

그런데... 이번엔 단발머리가 추가되었습니다. ( 기본 뼈대에 단발머리 용 뼈대 추가 → 모든 애니메이션에서 프레임 별 키 추가 )

이렇게 계속 헤어 용 뼈대를 추가하다 보면 헤어 용 뼈만 수백 가지가 되겠군요,

기본 뼈대에 헤어 용 뼈대가 계속 추가되면 리깅 및 스키닝 과정에서도 문제가 생깁니다.


헤어 뼈대의 분리

위와 같이 상상만으로도 힘들어지는 일이 생기기 전에 기본 뼈대에서 헤어 뼈대를 분리해 봅시다.

기존에 만들어진 기본 뼈대와 애니메이션 데이터들은 그대로 두고 헤어 용 뼈대를 따로 만들어줍니다.

다시 포니테일을 예시로 들어보겠습니다.


이렇게 헤어 뼈대를 전용으로 따로 만들고 기존 애니메이션과 동시에 동작할 포니테일 용 애니메이션도 모두 따로 만들어 줍시다.

이때 기본 뼈대의 걷기 애니메이션이 실행될 때 동시에 포니테일 뼈대의 걷기 애니메이션도 실행하면

2개의 뼈대에서 애니메이션이 각각 동작되지만 결과물로는 하나의 동작같이 보이게 됩니다.

(물론 이를 위해서 양쪽 애니메이션의 프레임 길이를 맞추고 헤어만 너무 튀지 않도록 기본 뼈대 애니메이션을 기준으로 계속 맞춰주는 작업이 필요합니다.)

뼈대를 분리하면 기본 뼈대에 헤어 용 뼈대를 추가하는 것에 비해 리깅 및 스키닝 과정에서의 문제점만 해결될 뿐,

기존 모든 애니메이션에 대응하는 '키'애니메이션 만들기 과정은 동일합니다.

현재 마비노기에서 움직이는 가발 및 헤어의 경우 각 헤어 메쉬마다 뼈대를 분리하고

기존 기본 뼈대에 적용된 모션에 대응하여 '키'애니메이션을 만들어서 적용하고 있습니다.



물리 기반 애니메이션

물리 애니메이션이란?

질량, 관성, 댐핑, 마찰력, 탄성 등의 물리 속성을 가지고

일상에서의 물리 현상과 비슷한 결과 나오도록 시뮬레이션되는 애니메이션을 말합니다.

한마디로 여러 조건들을 설정해 놓으면 자동으로 물리 현상에 맞게 움직임이 생성되는 것이죠.

설명으로만 들으면 기존의 '키'애니메이션처럼 프레임마다 뼈대의 위치를 지정해 줄 필요가 없으니

뼈대의 위치가 자연스럽게 자동으로 시뮬레이션되는 기술처럼 들리는데요,

현실은 자연스러운 움직임을 표현하기 위해 고려해야 할 점들이 많습니다.


또다시 포니테일을 예시로 들어보겠습니다.

제자리 모션에서도 하늘하늘 움직이고 달리는 모션이나 가속이 큰 모션에서도

너무 튕겨나가듯 움직이지 않는 시뮬레이션이 나와야 하겠죠?

작은 움직임에서는 외부 요소에 의한 반응이 적고, 따라서 포니테일의 움직임이 미세하게 표현되기 어렵습니다.

반면에 큰 움직임에서는 가속이나 충돌이 시뮬레이션을 불안정하게 만들어 움직임이 부정확하게 보일 수 있습니다.

이러한 문제에 대응하기 위해서는 물리 시뮬레이션의 매개 변수를 조절하거나,

모션의 크기와 방향에 대한 조정이 필요합니다. 

테스트 → 수치 조절 → 테스트 → 수치 조절 과정의 반복이죠

그럼에도 불구하고 작은 모션, 큰 모션 양 극단의 상황을 모두 만족시킬 수는 없는 경우도 발생하여

일부는 키 애니메이션으로 일부는 물리 기반 애니메이션으로 적용하는 방식도 고려해보고 있습니다.



 < 초기 물리 기반 애니메이션 테스트 모습 - 01. 물리 애니메이션 없음 / 02. 물리 애니메이션 움직임 작게 / 03. 물리 애니메이션 움직임 크게 >


찰랑이는 밀레시안의 머리카락을 위해...

위에 소개해 드렸던 키 애니메이션, 물리 기반 애니메이션은 모두 찰랑이는 밀레시안의 머리카락을 위한 연구 개발 과정들입니다.

이 밖에도 키 애니메이션과 물리 기반 애니메이션의 조합, 리타겟팅 시스템 등 다양한 내용이 있지만,

다음에 있을 의상 애니메이션( 포포스커트는 사실... )에서 관련 내용을 다루도록 하겠습니다. 


마비노기 이터니티 프로젝트의 여정이 계속됨에 따라 밀레시안의 머리카락은 더욱 찰랑일 것입니다.

감사합니다.

Hello, World!

링크 복사