2020년 10월 1일 목요일

TRS Matrix Decompose

 

TRS 는 Transform * Rotation * Scale 을 의미하며 이때의 기준은 column major 이다. 

즉 곱하는 순서가 뒤로부터 해서 S, R, T 순으로 벡터를 변환한다는 말.


Transform  은 간단하다. _14, _24, _34 가 translate 좌표이다. 


Scale 은 Rotation  과의 곱과 Rotation Matrix 가 unit vector 들로 이루어짐을 알아야 한다.

$\begin{bmatrix}\combi{s}_x&0&0\\0&\combi{s}_y&0\\0&0&\combi{s}_z\end{bmatrix}\begin{bmatrix}\combi{r}_{11}&\combi{r}_{12}&\combi{r}_{13}\\\combi{r}_{21}&\combi{r}_{22}&\combi{r}_{23}\\\combi{r}_{31}&\combi{r}_{32}&\combi{r}_{33}\end{bmatrix}=\begin{bmatrix}\combi{s}_x\combi{r}_{11}&\combi{s}_x\combi{r}_{12}&\combi{\combi{s}_xr}_{13}\\\combi{s}_y\combi{r}_{21}&\combi{s}_y\combi{r}_{22}&\combi{\combi{s}_yr}_{23}\\\combi{\combi{s}_zr}_{31}&\combi{s}_z\combi{r}_{32}&\combi{\combi{s}_zr}_{33}\end{bmatrix}$[
sx00
0sy0
00sz
]
[
r11r12r13
r21r22r23
r31r32r33
]
=[
sxr11sxr12sxr13
syr21syr22syr23
szr31szr32szr33
]
$\combi{s}_x=\ sign\left(\combi{s}_x\combi{r}_{11}\ \cdot \ \combi{s}_x\combi{r}_{12}\ \cdot \ \combi{\combi{s}_xr}_{13}\right)\ \cdot \ root\left(\combi{\combi{s}_x\combi{r}_{11}}^2\ \cdot \ \combi{\combi{s}_x\combi{r}_{12}}^2\ \ \cdot \ \combi{\combi{s}_x\combi{r}_{13}}^2\ \right)$sx= sign(sxr11 · sxr12 · sxr13) · root(sxr112 · sxr122  · sxr132 )
$=\ sign\ \cdot \ root\left(\combi{\combi{s}_x}^2\right)\ =\ sign\ \cdot \ \combi{s}_x$= sign · root(sx2) = sign · sx


이 결과의 row 를 주의 깊게 보자.

한 축에 대한 scale 이 3번 있다. 그러므로 row 의 곱의 부호가 scale 의 부호다.

한 축의 제곱들의 합은 R 의 row 가 unit vector 이므로 scale 의 제곱이 된다.

그러므로 위에서 구한 부호 * root(row 의 제곱들의 합) 이 scale 이 될 것이다. 


Rotation 은 위에서 구한 scale 을 보면 된다. 그냥 저기서 scale 만 나누면 되니까.






List