[Unity] 짐벌락(Gimbal Lock)

Learning 

When: 1학년 6월 18일

 

How:

학교 수학 시간에 수학과 관련된 지식을 친구들에게 설명하는 수행평가가 있었는데, 예전에 유니티의 Euler 회전 방식에 대해 공부했던 것이 생각나고, 그것을 공부하면서 알게된 짐벌락이 떠올라서 공부하게 되었습니다. 전에는 회전 방식을 이해하는 데에만 많은 시간을 썼지만, 2학년이 되면 3D 공부도 해야 하기 때문에 슬슬 데드락에 대해 알아야 할 것 같았습니다.

Understanding:

일단 Euler Angle은 3개의 축을 사용하는 방식인데, 돌리는 순서를 뜻하는 값이 없기 때문에 유니티는 y - x - z 순서로 돌리기로 정하였습니다. 여기서 문제점은 x축을 돌린다고 하면 z축은 x축을 기준으로 돌아가고, y축은 돌아가지 않습니다. (순서가 정해져 있기 때문에 x축을 돌리고 y축을 돌려도 실제로는 y축을 돌리고 x축을 돌린 것처럼 돌아갑니다.) 그러면 z축이 겹치게 되고, 하나의 축을 잃어버리는 현상이 일어나는데, 이것이 데드락입니다.

이 gif를 보면 x축을 돌려도 y축은 영향을 받지 않고 그냥 Global y축으로 돌아가고, z축은 영향을 받아서 Global y축으로 돌아가게 됩니다. 유니티는 짐벌락 문제를 해결하기 위해 인스펙터 창에선 보기 편한 Euler Angle을 사용하지만, 내부적으로는 Quaternion이라는 행렬을 사용하여 오브젝트의 회전을 계산합니다.

 

Result: Unity는 Euler Angle을 사용하면 짐벌락이라는 문제가 생기기 때문에, Quaternion이라는 짐벌락도 없고 컴퓨터 입장에서 계산하기도 편한, 우리가 보기엔 조금 어려운 회전 방식을 사용합니다.