본문 바로가기

Unity/유니티 이론

유니티 회전

짐벌락(Gimbal Lock)

먼저 짐벌락을 설명하기 전에 오일러 각(Eular Angle)에 대해서 이해해야 합니다. 오일러 각은 3차원 공간에서 *강체가 놓은 방향을 표시하기 위해 오일러가 도입한 세 개의 각도입니다. x 축을 롤(roll), y축을 피치(pitch), z 축을 요(yaw)라고도 부릅니다.

오일러 각을 이용해서 물체를 회전하다 보면 두 축이 한 축으로 되는현상이 발생합니다. 이를 짐벌락이라고 합니다.

 

* 강체 - 물리학에서 형태가 변하지 않는 물체

짐벌락 예시

유니티는 오일러 각을 이용해 회전을 직관적으로 조작할 수 있도록 인스펙터 뷰에 표시하고 있습니다. 하지만, 내부적으로는 쿼터니언 방식으로 변환하여 회전을 계산합니다. 따라서 사용자가 예외적으로 오일러 각 계산을 이용하도록 설정하지 않는 이상 유니티에서 짐벌락 현상은 일어나지 않습니다.

 

오일러 각 (Eular Angle)

수학자 오일러가 고안한 개념으로 3차원 공간의 절대 좌표를 기준으로 물체의 회전을 측정하는 방식입니다.

1. 장점

- x, y, z 세 개의 축을 기준으로 회전하기에 직관적이며, 조작하기 쉽습니다.

- 180도가 넘는 회전도 표현할 수 있습니다.

2. 한계(단점)

- 짐벌락 : 오일러 각을 이용한 회전은 먼저 회전한 축이 아직 회전하지 않는 축을 함께 회전시킵니다. 따라서, 두 번째로 회전 한 축이 회전 결과로 인해 세 번째 축과 첫 번째 축이 겹쳐질 수 있는데, 이러한 상태를 짐벌락이라고 말하며, *degree of freedom을 상실하게 됩니다.

 

* degree of freedom - 첫 번째, 세 번째 축 회전이 하나의 축을 기준으로 일어나기에 자유도 손실

 

쿼터니언(Quaternion)

쿼터니언은 4개의 수 (x, y, z, w)로 이루어 지며, 각 성분은 축이나 각도를의미하는 것이 아니라, 하나의 벡터(x, y, z)와 스칼라(w, roll을 표현)를 의미합니다.

일반적으로 각 성분에 직접 접근 및 수정하지 않습니다. 쿼터니언 수학을 완전히 이해하지 않은 채로 직접 수정하게 되면 의도한 방식으로 작동시키기가 어렵기 때문입니다.

오일러 각이 회전 순서에 기반하는 반면, 쿼터니언은 세 축을 동시에 회전시키기에 짐벌락 현상이 발생하지 않습니다.

(x, y, z 성분은 항상 동시에 변화)

벡터가 위치 position임과 동시에 방향 direction이듯이, 쿼터니언은 방향 Orientation 임과 동시에 회전 rotation입니다.

 

참고

https://www.youtube.com/watch?v=zc8b2Jo7mno&feature=youtu.be&t=2m9s

 

 

유니티에서의 회전 함수들을 간단하게 소개하겠습니다.

this.transform.rotation

- 앞서 말했듯이 유니티에서는 내부적으로 회전 값을 쿼터니언(Quaternion) 회전 값을 계산한다고 했습니다.

  그래서 회전값을 불러오면 현재 오브젝트의 회전 값을 쿼터니언으로 출력합니다.

this.transform.eulerAngles

- 오브젝트의 회전 값인 쿼터니언 값을 저희가 흔히 사용하는 0 ~ 360도의 각도 오일러(Euler) 각도로 출력합니다.

 

오브젝트의 각도를 직접적으로 변경하고 싶을 때는 

this.transform.rotation = Quaternion.Euler(x, y, z); x, y ,z 값은 0 ~ 360 값을 대입하면 됩니다.

더 자세한 설명은 유니티 문서에서 확인할 수 있습니다.

 

Unity 회전

https://docs.unity3d.com/kr/2018.1/Manual/QuaternionAndEulerRotationsInUnity.html

'Unity > 유니티 이론' 카테고리의 다른 글

직렬화 (Srialize)  (2) 2024.07.03