넥슨게임즈 매그넘 스튜디오 클라이언트팀의 박솔이 개발자가 26일 진행된 넥슨 개발자 컨퍼런스(이하 NDC 25)에서 ‘<퍼스트 디센던트>의 흔들리는 물리 표현을 가볍고 쉽게 구현하기’를 주제로 강연을 진행했다.
15년 차 게임 클라이언트 프로그래머로 재직 중인 박솔이 개발자는 엔씨소프트에서 <리니지 2>와 <블레이드 앤 소울> 개발에 참여한 후 넥슨게임즈로 이직해 <퍼스트 디센던트> 클라이언트팀에서 최적화, 애니메이션, 시네마틱 기능을 담당하고 있다. 또한 그는 <퍼스트 디센던트>의 자연스러운 애니메이션 구현에 큰 공헌을 한 플러그인 ‘애니피즈(AnimPhys)’를 개발한 장본인이기도 하다.
이번 강연에서 박솔이 개발자는 애니메이션의 흔들리는 물리 표현 방식과 <퍼스트 디센던트>의 자연스러운 물리 표현 구현 과정, 그리고 애니피즈의 개발 과정과 주요 기능들을 소개했다.

강연 중인 매그넘 스튜디오의 박솔이 개발자
박솔이 개발자는 “애니메이션에서 흔들리는 물리 표현이란 디즈니의 12가지 애니메이션 법칙 중 팔로우쓰루(Follow Through)와 오버래핑 액션(Overlapping Action)을 의미한다"고 정의했다.
예를 들어 여러 개의 고리로 이루어진 하나의 긴 체인이 움직인다고 생각해 보자. 여기서 팔로우쓰루는 위의 고리가 움직였을 때 그 아래에 있는 고리가 따라가는 동작이고, 오버래핑 액션은 위의 고리가 움직임을 멈추었을 때 아래 고리가 앞으로 살짝 움직였다가 다시 제자리로 돌아오는 동작이다. 여기서 체인은 뼈대, 고리는 각각의 뼈, 즉 ‘본(Bone)’이다.
이를 활용하면 캐릭터의 몸이 움직였을 때 그와 연결된 부분이 자연스럽게 흔들리는 움직임을 가지게 되며, 이런 동작을 게임에 적용하면 캐릭터 애니메이션이 훨씬 풍부하게 표현된다.
언리얼 엔진용 오픈소스 플러그인 중 하나인 ‘카와이피직스(KawaiiPhysics)’는 이러한 애니메이션을 굉장히 잘 표현하는 플러그인이다. 강체나 탄성 같은 물리 방정식을 활용하지 않고도 자연스러운 물체의 움직임을 표현하는 것이 특징으로, 캐릭터의 머리카락, 옷자락, 장신구 등이 움직임에 따라 자연스럽게 흔들리는 효과를 구현할 때 주로 사용된다.
<퍼스트 디센던트>를 개발한 매그넘 스튜디오도 게임 개발 초기에 카와이피직스를 도입했다. 초기 성능 테스트에서 언리얼 엔진 기본 기능인 애니 다이내믹스(Anim Dynamics)보다도 우수한 성능을 보였기 때문이다. 게임 내 캐릭터의 머리카락과 부착물, 몬스터에 이르기까지 모든 메시(Mesh)의 포스트 프로세스 애니메이션에 이를 적용했다.
카와이피직스는 기존 물리 에셋 혹은 언리얼 엔진의 애니 다이내믹스보다 훨씬 부드럽고 자연스러운 움직임을 구현한다.
그런데 2023년 9월 크로스 플레이 베타 준비 과정에서 심각한 성능 문제가 발견됐다. 특히 Plastation 4와 Xbox One 같은 8세대 콘솔에서 성능 저하가 심각했다. 개발이 진행되면서 캐릭터 모델의 본 트리가 복잡해지자 이를 처리하는 과정에서 딜레이가 발생한 것이다.

