3ds Max 리깅 트러블슈팅: 김벌 락(Gimbal Lock) 원인과 쿼터니언(Quaternion) 및 오일러(Euler) 회전 제어법

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)를 활용한 실무 해결책까지 완벽히 정리합니다.

3ds Max 캐릭터 관절 리깅 회전 기즈모 및 김벌 락 분석
▲ 3ds Max 뷰포트 회전 기즈모와 오일러 축 정렬에 따른 김벌 락(Gimbal Lock) 현상

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) 심층 비교

3D 수학적 공간 회전 쿼터니언 구면 선형 보간 기법
▲ 4차원 복소수 벡터(X, Y, Z, W) 기반 쿼터니언 SLERP 구면 보간 원리
비교 항목 오일러 각 (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 및 쿼터니언 곱셈이 적용되었는가?

Post a Comment

다음 이전