Chapter 2. Geometrical Methods - Quaternions - 전자공학 / Networked Virtual Computing Lab/ 조성업
Networked Virtual Computing Lab. 2 Quaternion Algebra - 1 Quaternion definition q = w + xi + yj + zk Where w, x, y, z are real numbers i 2 = j 2 = k 2 = -1 ij = -ji = k jk = -kj = i ki = -ik = j q 0 * q 1 = ( w 0 w 1 - x 0 x 1 - y 0 y 1 - z 0 z 1 ) + (w 0 x 1 + x 0 w 1 + y 0 z 1 + z 0 y 1 ) i + (w 0 y 1 - x 0 z 1 + y 0 w 1 + z 0 x 1 ) j + (w 0 z 1 + x 0 y 1 - y 0 x 1 + z 0 w 1 ) k 교환 법칙 성립 안됨 ij = -ji = k / jk = -kj = i / ki = -ik = j q 0 * q 1 q 1 * q 0
Networked Virtual Computing Lab. 3 Quaternion Algebra - 2 Conjugate of Quaternion q * = (w + xi + yj + zk ) * = w - xi - yj – zk ( q * ) * = q ( pq) * = q * p * Norm of Quaternion Real value N(q) = N(w + xi + yj + zk) = w 2 + x 2 + y 2 + z 2 N(q) = N(q * ) N(pq) = N(p)N(q)
Networked Virtual Computing Lab. 4 Quaternion Algebra - 3 Multiplicate Inverse of Quaternion Notation: q q -1 Property: q q -1 = q -1 q = 1 Inverse: q -1 = q * / N(q) Quaternion 을 real-value scalar 로 나눌 때에는 w, x, y, z 각각을 나눈다. ( q -1 ) -1 = q / ( pq ) -1 = q -1 p -1 Unit Quaternion Quaternion q for which N(q) = 1 q = q -1 / qq = q q = cos + u sin u = u 0 i + u 1 j +u 2 k = (u 0,u 1,u 2 ) u has length 1 u u = -1
Networked Virtual Computing Lab. 5 Relationship of Quaternions to Rotations - 1 Unit Quaternion & Rotation unit quaternion q = cos + u sin u = u 0 i + u 1 j +u 2 k = (u 0,u 1,u 2 ) u has length 1 u u = -1 v = v 0 i + v 1 j + v 2 k = (v 0, v 1, v 2 ) then in R (v) = q v q * … R (v) 는 3D vector v 를 3 차원 축 u 에 대해서 2 만큼 회전시키는 함수가 된다. R (v) 가 rotation function 이라는 것을 증명하려면 다음 4 가지를 증명해야만 한다. R (v) is a 3D-Vector R (v) is a length-preserving function R (v) is a linear transformation R (v) does not have an reflection component
Networked Virtual Computing Lab. 6 Rotation Matrix about unit-length axis from Angle & Axis to Rotation Matrix = angle of rotation / U = unit-length axis of rotation I = Identity matrix S = R = I + sin S + (1 – cos )S 2 0 -u 2 u 1 u 2 0 -u 0 -u 1 u 0 0
Networked Virtual Computing Lab. 7 Conversion from Quaternion to Rotation Matrix from Quaternion to Rotation Matrix Solution: w, x, y, z find & U R = I + sin S + (1 – cos )S 2 Some identities 2sin 2 ( /2) = 1- cos sin( ) = 2sin( /2)cos( /2) From above two identities … 2wx = (sin )u 0 / 2wy = (sin )u 1 / 2wz = (sin )u 2 2x 2 = ( 1 – cos )u 0 2 / 2xy = (1 - cos )u 0 u 1 / 2xz = (1 - cos )u 0 u 2 2y 2 = ( 1 – cos )u 1 2 / 2yz = (1 - cos )u 1 u 2 2z 2 = ( 1 – cos )u 2 2 Right-hand side of all above equations are terms in R = I + sin S + (1 – cos )S 2 replacing them yields … R = 1-2y 2 – 2z 2 2xy + 2wz 2xz – 2wy 2xy – 2wz 1-2x 2 – 2z 2 2yz + 2wx 2xz + 2wy 2yz – 2wx 1-2x 2 – 2y 2
Networked Virtual Computing Lab. 8 Quaternion Interpolation - 1 Interpolation 3D animation 을 위해서는 Quaternion 간의 interpolation 이 필요 Quaternion 의 곱셈은 행렬의 곱셈보다 빠르며, quaternion 의 interpolation 을 이용하면 매끄러운 animation 구현 가능 일반적인 interpolation 공식 q(t) = f 0 (t)q 0 + f 1 (t)q 1 ( 0 t 1 ) f 0 (t), f 1 (t) : scalar function f 0 (0) = 1, f 0 (1) = 0 f 1 (0) = 0, f 1 (1) = 1
Networked Virtual Computing Lab. 9 Quaternion Interpolation - 2 LERP(Linear-interpolation) lerp(t, q 0, q 1 ) = (1-t)q 0 + tq 1 = t(q 1 – q 0 ) + q 0 Interpolation 의 결과로 나타나는 quaternion 의 Norm(=magnitude) 가 달라진 다. 즉, magnitude 가 보존되지 않는다. Rotation 에 사용하기 위해서는 Interpolation 의 결과로 나타나는 quaternion 의 Norm(=magnitude) 을 계속 scaling 해 주어야 한다. 속도는 빠르지만 곡선 형태의 매끄러운 animation 을 구현하기는 어렵다.
Networked Virtual Computing Lab. 10 Quaternion Interpolation – 3 SLERP(Spherical Linear Interpolation) 3D unit vector: sphere 상의 point 를 표현 가능 Unit quaternion: hyper-sphere 상의 point 를 정의 가능 Hyper-sphere 상의 두 quaternion 을 interpolation 해서 매끄러운 곡선 형태의 animation 구현 가능 수식 slerp(t, q 0, q 1 ) = [q 0 sin( (1-t)) + q 1 sin( )]/sin( ) = q 0 와 q 1 사이의 각도 q 0, q 1 을 4 차원 vector 로 보고 내적을 이용해 계산 Magnitude 가 보존된다. slerp(t, q 0, q 1 ) = q 0 (q 0 -1 q 1 ) t
Networked Virtual Computing Lab. 11 Quaternion Interpolation - 4 SLERP 장점 : 매끄러운 3D animation 단점 : 둘 이상의 quaternion 을 연속으로 interpolation 할 경우 각각의 제어점에 서 방향이 갑자기 꺽이는 듯한 경로가 생길 수 있음 Spherical Cubic Interpolation 양 끝점에서 좀 더 부드러운 곡선 경로 생성 SQUAD(t; p, q, a, b) = slerp( 2t(1-t); slerp(t; p, q), slerp(t; a, b) ) Interpolation 결과는 p~q 를 연결하는 호를 따르지 않고 a~b 를 잇는 호를 향한 곡선을 따른다. p q a b p q a b
Networked Virtual Computing Lab. 12 Quaternion Interpolation - 5 Spline Interpolation N 개의 quaternion 이 있다고 할 때 {q n, a n, b n } (n=0, 1, 2, … N-1) Interpolation 은 다음과 같이 이루어지게 된다. Sn(t) = squad(t, q n, q n+1, a n, b n+1 ) 매끄러운 interpolation 결과를 얻기 위한 a n, b n 은 다음과 같다. a n = b n = q n exp[-(log(q n -1 q n-1 ) + log(q n -1 q n+1 ) ) / 4]