쫑가 과정

유니티3D 회전 이해 본문

Unity/이론

유니티3D 회전 이해

쫑가 2022. 1. 6. 14:29

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

 

유니티 - 매뉴얼: Rotation and Orientation in Unity

임의의 게임 플레이 요소 추가 Rotation and Orientation in Unity Summary Rotations in 3D applications are usually represented in one of two ways, Quaternions or Euler angles. Each has its own uses and drawbacks. Unity uses Quaternions internally,

docs.unity3d.com

회전은 복잡하다. 그래서 정리가 필요하다. 자세하게 들여다보지는 않을 것이다.

3D 회전은 일반적으로 Quaternion(쿼터니언) 또는 Euler Angle(오일러 각)으로 표현된다.

Unity는 내부적으로 쿼터니언을 사용하지만 쉽게 편집할 수 있도록 Inspector에 해당 오일러 각의 값을 표시한다.

 

Euler Angle (오일러 각)


순차적으로 적용되는 X, Y 및 Z에 대한 세 가지 각도 값으로 표현해 간단하다.

특정 개체에 오일러 회전(Euler rotation)을 적용하려면 각 회전 값이 해당 축 주위의 회전으로 차례로 적용된다.

 

장점 :
1. 오일러 각은 3개의 각으로 구성된 직관적인(사람이 읽기 쉬운) 형식을 갖는다.
2. 오일러 각은 180도 이상의 회전을 통해 한 방향에서 다른 방향으로의 회전을 나타낼 수 있다.

 

제한 사항 : 오일러 각은 짐벌락으로 어려움을 가진다

 

짐벌 락? 세 개의 회전을 차례로 적용할 때 첫 번째 또는 두 번째 회전으로 인해 세 번째 축이 이전 축 중 하나와 같은 방향을 가리킬 수 있다. 고유한 축을 중심으로 세 번째 회전 값을 적용할 수 없기 때문에 "자유도(degree of freedom)"가 손실된다는 의미.

더 자세히 알고 싶다면 https://handhp1.tistory.com/3

 

Quaternion (쿼터니언)


개체의 방향 또는 회전을 나타내는 데 사용할 수 있다.

내부적으로 4개의 숫자(Unity에서 x, y, z &w로 참조됨)로 구성되지만 이 숫자는 각도나 축을 나타내지 않으며

일반적으로 직접 액세스 할 필요가 없다.

복잡하기에 Quaternion의 수학을 탐구하는 데 관심이 있지 않는 한 3D 공간에서 회전을 나타낸다는 사실만 알면 되고 x, y 및 z 속성을 알거나 수정할 필요가 없다.

 

이점 : 짐벌락이 발생하지 않는다.

 

제한 사항 :
1. 단일 쿼터니언은 어떤 방향으로도 180도를 초과하는 회전을 나타낼 수 없다.
2. 쿼터니언의 숫자표현은 직관적으로 이해할 수 없다.

 

쿼터니언 회전은 "origin" 또는 "Identity"에서 측정된다.
한 방향에서 다른 방향으로의 회전이 이러한 방식으로 측정되기 때문에 쿼터니언은 180도를 넘는 회전을 나타낼 수 없다.

더 더 자세히 알고 싶다면 http://cau.ac.kr/~kjpark/courses/2008_2_ca/Lec5.pdf

 

유니티에서의 회전


Unity에서 모든 게임 오브젝트 회전은 내부적으로 쿼터니언으로 저장. 이점이 제한을 능가하기 때문이다.

Inspector에 입력된 새 값(오일러 각)은 Unity 내부적으로 새 Quaternion 회전 값으로 변환된다.

 

스크립트에서 사용

스크립트에서 회전을 사용할 때는 Quaternion클래스와 해당 함수를 사용해 회전 값을 수정해야 한다.

 

1. 오일러 각을 사용하지 않고 회전 생성하고 조작하는 기능.

예)

1. 생성

2. 조작

2. 오일러 각을 사용

오일러 각을 처리하는 쿼터니언 클래스 함수를 사용.

쿼터니언에서 오일러 각을 검색하는 것이 가능하지만 검색, 수정 및 다시 적용하면 문제가 발생할 수 있다.

각도를 변수로 유지하고 회전에 오일러 각을 적용하는 데에만 사용한다는 점을 유의한다.

예)

자주 사용하는 쿼터니언 함수

https://docs.unity3d.com/kr/530/ScriptReference/Quaternion.html

 

Unity - 스크립팅 API: Quaternion

쿼터니언은 작지만, 짐벌 락(gimbal lock)에 걸리지 않고, 쉽게 보간될 수 있습니다. 유니티는 내부적으로 쿼터니언을 모든 회전을 포현하기 위해 사용합니다. 쿼터니언은 복잡한 수를 기반으로 하

docs.unity3d.com

 

사용자가 가장 많이 사용하는 쿼터니언 함수는 다음에 하나씩 보자.

Comments