개발 기록 목록

포포스커트는 사실...


'언리얼 엔진으로 개발하는데 당연히 치마는 자연스럽게 하늘거리겠죠?'


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

이번 시간에는 의상 애니메이션 (특히 치마 형태의 의상)에서 자연스러운 움직임을 표현하기 위해

애니메이션 관련 R&D 했던 과정들을 소개해 보겠습니다.


헤어 애니메이션 편에서 소개해 드렸던 '키 애니메이션', '리깅 및 스키닝'을 잠시 떠올려봅시다.

키 애니메이션 : 프레임마다 뼈대의 위치를 옮겨서 '키'를 잡아준다.

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


포포스커트 (방탄 아님)

포포스커트를 예시로 들어보면 포포 스커트의 치마 단은  다리뼈에 리깅 및 스키닝이 되어있습니다.

그래서 키 애니메이션에 의해 다리가 움직일 때 붙어있는 스커트가 같이 움직이게 되는 것이죠.


그럼 포포스커트 치마 부분을 따로 움직이게 하려면 어떻게 해야 할까요?

네, 치마를 움직일 뼈대를 추가로 만들고 '키 애니메이션'을 따로 잡아주면 됩니다!!

애니메이터 분에게 이 기쁜 사실을 말씀드리고 저는 퇴근하겠습니다...

헤어 애니메이션 과정을 보셨던 밀레시안 분들이라면 이미 눈치채셨겠지만 문제가 있습니다.

잠시 다시 살펴보자면...

   


이대로 라면, 의상마다 형태가 다르니 뼈대가 계속해서 증식하겠군요...

하지만 이미 헤어 애니메이션에서 한번 경험했던 문제입니다. 헤어 애니메이션과 동일한 솔루션을 적용하면 됩니다!! 

애니메이터 분에게 이 기쁜 사실을 말씀드리고 저는 퇴근하겠습니다...



클로스 시뮬레이션

이전에 헤어 애니메이션에서 소개해 드렸던 물리 기반 애니메이션의 일종으로

옷이나 직물 같은 유연한 소재의 동작을 모방하는 기술을 말합니다.

헤어 애니메이션에 적용된 물리 기반 애니메이션과 다른 점은 클로스 시뮬레이션 움직임에 '뼈대가 필요하지 않다는 것'입니다.

물론 그 대신 정점 단위에서의 물리 연산이 들어가기 때문에 퍼포먼스 측면에서 무거울 수밖에 없습니다.

직물의 부드러운 움직임을 표현하는데 탁월한 효과를 보여주는 클로스 시뮬레이션을 마비노기에 접목해 본다면 어떨까요?

걸을 때마다 입고 있는 포포스커트가 하늘하늘 흔들리는 상상을 하며 클로스 시뮬레이션 적용을 시작하였습니다.



문제는 형태

여러 형태의 치마(짧은 치마, 긴 치마, 폭이 넓은 치마, 폭이 좁은 치마...)에서 테스트를 진행 중에 문제가 발생했습니다.

리깅 및 스키닝에 의해서 모델링의 원형 이상으로 늘어날 수 있는 부분이 없어지고,

정점 단위에서 물리 연산이 들어가다 보니 다리가 치마를 뚫거나 치마 하단이 말려 올라가는 등의 부작용이 발생했습니다.

물론 물리 속성들을 추가로 설정하고 연산량을 늘리면 개선의 여지가 있지만

길이가 길고 폭이 좁은 형태의 치마에서는 자연스러운 움직임을 기대하기가 어려웠습니다.

기존처럼 뼈대를 붙이고 리깅 및 스키닝 후 키 애니메이션으로 움직임을 주면 기존 형태 이상으로 메쉬가 늘어나지만

초기에 생각했던 하늘하늘 거리는 치마의 움직임은 멀어지는 것이죠.



다시 물리 시뮬레이션

이전 헤어에서 적용한 바와 같이 치마  뼈대를 따로 제작하여 기본 뼈대와 분리시키고 치마  뼈대에

물리 시뮬레이션을 적용하는 방식을 도입했습니다.

캐릭터의 기본 뼈대는 캐릭터의 움직임을 제어하는 데 사용되고

이 뼈대는 캐릭터의 전체적인 동작을 결정하고, 걷기, 뛰기, 점프 등과 같은 기본적인 애니메이션을 처리합니다.

치마 용 뼈대는 치마 부분에 대한 물리 시뮬레이션을 담당합니다(치마의 움직임을 더 현실적으로 표현하기 위해 사용)

물리 기반 애니메이션은 중력, 공기 저항 및 외부 간섭 등과 같은 물리적 요소를 고려하여 치마의 움직임을 계산합니다.

예를 들어 캐릭터가 빠르게 움직일 때는 치마가 바람에 휘날리는 현상이 물리적으로 시뮬레이션됩니다.

이러한 물리적 효과를 통해 게임 캐릭터의 모션은 더 생생하고 현실적으로 느껴지게 됩니다.

