3ds Max 리깅 트러블슈팅: 김벌 락(Gimbal Lock) 원인과 쿼터니언(Quaternion) 및 오일러(Euler) 회전 제어법
3D 캐릭터 애니메이션을 제작할 때 어깨, 목, 손목 관절을 회전시키다 보면 특정 각도에서 회전 축 하나가 먹통이 되거나, 키프레임과 키프레임 사이에서 팔이 360도로 기괴하게 꼬이며 뒤틀리는 현상을 겪게 됩니다. 3D 그래픽스 분야에서 작업자를 가장 오랫동안 괴롭혀온 이 치명적인 수학적 결함을 김벌 락(Gimbal Lock, 짐벌락)이라고 부릅니다. 3ds Max와 유니티, 언리얼 엔진 등 모든 3D 툴은 3차원 공간의 회전을 제어하기 위해 오일러 각(Euler Angles)과 쿼터니언(Quaternion, 사원수)이라는 상반된 수학적 체계를 사용합니다. 본 포스팅에서는 김벌 락이 발생하는 기하학적 원리부터 두 회전 체계의 장단점 비교, 3ds Max의 Euler XYZ 및 TCB 컨트롤러 튜닝법, 그리고 축 회전 순서(Axis Order) 최적화와 오일러 필터(Euler Filter)를 활용한 실무 해결책까지 완벽히 정리합니다.
1. 김벌 락(Gimbal Lock)의 발생 원리와 기하학적 메커니즘
오일러 각은 3차원 회전을 표현하기 위해 3개의 회전 링(Gimbal: X축, Y축, Z축)을 부모-자식 계층 구조로 중첩하여 회전시킵니다. 예를 들어 Z-X-Y 순서로 결합된 짐벌 구조를 가정해 보겠습니다.
- 계층 종속성: 가장 바깥쪽 링이 회전하면 안쪽의 두 링도 함께 회전하지만, 가장 안쪽 링의 회전은 바깥쪽 링에 영향을 주지 못합니다.
- 자유도(Degree of Freedom) 상실: 중간 축인 X축이 정확히 90도(또는 -90도) 회전하는 순간, 가장 바깥쪽의 Z축과 가장 안쪽의 Y축 링이 동일한 평면상에 완벽히 겹치게(Align) 됩니다.
- 결과: 독립적으로 움직여야 할 3개의 축 중 2개의 축이 같은 방향을 가리키게 되면서 1개의 회전 자유도를 완전히 잃어버리는 '잠김(Lock)' 상태가 발생합니다. 이 상태에서는 3차원 공간의 특정 방향으로 물체를 기울일 수 없게 되며, 컴퓨터는 최단 회전 경로를 찾지 못해 중간 프레임에서 메시가 팽이처럼 빙글 도는 플립(Flip) 현상을 일으킵니다.
2. 오일러 각(Euler Angles) vs 쿼터니언(Quaternion) 심층 비교
| 비교 항목 | 오일러 각 (Euler Angles) | 쿼터니언 (Quaternion) |
|---|---|---|
| 데이터 구조 | 3차원 각도 $(X, Y, Z)$ 도(Degree) 단위 | 4차원 벡터 $(X, Y, Z, W)$ 복소수 표현 |
| 김벌 락 여부 | 특정 각도(90도)에서 필연적 발생 | 김벌 락 원천 불가 (100% 방어) |
| 커브 에디터 조작 | 매우 직관적: X, Y, Z 트랙별 탄젠트 핸들 개별 조작 가능 | 불가능: 4차원 수치이므로 독립적인 F-Curve 곡선 편집 불가 |
| 회전 보간(SLERP) | 각 축별 선형 보간으로 최단 궤적 이탈 가능 | 완벽한 최단 회전 호(Arc)와 일정한 각속도 보장 |
3. 3ds Max에서의 실전 회전 제어 테크닉
실무 애니메이터에게는 커브 에디터(Curve Editor)에서 탄젠트 핸들을 만질 수 있는 오일러의 직관성이 절대적으로 필요합니다. 따라서 오일러의 편의성을 취하면서 김벌 락을 피하는 실무 기법을 적용해야 합니다.
3.1 관절별 축 회전 순서(Axis Order) 최적화
김벌 락은 "가운데 위치한 2번째 축이 90도 회전할 때" 발생합니다. 따라서 캐릭터의 가동 범위를 고려하여 90도 꺾일 확률이 가장 적은 축을 가운데 축으로 배치해야 합니다.
- 어깨 및 고관절(Ball & Socket): 팔을 앞으로 나란히 들거나 위로 만세할 때 90도에 도달하므로, 비틀림(Twist) 축을 가장 바깥에 배치하고 전후 회전 축의 순서를 변경(예:
YZX또는XZY)하여 가동 한계를 넓힙니다. - 설정 방법: 3ds Max
Motion 패널 > Motion Parameters > Axis Order드롭다운에서 관절별 최적 순서를 지정합니다.
3.2 오일러 필터(Euler Filter)를 활용한 360도 플립 자동 보정
모션 캡처 데이터를 불러오거나 복잡한 공중제비 액션을 베이크하면, 그래프 상에서 179°에서 다음 프레임에 -179°로 급락하며 360도 회전 튀는 현상이 발생합니다.
해결책: 3ds Max Curve Editor 상단 메뉴의 Curves > Apply - Euler Filter를 실행하면, 시각적으로는 동일한 포즈이지만 각도 수치를 181°, 185°...로 연속되게 언롤(Unroll)하여 회전 꼬임을 단 1초 만에 깔끔하게 정돈해 줍니다.
3.3 Biped의 TCB vs Euler 전환
3ds Max 바이페드는 기본적으로 쿼터니언 기반의 TCB 회전 컨트롤러를 사용합니다. 김벌 락은 없지만 커브 조정이 불편하다면, Motion 패널 > Biped > Keyframing Tools > Separate Tracks에서 Euler 활성화를 켜서 팔다리를 오일러로 전환하여 작업한 뒤, 최종 익스포트 시 베이크할 수 있습니다.
4. 게임 엔진(Unity / Unreal) 런타임 회전 처리 팁
- 인스펙터의 착시: 유니티 인스펙터에 표시되는
Rotation (X, Y, Z)값은 사용자의 편의를 위해 오일러 각도로 보여줄 뿐, 내부 트랜스폼(transform.rotation)은 100% 쿼터니언으로 저장 및 계산됩니다. - 스크립팅 정석: 코드로 회전을 더할 때는
transform.Rotate()대신Quaternion.Euler()를 곱하거나(q1 * q2), 두 회전 간의 최단 보간에는 반드시Quaternion.Slerp()를 사용하여 런타임 김벌 락과 보간 왜곡을 원천 방지합니다.
5. 결론 및 3D 관절 회전 제어 실무 체크리스트
김벌 락은 3D 소프트웨어의 버그가 아닌 3차원 오일러 투영의 수학적 한계이며, 이를 극복하기 위한 올바른 축 순서 설계와 쿼터니언 파이프라인 연계가 필수적입니다. 애니메이션 납품 및 엔진 익스포트 전 아래 5가지 체크리스트를 확인하시기 바랍니다.
- 주요 관절 Axis Order 검수: 어깨 및 골반 등 3축 회전이 빈번한 조인트의 중간 축이 90도 임계각에 쉽게 도달하지 않는 순서로 설정되었는가?
- 커브 에디터 360도 스파이크 확인: 회전 그래프가 $180^\circ$ 경계선에서 반대 부호로 급격히 튀는 구간에 오일러 필터(Euler Filter)를 적용했는가?
- 중간 보간 프레임 검증: 시작 키와 끝 키 사이의 인비트윈(In-between) 프레임에서 팔다리가 궤적을 벗어나 비정상적으로 꼬이지 않는가?
- FBX 베이크 시 회전 무결성: 바이페드/CAT 리그를 FBX로 베이크 후 유니티 임포트 시 본 축이 반대로 뒤집히거나 틱(Tick) 튀는 현상이 없는가?
- 스크립트 회전 연산 검토: 인게임 실시간 회전 로직에 오일러 직접 연산 대신
Quaternion.Slerp및 쿼터니언 곱셈이 적용되었는가?
댓글 쓰기