기존 카와이피직스의 경우 모델의 본 트리가 깊어질수록 처리해야 하는 요소들이 늘어나면서 연산 시간도 늘어나게 된다.
개발팀은 카와이피직스로는 해결할 수 없다고 판단하고 새로운 시스템 개발을 결정했다. 런칭 준와 함께 3개월간 틈틈이 작업한 끝에 2023년 11월 카와이피직스를 기반으로 한 자체 플러그인 애니피즈를 구현하는 데 성공했다.
애니피즈는 카와이피직스와 동일한 본 흔들림 표현을 구현하면서도 연산 비용을 대폭 개선했다. 동일한 캐릭터 헤드 메시를 연산할 때 소요되는 시간은 카와이피직스가 61μs, 애니피즈는 17μs로 약 3.5배 성능이 향상된 것이다.
이후에도 애니피즈는 카와이피직스에서 캐릭터의 머리카락이 어색하게 표현되는 문제나, 캐릭터 모델이 덜덜 떨리는 문제들을 해결하는 데 큰 도움이 됐다. 특히 최적화 측면에서 컴포넌트 포즈가 아닌 포컬 포즈를 이용한 계산 방식으로 성능 향상에 큰 영향을 미쳤다.

출시 한달 전, 카와이피직스에서 구현했던 머리카락이 자연스럽게 움직이지 않는 이슈가 발생했다.
당시 문제 해결을 위해 꼬박 3일을 고민했던 박솔이 개발자는 꿈에서 코딩하다가 해결방안을 찾았다고 한다.
당시 문제 해결을 위해 꼬박 3일을 고민했던 박솔이 개발자는 꿈에서 코딩하다가 해결방안을 찾았다고 한다.

카와이피직스와 애니피즈의 성능 비교
박솔이 개발자는 애니피즈의 주요 기능을 네 가지로 정리했다. 셋업 세팅에서는 애니메이션 포즈에 따라 본의 흔들림을 설정할 수 있으며 스무딩 세팅에서는 스케일, 댐핑 등 캐릭터 이동에 따라 자연스러운 본의 흔들림을 설정한다. 컬리전 세팅에서는 스피어, 캡슐, 플로어, 어태치 바디 등 바닥 메시에 따른 본의 충돌체를 설정하고, 익스터널 포스 세팅에서는 바람, 중력에 대한 본의 흔들림을 설정할 수 있다.
이후 개발팀은 아트팀의 요청으로 애니피즈에 새로운 기능들을 추가했다. 이렇게 추가된 애니피즈의 다양한 물리 표현 기능과 그 효과는 다음과 같다.
- LimitAngleXYZ: 본의 움직이는 반경을 세밀하게 조절 가능
- ScaleDamping: 본의 속도를 이동 속도에 비례하여 곱하는 방식으로 캐릭터의 이동 속도에 따라 본의 움직임을 조절하고 특정 축으로의 움직임을 강조
- CollidedWithFloor: 캐릭터가 움직이는 경우 무브먼트 컴포넌트의 바닥을 충돌체로 지정해 바닥의 기울기에 맞는 자연스러운 충돌 효과 구현
- CollidedWithAttachedMesh: 여러 스켈레탈 메시 컴포넌트가 결합된 캐릭터에서 입력된 데이터를 충돌체로 지정해 자연스러운 물리 효과 구현




애니피즈에 추가된 여러 물리 표현 기능

박솔이 개발자가 정리한 애니피즈의 주요 기능
<퍼스트 디센던트>는 이러한 애니피즈의 기능을 다양하게 활용해 캐릭터의 세컨더리 애니메이션을 구성했다. 이처럼 애니피즈를 사용하면 가볍고 쉽게 캐릭터 애니메이션의 자연스러운 본의 흔들림을 표현할 수 있다는 것이 박솔이 개발자의 설명이다.
박솔이 개발자는 이번 강연에서 애니피즈의 소스 코드를 최초로 공개했다. 애니피즈는 아래 QR 코드 또는 링크를 통해 다운로드 받을 수 있다.