이렇게 분리된 두 가지 뼈대 시스템을 결합함으로써, 캐릭터의 전반적인 동작은 전통적인 애니메이션 기술을 활용하면서도,

특정 부분인 치마의 움직임은 물리 기반 애니메이션을 통해 더욱 자연스럽게 표현됩니다.


하지만 물리 기반 애니메이션 적용에도 문제점이 있었는데요

작은 움직임에서는 외부 요소에 의한 반응이 적고(치마의 움직임이 미세하게 표현되기 어렵습니다), 

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

이러한 문제에 대응하기 위해서는 물리 시뮬레이션의 매개 변수를 조절하거나, 모션의 크기와 방향에 대한 조정이 필요하지만 

모든 움직임에서 물리 시뮬레이션의 결과가 자연스럽게 보이기에는 한계가 있었습니다.



키 애니메이션과 물리 시뮬레이션의 조합

문제를 해결하기 위해 체인 형태로 구성된 치마의 뼈대에서 체인의 시작 부분의 뼈대에는  애니메이션을 적용하였습니다.

이를 통해 치마 상단에서의 움직임은 키 애니메이션으로 안정적으로 제어됩니다.

치마의 나머지 뼈대 들에는 물리 기반 애니메이션을 적용하여 상단 부 뼈대의 키 애니메이션의 움직임을 기반으로 물리적인 움직임을 전파시킵니다.

이를 통해 큰 모션에서의 안정성과, 작은 모션에서의 움직임 모두를 만족시킬 수 있는 형태가 되었습니다.

문제는 모든 치마 형태의 메쉬에 뼈대를 분리하고 각 메쉬 별 뼈대마다 키 애니메이션을 잡아줘야 하는 부분인데,

이를 해결하기 위해서 언리얼의 리타겟팅 기능을 활용하였습니다.



리타겟팅 시스템 활용

효율을 높이기 위해 기본 몸통 뼈대에 치마 본을 추가하고, 

이를 활용하여 치마 상단 본에 키 애니메이션을 적용하는 과정에서 언리얼의 리타겟팅 시스템을 이용하였습니다.

치마의 뼈대를 기본 몸통 뼈대에 추가합니다. 이로써 치마와 몸통의 뼈대가 통합되어 하나의 뼈대가 됩니다.

기본 몸통 뼈대에 추가한 치마 본에 키 애니메이션을 적용합니다. 이 애니메이션은 치마 상단 부분의 움직임을 제어하게 됩니다.

언리얼 엔진의 리타겟팅 시스템을 사용하여, 

다양한 형태의 치마들이( 긴 치마, 짧은 치마, 한쪽이 긴 치마, 허리 라인 시작 점이 각각 다른 형태의 치마 들 ) 

기본 몸통 뼈대의 움직임에 대응하도록 해 줍니다.


이를 통해 치마의 상단 부 움직임은 기본 몸통 뼈대의 치마 본의 '키 애니메이션'에 의해서 움직이고 나머지 부위는

각 치마 별 메쉬에 연결된 뼈대의 물리 시뮬레이션에 의해 움직이게 됩니다.

리타겟팅 시스템을 사용하여 기존 몸통 뼈대와 새롭게 추가 한 치마 본의 구조를 효율적으로 통합하고, 

캐릭터의 뼈대를 유연하게 구성하여 다양한 부분에 대한 애니메이션을 조합하는데 효과적이었습니다.



<리타겟팅 결과  (하늘색 - 기본 뼈대, 파란색 - 치마 메쉬 뼈대 ) >


합체!! (키 애니메이션  + 물리 애니메이션 + 리타겟팅)

모든 형태에 만족할 수는 없겠지만... 우리는 답을 찾을 것이다. 늘 그랬듯이

아래는 초반 R&D과정에서 사용되었던 테스트용 임시 모델링 리소스 입니다.

키 애니메이션 ( 몸통 뼈대 + 치마 상단부 뼈대 ), 물리 애니메이션 ( 치마 하단부 뼈대 ) 조합결과

 





< Idle 모션 - 키 + 물리 애니메이션 조합 (치마 4종) >






< 이동 모션 - 키 + 물리 애니메이션 조합 (치마 4종) >


포포스커트는 사실...


포포스커트는 사실... 하늘하늘 움직이는 치마였습니다!!

위에서 소개해 드렸던 내용들은 모두 포포스커트의 자연스러운 움직임을 표현하기 위한 과정이었습니다.

클로스 시뮬레이션이 비록 포포스커트에는 적용되지 않았지만, 망토나 특정 형태의 메쉬에 적용하는 연구 중에 있고,

이외에도 의상의 자연스러운 모션을 위해 다양한 연구가 진행 중입니다.

새로운 엔진이라는 수단을 사용하여

에린에서 밀레시안 분들의 의상이 살아 숨쉬는 그날까지 최선을 다하도록 하겠습니다.

감사합니다.

Hello, World!

링크 복사