728x90
반응형
📕오늘의 공부 주제
쿼터니언(Quaternion)을 사용하는 이유
🤔Why?
3D 게임이나 시뮬레이션에서 오브젝트의 회전을 처리할 때, 단순히 **오일러 각(Euler Angle)**을 쓰면 직관적이지만 회전 연산에서 여러 문제(특히 짐벌락)가 발생합니다. 이를 해결하고 안정적이며 효율적인 회전 처리를 하기 위해 **쿼터니언**을 사용합니다.
📖오늘의 공부 내용
1. 쿼터니언이란?
- 4차원 복소수 형태로 회전을 표현하는 방법.
- 구조: x, y, z, w (벡터 부분 + 스칼라 부분)
- 유니티에서
Quaternion구조체로 제공.
2. 오일러 각(Euler Angle)과의 비교
| 구분 | 오일러 각 | 쿼터니언 |
|---|---|---|
| 직관성 | 높음 (x, y, z 각도) | 낮음 (4D 수학적 개념) |
| 짐벌락 | 발생 가능 | 발생하지 않음 |
| 연산 효율 | 회전 누적 시 부정확 | 안정적, 빠름 |
| 보간(Lerp, Slerp) | 비선형, 부자연스러움 | 자연스럽고 부드러움 |
3. 쿼터니언을 사용하는 이유
짐벌락(Gimbal Lock) 방지
- 오일러 각을 사용할 경우, 두 회전 축이 겹쳐지는 순간 1개의 자유도가 사라져 의도치 않은 회전 제한이 발생.
- 쿼터니언은 4D 공간에서 회전을 표현하므로 이런 문제가 없음.
연속 회전 누적 시 안정성
- 오일러 각은 부동소수점 오차가 누적되어 회전값이 틀어질 수 있음.
- 쿼터니언은 회전 연산 후 정규화(Normalization)를 통해 안정적인 회전 유지.
보간(Interpolation) 품질
Quaternion.Slerp를 통해 부드러운 구면 선형 보간 가능.- 카메라 회전, 오브젝트 회전 전환 시 자연스러운 움직임 구현.
연산 효율
- 회전 행렬보다 메모리 사용량이 적고 곱셈 연산이 빠름.
4. 유니티에서 쿼터니언 사용 예시
// 회전 적용
transform.rotation = Quaternion.Euler(0, 90, 0);
// 부드러운 회전 전환
transform.rotation = Quaternion.Slerp(
transform.rotation,
targetRotation,
Time.deltaTime * speed
);
5. 결론
- 오일러 각은 직관적이지만 안정성과 정밀도에서 한계가 있음.
- 쿼터니언은 이해하기 어렵지만, 3D 회전 처리의 안정성과 품질을 보장하므로
게임 개발, 물리 시뮬레이션, 로보틱스 등에서 필수적으로 사용됨.
728x90
반응형
'프로그래밍 공부 > TIL' 카테고리의 다른 글
| 2025-08-04 TIL (0) | 2025.08.04 |
|---|---|
| 2025-08-01 TIL (0) | 2025.08.01 |
| 2025-07-30 TIL (1) | 2025.07.30 |
| 2025-07-29 TIL (0) | 2025.07.29 |
| 2025-07-28 TIL (0) | 2025.07.28 |
