아주 오래전에 오일러 회전을 공부하면서, 짐벌락 현상이 일어나는 사실만 인지했었습니다.
당시에는 짐벌락이 정확히 무엇인지 책을 아무리 봐도 이해가 안되었기 때문에 그냥 대충 넘어갔고, 그렇게 그렇게 세월이 흘렀습니다. 그런데 최근에 관련 영상을 찾아보고 단번에 이해를 하게 되었습니다.
오일러 회전과 짐벌 락
3D 공간에서 회전을 표현하는 가장 직관적인 방법은 X, Y, Z 축을 기준으로 각도를 나누어 회전시키는 방식입니다.
이를 오일러 회전(Euler Rotation)이라고 합니다.
예를 들면 X축 회전, Y축 회전, Z축 회전처럼 사람이 이해하기 쉬운 형태로 회전을 다룹니다.
문제는 이 회전이 순차적이라는 점입니다.
그리고 한 축을 회전시키면, 그 다음 축은 이미 회전된 좌표계를 기준으로 다시 회전하게 됩니다.
이 구조 때문에 특정 각도에서 문제가 발생하게 되는데 두 개의 회전 축이 같은 방향으로 겹치게 되고 결과적으로 회전 자유도가 하나 사라집니다.
이 현상을 짐벌 락(Gimbal Lock) 이라고 합니다. 짐벌 락이 발생하면 회전이 갑자기 꼬이거나 의도하지 않은 축으로 돌아가거나 카메라 조작이 이상해지는 문제가 생깁니다.
이건 버그가 아니라 오일러 회전 방식이 가진 구조적인 한계입니다.
참고 영상 :
https://www.youtube.com/watch?v=zc8b2Jo7mno&t=7s
쿼터니언
그래서 실제 3D 엔진 내부에서는 사용자 입력은 오일러 각으로 받더라도 내부 계산은 대부분 쿼터니언 (Quaternion)으로 처리합니다. 쿼터니언은 축이 겹치는 개념 자체가 없고 짐벌 락이 발생하지 않기 때문에 안정적인 회전을 보장합니다. 쿼터니언에 대해서도 참고 영상과 함께 다뤄볼 예정입니다.