본문 바로가기
개발/Unity 내일배움캠프 TIL

Unity에서 짐벌 락 (Gimbal Lock) 관찰하기

by 석시 2023. 9. 15.



사원수(Quaternion)를 쓰는 이유에 대해 너무나도 궁금했는데, 이번 기회에 알게되어 정리해본다.

오일러 각

Inspector를 보면 Transform에서 볼 수 있는 Rotation을 보면 3차원의 정보로 표현이 되어 있다.

사실 너무 직관적이고 당연해보인다.

3차원 물체니까 3차원의 정보를 표현한다는 것이니깐…

X값을 변화하면 빨간색을 중심으로 회전한다.

Y값을 변화하면 초록색을 중심으로 회전한다.

Z값을 변화하면 파란색을 중심으로 회전한다.


오일러 각의 문제

항상 그대로만 동작하면 문제가 없겠지만, 조금만 값을 바꿔보면 이상한 점을 발견할 수 있다.

RotationX = 90, Z = 90인 상태에서 Y값을 변경해보자.

원래의 오일러 각대로라면 초록색을 중심으로 회전해야 할 것 아닌가?

???

이게 바로 짐벌 락(Gimbal Lock)이라는 현상이다.


오일러 각의 표현

인터넷에 짐벌을 치면 해당 이미지가 나온다.

Rotation의 각 회전 값들은 다음 그림처럼 동작하는 것이다.

우리가 알고 있어야 하는 무엇보다 중요한 사실은 각 축의 회전을 나타내는 벡터가 직교성을 가지고 있지 않다는 사실이다!

우리가 오해하고 있는 것 중 하나는

유니티에서 표시해주는 화살표는 Rotation 값을 의미하는 것이 아니라 Position 값의 axis만 의미하는 것이다!

“좌표계”를 구분하자.

회전 값이 전혀 들어가있지 않은 직교 좌표계(Cartesian coordinate)이다.

회전을 표현하고 싶다면 저렇게 위의 그림처럼 짐벌 또는 직교성이 없는 벡터로 표시해야 정확한 것이다.

짐벌의 문제는 바로 여기서 나온다.

각 회전이 서로 종속적이라는 것이다.

종속적이라는 이유 때문에 두 가지 문제가 발생한다.

  • 짐벌 락 문제
  • 순서에 따라 계산 결과가 달라지는 문제


짐벌 락 (Gimbal Lock) 문제

회전을 나타내는 두 벡터가 겹쳤을 때, 그 상태에서 회전이 가해지면 그것은 어느 벡터가 움직이고 있다고 볼 수 있는 것인가?

다음과 같이 회전 축이 모두 겹쳐버리면 축이 의미가 없어져 버리는, 즉 축이 사라지는 현상이 발생하는데 이러한 현상을 짐벌 락이라고 한다.


순서에 따라 결과가 바뀌는 문제

컴퓨터는 회전을 계산할 때 세 성분을 한 번에 계산하는 것이 아니라 성분 하나하나를 한 번에 계산한다.

위의 그림에서 가장 바깥 쪽 회전인 Yaw axis는 나머지 둘에 영향을 받지 않다가 안쪽 회전인 Pitch Axis는 Yaw axis의 영향을 받고, 가장 안쪽 회전인 Roll Axis는 나머지 모두의 영향을 받는다.

한 축의 회전을 가하니깐 다른 축도 같이 회전해버린다.

이는 무시무시한 결과를 낳는데, 어느 성분을 먼저 계산할 지에 따라 그 결과가 바뀐다.

즉, 항상 일관된 값을 유지하고 싶다면, 세 가지 성분 외에도 어느 값을 먼저 적용시키는지 그 순서를 같이 알려줘야 할 필요가 있다는 것이다.

이 말은 사실 3차원 회전의 정확한 표현을 위해서는 4가지 성분이 필요하다는 말이고, 이는 여러 3차원 작업들에서 사원수(Quarternion)를 사용하는 이유가 된다.

사원수에 대해서는 다음 글에서 자세히 다루었다.

사원수, 쿼터니언 (Quaternion)
이전 글 : Unity에서의 짐벌 락Unity에서 짐벌 락 (Gimbal Lock) 관찰하기오일러 각오일러 각의 문제오일러 각의 표현짐벌 락 (Gimbal Lock) 문제순서에 따라 결과가 바뀌는 문제 사원수(Quaternion)를 쓰는 이유에 대해 너무나도 궁금했는데, 이번 기회에 알게되어 정리해본다. 오일러 각 Inspector를 보면 Transform에서 볼 수 있는 Rotation을 보면 3차원의 정보로 표현이 되어 있다. 사실 너무 직관적이고 당연해보인다.3차원 물체니까 3차원의 정보를 표현한다는 것이니깐… X값을 변화하면 빨간색을 중심으로 회전한다. Y값을 변화하면 초록색을 중심으로 회전한다. Z값을 변화하면 파란색을 중심으로 회전한다. 오일러 각의 문제 항상 그대로만 동작하면 문제가 없겠지만..
https://seoksii.tistory.com/46


Uploaded by N2T