728x90
반응형

📕오늘의 공부 주제



쿼터니언(Quaternion)을 사용하는 이유

🤔Why?



3D 게임이나 시뮬레이션에서 오브젝트의 회전을 처리할 때, 단순히 **오일러 각(Euler Angle)**을 쓰면 직관적이지만 회전 연산에서 여러 문제(특히 짐벌락)가 발생합니다. 이를 해결하고 안정적이며 효율적인 회전 처리를 하기 위해 **쿼터니언**을 사용합니다.

📖오늘의 공부 내용



1. 쿼터니언이란?

  • 4차원 복소수 형태로 회전을 표현하는 방법.
  • 구조: x, y, z, w (벡터 부분 + 스칼라 부분)
  • 유니티에서 Quaternion 구조체로 제공.

2. 오일러 각(Euler Angle)과의 비교

구분 오일러 각 쿼터니언
직관성 높음 (x, y, z 각도) 낮음 (4D 수학적 개념)
짐벌락 발생 가능 발생하지 않음
연산 효율 회전 누적 시 부정확 안정적, 빠름
보간(Lerp, Slerp) 비선형, 부자연스러움 자연스럽고 부드러움

3. 쿼터니언을 사용하는 이유

  1. 짐벌락(Gimbal Lock) 방지

    • 오일러 각을 사용할 경우, 두 회전 축이 겹쳐지는 순간 1개의 자유도가 사라져 의도치 않은 회전 제한이 발생.
    • 쿼터니언은 4D 공간에서 회전을 표현하므로 이런 문제가 없음.
  2. 연속 회전 누적 시 안정성

    • 오일러 각은 부동소수점 오차가 누적되어 회전값이 틀어질 수 있음.
    • 쿼터니언은 회전 연산 후 정규화(Normalization)를 통해 안정적인 회전 유지.
  3. 보간(Interpolation) 품질

    • Quaternion.Slerp를 통해 부드러운 구면 선형 보간 가능.
    • 카메라 회전, 오브젝트 회전 전환 시 자연스러운 움직임 구현.
  4. 연산 효율

    • 회전 행렬보다 메모리 사용량이 적고 곱셈 연산이 빠름.

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