20250108 / Unity_6차 18주차 수요일
https://docs.unity3d.com/kr/2021.1/Manual/class-Quaternion.html
1. 쿼터니언의 등장 배경
쿼터니언은 3D 공간에서 회전을 표현하기 위해 수학자 윌리엄 로완 해밀턴(William Rowan Hamilton)이
1843년에 개발했으며, 등장 배경은 다음과 같다.
- 회전 표현의 한계: 3D 공간에서 오일러 각(Euler Angles)로 회전을 표현할 때, 깁스 현상(Gimbal Lock)이 발생할 수 있습니다.
- 깁스 현상: 서로 수직인 세 축이 특정 각도로 정렬되면 하나의 축의 자유도가 사라지는 문제.
- 매끄러운 회전 보간 필요: 회전 간의 부드러운 보간(Slerp, Spherical Linear Interpolation)이 어려웠던 문제를 해결하기 위해 등장.
쿼터니언은 깁스 현상을 방지하고, 효율적이고 정확하게 3D 회전을 표현하기 위해 고안되었다.
2. 쿼터니언이란?
쿼터니언은 스칼라와 벡터를 조합하여 4차원 복소수로 표현되는 수학적 구조다.
q = w + xi + yj + zk
- w: 스칼라 부분(실수).
- (x, y, z): 벡터 부분(허수).
하나의 회전을 나타내기 위해 4개의 숫자(스칼라 1개 + 벡터 3개)를 사용하는 방식
3. 쿼터니언의 특징
- 회전 표현
- 쿼터니언은 회전을 축(axis)과 각도(angle)로 나타냄
- 축: (x,y,z), 각도: θ
- 코사인/사인 값을 사용하여 정의 : q = (cos(θ/2), sin(θ/2)⋅x, sin(θ/2)⋅y, sin(θ/2)⋅z)
- 깁스 현상 방지
- 쿼터니언은 각 축을 독립적으로 관리하므로 깁스 현상이 발생하지 않음
- 효율적인 보간
- 쿼터니언은 회전을 부드럽게 보간(Slerp)할 때 매우 효율적
- 단위 쿼터니언:
- 회전을 나타내는 쿼터니언은 항상 단위 길이를 가져야 함
∣q∣ = √(w² + x² + y² + z²) = 1
- 회전을 나타내는 쿼터니언은 항상 단위 길이를 가져야 함
4. 쿼터니언의 수학적 연산
- 곱셈
- 두 쿼터니언을 곱하면 하나의 회전을 다른 회전에 적용할 수 있음
q₁ ⋅ q₂ = (w₁w₂ − v₁⋅v₂, w₁v₂ + w₂v₁ + v₁×v₂)
- 두 쿼터니언을 곱하면 하나의 회전을 다른 회전에 적용할 수 있음
- 역원(Inverse):
- 쿼터니언의 역원은 회전을 반대로 적용할 때 사용
q^(-1) = (w, −x, −y, −z)
- 쿼터니언의 역원은 회전을 반대로 적용할 때 사용
- 보간(Slerp):
- 두 회전 사이의 부드러운 전환을 위해 쿼터니언 보간을 사용
5. 쿼터니언의 장점
- 깁스 현상 방지:
- 오일러 각 기반의 회전 방식에서 발생하는 깁스 현상을 피할 수 있음
- 부드러운 보간:
- 선형 보간(Lerp)보다 자연스럽고 매끄러운 회전 구현 가능
- 효율성:
- 회전을 처리하는 데 더 적은 메모리와 연산량을 사용(4개의 값으로 3D 회전 표현)
- 안정성:
- 축이나 각도의 변화에 따라 회전이 왜곡되지 않음
6. 쿼터니언의 단점
- 직관성 부족:
- 오일러 각처럼 직관적으로 이해하기 어려움
- 복잡한 수학적 계산:
- 초보자에게는 수식이 어려울 수 있음