본문 바로가기
Computer Graphics

컴퓨터 그래픽스 - Euler Transform

by eigen96 2024. 2. 8.
728x90

설 연휴 전날

점심에 칼퇴를 시켜주셨다 ㅎㅎ.

다음주부터 하고싶은 게 많기에

얼른 카페에 와서 이번주 공부한 그래픽스를 정리하고 있다.

 

그동안 배웠던 3차원 회전은 기본축을 중심으로 이루어지는 변환이었다.

그림을 예시로 x축을 중심으로 회전을해도 여전히 yz평면 위에서 회전할 뿐이다.

x축 중심을 회전한 후 y축 중심으로 60도 회전한다면 주전자 주둥이 끝이 yz평면을 벗어나게 된다.

이와 같이 x,y,z축 중심 회전을 고루 이용한다면 물체의 임의 방향으로 변환할 수 있다는 것이다.

이것이 Euler Transform이다.

다시 말해, x,y,z 축 중심의 회전을 결합해서 임의의 방향을 제공하는 것이다.

세 주축을 쓰기 때문에 각도 세가지가 주어지며 이것이 Euler angles이다.

 

 

다시 말해, x,y,z 축 중심의 회전을 결합해서 임의의 방향을 제공하는 것이다.

세 주축을 쓰기 때문에 각도 세가지가 주어지며 이것이 Euler angles이다.

위에서는 x,y,z 축 순서로 회전을 시켰었다.

순서를 바꿔 변환하게 되면 결과가 달라진다.

 

 

 

Keyframe Animation in 2D

이것이 어디에 쓰일지 생각을 해보기 전에

Keyframe Animation을 알아보자.

초창기 만화 애니메이션의 24프레임을 그릴 때,

1번과 13번, 24번을 그려둔다면, 보조 애니메이터가 2번부터 12번, 14번부터 23번까지의 프레임을 그려낸다.

이때 1, 13, 24번을 Key Frame이라고 하며, 나머지는 In Between Frames이라고 한다.

만화영화에서 쓰이는 용어이지만 컴퓨터 애니메이션에서도 동일하다.

키프레임에 해당하는 동작 데이터를 그래픽 아티스트가 정해준다면, 런타임에 중간 프레임은 자동으로 생성이 된다.

우리의 보조 애니메이터는 Interpolated… 선형보간을 통해 가능하다.

 

 

3차원에서도 KeyFrame Animation은 동일하게 적용이 된다.

KeyFrame0, 1, 2의 위치에 주전자가 보인다.

0 → 1의 변화는 회전이 이루어지지 않았으므로 orientation의 Euler Angles는 모두 변화가 없는 것을 알 수 있다.

1 → 2의 변화는 X축 방향으로 90도 만큼 회전을 하고 z축 중심으로 시계방향으로 -90도 회전하였다는 것을 그래프로 확인할 수 있다. Y축의 Euler Angle은 0으로 고정이 되어있다.

KeyFrame data를 그래프로 표현한 것이다.

그렇다면 In Between Frame에도 Orientation, Position이 정해져야하는데 이때 선형보간을 통해 가능하다.

 

 

실제로 프로그램에 그래프가 주어지는데

지금 왼쪽 그래프는 Smoothe하지 않기 때문에 끊어지는 느낌을 갖게 될것이다.

이것을 방지하기 위해 우리가 사용한 1차식의 보간이 아닌 2차, 3차 함수를 쓴다면 부드러운 보간이 가능해지며 오른쪽과 같은 그래프가 나오게 된다.

Euler Angle을 사용해서 물체의 방향을 표현하고, 그러한 Euler Angle이 중간 프레임에서 보간을 통해 방향을 결정한다.

  1. 물체의 방향은 회전이 결정한다.
  2. 그 회전은 Euler Transform이 담당할 수 있다.
  3. Euler Transform은 각도 세개로 표현이 된다.
  4. 세 각은 Key Data를 형성하고 중간 프레임에서 보간이 된다.
  5. 보간된 각들은 행렬이 3개 나오며, 결합하면 3x3 행렬을 만들 수 있고 물체에 적용하면 회전된 물체가 나옴.

 

다음 그림을 보면

L자 모양의 물체가 xy평면에 놓여있다.

우선 x축 중심으로 0도 회전한다.

y축 중심으로 90도 회전한다.

z축 중심으로 0도 회전한다.

이 결과의 방향을 a)와 같이 각도로 표현할 수 있다.

 

 

두번째 그림을 보면…

X축 중심으로 반시계 방향으로 90도 회전한다.

Y축 중심으로 45도 회전한다.

Z축을 중심으로 반시계 방향으로 90도 회전한다.

YZ 평면에 V자 형태로 존재하게 된다.

또다른 방향을 부여받았으므로 Euler Angle로 표현할 수 있다.

 

 

 

이 두 그림을 Key Frame으로 쓴다고 하고

구간을 1초로 둔다면

In Between Frame은 이 두 Euler Angle을 보간하여 결정된다.

각각의 t를 0과 1이라고 가정했을때 t가 1/2인 Euler Angle은 C)와 같이 나온다.

그런데 X좌표가 -0.1, 0.3인 것이 이상하다.

L자 물체의 양쪽 끝이 YZ평면에 놓여있지 않다는 것이다.

예상한 보간 결과는 L자 물체가 YZ평면에 놓여있어야한다.

Euler Transform이 직관적이지만 올바르게 보간된다는 보장이 없기 때문에

KeyFrame Animation에서는 쓰기가 어렵다는 것이다.

 

다음은 이에 대한 해결책인 Quaternion을 알아보도록 하겠다.

728x90

댓글