1. 개요[편집]
| 래그돌 Ragdoll Physics | |
|---|---|
| 분야 | 게임 물리 × 캐릭터 애니메이션 |
| 핵심 개념 | 강체 + 관절 제약 + 충돌체 |
| 지배 원리 | 강체 동역학 |
| 어원 | 헝겊 인형(rag doll) |
죽는 순간만큼은 애니메이터보다 물리 엔진이 연기를 더 잘한다.
래그돌(ragdoll)은 캐릭터가 죽거나 충격을 받아 통제를 잃은 순간, 미리 만들어 둔 애니메이션을 재생하는 대신 캐릭터의 뼈대를 강체들과 관절 제약의 집합으로 물리 시뮬레이션하여 자세를 실시간으로 만들어 내는 기법이다. 이름은 사지가 축 늘어져 아무렇게나 접히는 헝겊 인형에서 왔고, 실제로 초기 구현들이 딱 그런 후줄근한 거동을 냈기 때문에 붙었다.
전통적으로 캐릭터가 쓰러지는 장면은 애니메이터가 손으로 키프레임을 찍어 만들었다. 문제는 그 사망 애니메이션이 지형·각도·충격 방향과 무관하게 늘 똑같이 재생된다는 것. 계단에서 죽으나 평지에서 죽으나 똑같이 넘어지면 몰입이 깨진다. 래그돌은 이 문제를 강체 동역학에 통째로 떠넘긴다. 쓰러지는 순간 제어권을 물리 엔진에 넘기면, 캐릭터는 그 순간의 속도·지형·부딪힌 벽에 맞춰 매번 다르게 무너진다.1
2. 뼈대를 강체로 바꾸기[편집]
스켈레탈 애니메이션의 캐릭터는 계층적 뼈대(skeleton)로 움직인다. 래그돌은 이 뼈대의 주요 뼈(골반·척추·상완·대퇴 등)마다 하나씩 단순한 충돌 형상(캡슐이나 박스)을 가진 강체를 붙여 만든다. 즉 스킨을 입은 캐릭터 밑에, 사람 모양으로 배치된 십수 개의 강체 인형이 한 벌 더 숨어 있는 셈이다.
이 강체들을 그냥 풀어놓으면 서로 흩어져 부품 상자가 쏟아진 꼴이 된다. 그래서 인접한 뼈끼리는 관절 제약(관절 제약)으로 묶는다. 각 관절은 두 강체가 특정 점(예: 팔꿈치)에서 떨어지지 않도록 붙잡는 위치 제약과, 꺾일 수 있는 각도 범위를 정하는 각도 제한(joint limit)으로 구성된다. 무릎이 뒤로 안 꺾이고 목이 360도로 안 돌아가는 것은 전부 이 각도 제한 덕분이다. 이 제약들을 매 스텝 만족시키는 일이 제약 해결기(constraint solver)의 몫이고, 래그돌 품질의 절반은 여기서 갈린다.
각 관절의 자유도는 대체로 다음처럼 나눈다.
- 볼-소켓(ball-socket) — 3자유도 회전. 어깨·고관절처럼 넓게 도는 관절.
- 힌지(hinge) — 1자유도 회전. 팔꿈치·무릎처럼 한 방향으로만 접히는 관절.
- 트위스트-스윙(twist-swing) — 비틀림과 젖힘을 분리해 제한. 목·척추 같은 곳에 즐겨 쓴다.
3. 왜 이렇게 잘 터지는가[편집]
래그돌은 물리 시뮬레이션의 온갖 불안정성이 한데 모이는 스트레스 테스트장이다. 관절로 강하게 결합된 여러 강체를 동시에 풀다 보면 제약들이 서로 밀고 당기며 수치 오차가 증폭되고, 순식간에 폭발(explosion)해 캐릭터가 화면 밖으로 튕겨 나간다. 유명한 “래그돌이 발작하며 하늘로 승천하는” 밈이 바로 이 발산이다.2
원인은 대개 셋이다. 관절 제약이 서로 모순되게 얽힌 과제약(over-constrained) 상태, 캐릭터 자기 몸끼리 겹쳐 충돌체가 서로를 밀어내는 자기충돌(self-collision), 그리고 지형에 파고들었다가 튕겨 나오는 관통(penetration)이다. 실무 처방으로는 제약을 부드럽게 푸는 소프트 제약(soft constraint)과 위치 보정, 반복 횟수를 늘린 솔버, 그리고 관절 각도 제한을 해부학적으로 타이트하게 잡아 이상한 자세 자체를 막는 방법을 쓴다. 안정성을 위해 위치 기반 동역학(PBD) 계열로 래그돌을 푸는 엔진도 많은데, 위치를 직접 보정하는 방식이라 잘 안 터지고 튜닝이 직관적이라는 장점이 있다.
4. 액티브 래그돌과 애니메이션 블렌딩[편집]
순수 래그돌(passive ragdoll)은 완전히 축 늘어진다. 살아 있는 캐릭터가 비틀거리거나, 넘어지면서 손으로 바닥을 짚는 “생명감”은 나오지 않는다. 그래서 현대 게임은 물리와 애니메이션을 섞는 액티브 래그돌(active ragdoll)로 넘어갔다.
핵심 아이디어는 각 관절에 목표 애니메이션 포즈를 향해 당기는 모터 토크(motorized joint)를 넣는 것이다. 물리는 여전히 중력·충돌에 반응하되, 관절은 원래 걷기·서기 애니메이션 자세를 어느 정도 따라가려 애쓴다. 두 신호를 섞는 비율을 애니메이션 블렌딩으로 조절하면, 총 맞은 팔만 축 늘어지고 나머지는 계속 뛰는 부분 래그돌(partial ragdoll)이나, 넘어졌다가 스스로 일어서는 겟업(get-up) 전환도 만들 수 있다. GTA류의 취객 걸음이나 Fall Guys의 뒤뚱거림이 전형적인 액티브 래그돌의 산물이다.3
물리에서 애니메이션으로, 또는 그 반대로 넘어가는 전환 순간을 매끄럽게 만드는 것이 이 분야의 진짜 기술이다. 사망 판정이 뜨는 프레임에 애니메이션의 뼈 자세와 속도를 래그돌 강체들의 초기 상태로 그대로 복사해 넣어야, 캐릭터가 순간이동하듯 튀지 않고 자연스럽게 무너진다.
5. 성능과 실무[편집]
강체 수십 개에 관절 제약을 걸어 매 프레임 푸는 일은 공짜가 아니다. 수십 명이 동시에 쓰러지는 전장에서는 래그돌만으로 CPU 예산이 바닥난다. 그래서 실무에서는 화면에서 멀거나 시야 밖인 캐릭터의 래그돌 스텝을 건너뛰거나 저해상도로 돌리는 LOD를 걸고, 일정 시간 뒤 움직임이 잦아든 시체는 강체 동역학의 슬립(sleeping)처럼 잠재워 계산에서 뺀다. 완전히 정지한 뒤에는 마지막 포즈를 그대로 굳혀 정적 메시로 전환하기도 한다.
래그돌은 게임 물리에서 가장 눈에 잘 띄는 기능이면서 동시에 가장 버그가 잦은 기능이기도 하다. 벽에 낀 시체, 무한히 떠는 사지, 지형을 뚫고 지하로 사라지는 시신은 QA 리포트의 영원한 단골이다. 그럼에도 손으로 찍은 사망 애니메이션 수백 개보다 물리 한 벌이 압도적으로 싸고 다채롭기 때문에, 3D 액션 게임에서 래그돌은 사실상 국룰로 자리 잡았다.4
6. 관련 문서[편집]
7. Footnotes[편집]
-
래그돌을 대중에게 각인시킨 작품으로 흔히 2004년의 Half-Life 2가 꼽힌다. Havok 물리로 굴러가는 시체가 당시로선 충격적이었다. 그전에도 래그돌은 있었지만, “물리 엔진이 곧 재미”라는 걸 대중에게 증명한 쪽에 가깝다. ↩
-
발산한 래그돌이 팔다리를 파닥이며 성층권으로 쏘아 올려지는 장면은 게임 물리 밈의 고전이다. 대개 관절 제약이 한 스텝에 만족 불가능한 자세로 몰리면서 솔버가 무한대에 가까운 보정력을 뿜어낸 결과다. 버그지만 웃겨서 일부러 남겨두는 개발자도 있다. ↩
-
GTA 시리즈의 자연스러운 넘어짐은 NaturalMotion의 Euphoria라는 액티브 래그돌 미들웨어 덕이 크다. 근육 모델과 균형 잡기 컨트롤러를 얹어, 맞으면 비틀거리며 넘어지지 않으려 발버둥치는 거동까지 만든다. ↩
-
“시체가 벽에 껴서 부들부들 떤다”는 자기충돌과 관통이 싸우다 난 교착 상태다. 물리 QA에서 강체 동역학의 슬립 파라미터와 함께 가장 자주 튜닝되는 지점이다. ↩