Euler transforms and Quaternions

SYiee·2023년 8월 19일
0

Graphics

목록 보기
3/5
post-thumbnail

📌 Euler Transforms

오일러 트랜스폼에는 문제가 존재한다. 이 문제가 무엇이고 이를 개선시킨 방안인 Quaternions에 대해 살펴보자.

Euler Transforms이란?

오일러 앵글로 회전을 할 때는 x,y,z 축을 기준으로 회전을 했다. 그런데 만약 임의의 축을 기준으로 회전하고 싶으면 어떻게 할까?

The order of rotation

오일러 회전은 순서가 굉장히 중요했다! 명시적으로 어떤 순서로 회전을 할 것인지 설정을 해주었어야 했다.
아래 사진처럼 회전 순서를 바꾸면 결과가 완전히 달라지게 된다.

Keyframe Animation

오일러 회전의 문제에 대해 알기 위해 Keyframe Animation을 살펴보고자 한다.

Keyframe Animation in 2D

  • 보통 키프레임 몇 개를 그리고 그 사이의 보간은 interpolation을 통해 컴퓨터가 만들어낸다.

Keyframe Animation in 3D

  • Sampling between keyframes.

  • 샘플링하여 보간된 데이터를 얻어와 사이의 애니메이션을 생성한다

Animation smoothing

  • 키프레임사이의 각지게 만들면 어색할 수 있다. 여러번 샘플링할 수 도 있겠지만 스무딩 알고리즘을 통해 자연스럽게 할 수 있다.
    → higher-order interpolation

Euler angle 의 문제점

Euler angles is intuitive and easy to use!

하지만! 두개의 서로 다른 Euler Rotation을 인터폴레이션을 할 때 생각보다 스무스하게 되지 않는다
→ 뭔가 미묘하게 정확히 인터폴레이션 같지 않게 나타난다

💡 왜 이런 문제가 발생할까?

Euler rotation 은 물체가 특정 축을 기준으로 회전을 하는 것이다.

오일러 트랜스폼의 문제 1

  • Euler angle rotates object only along the axis.

  • (60, 30, 45) 회전하며 축이 꼬이게 된다.
    → x y z가 모두 한번에 회전하게 된다.

    • 각도에 대한 보간이 서로 똑같은 인터벌을 가지는 회전으로 나타나지 않는다
      ⇒ 이런 특성으로 우리가 원하는 형태로 움직이지 않는다

오일러 트랜스폼의 문제 2

회전 축 두개가 겹치면서 한 축에 대한 회전을 구현할 수 없는 상태가 되어버린다. gimbal lock이 발생하면 DoF를 잃는다.
→ 이를 해결하기 위해 예전에는 90도 회전을 막고 89도 회전을 시키기도 했다.


📌 Quaternion

A quaternion is an extended complex number.

Gimbal lock의 해결책

  • Quaternions are more compact, efficient, and numerically stable compared to Euler Rotation
    오일러 회전에 비해 장점들이 많지만
  • However, quaternions look more complex and difficult to understand
    이해하기 어렵고 복잡하다
  • 연속으로 다른 쿼터니언으로 회전을 시킬 때 손쉽게 합칠 수 있다.
  • q=(qv,qw)q = (q_v, q_w)

    • q_v : vector part (imaginary part) 허수부
    • q_w : the scalar part (real part) 실수부

Hamilton Product

두개의 Quaternion p와 q의 product

Conjugation of the quaternion

  • (PQ)=qp(PQ)^* = q^*p^*

Unit Quaternion

  • The magnitude of a quaternion p
    → the square root of the product of a quaternion with its conjugate

  • unit quaternion : norm is 1

Interpolation of Quaternions

  • Quaternion : 회전 상태를 말한다. 회전 시키는 것이 아니라

    → key frame 0 에서 큐브의 쿼터니언이 있고 key1에서 큐브의 쿼터니언이 있는 것이다

  • Quaternion interpolation
    → 오일러에 비해 자연스럽게 잘 된다.
    → slerp이라는 함수를 사용한다.

  • Unity는 기본적으로 쿼터니언을 사용한다.

Quaternion and Matrix

매트릭스 형태로도 쿼터니언을 표현할 수 있고 반대로 매트릭스가 주어졌을 때 쿼터니언을 역산할 수도 있다.


🖇 Reference

해당 포스트는 강형엽 교수님의 게임그래픽프로그래밍 [GGP-23-1] 수업을 수강하고 정리한 내용입니다. 잘못된 내용이 있다면 댓글로 알려주시면 감사하겠습니다😊
[Gimbal Lock] https://en.wikipedia.org/wiki/Gimbal_lock

profile
게임 개발자

0개의 댓글