Game Development, 게임개발/게임 수학,물리

Linear Transformation, 선형변환들의 조합, 행렬곱 [게임수학]

게임이 더 좋아 2021. 3. 18. 07:29
반응형
728x170

 

지난 시간에 회전, 크기를 배워봤으니 섞여 있으면 어떻게 되는지 살짝 보고

행렬의 곱 또한 알아보자

 


 

선형 변환이 섞일 수 있는 이유는

선형 변환 후에도 선형성을 유지하기 때문이다.

S를 적용해도, T를 적용해도 같다.

 

와 신기하다.

 

그렇다.

그렇다면 S는 m차원에서 n차원으로

T는 n차원에서 p차원으로 변환한다고 치자.

 

즉, 각 공간들이 가지는 기저벡터들을 표현해보면

이렇게 나타낼 수 있다.

 

그렇다면 T를 한번 생각해보자 n->p로??

뭐 이런 식으로 나올 것이다.

 

T자체가 n차원을 p차원으로 옮기는 것이니까

당연히 결과로 나온 벡터는 p개일 것임은 당연하다.

 

 

S 또한 그렇겠지?

n개를 가진다.

 

 

하지만 우리가 배우는 것은 S 따로, T 따로가 아닌 합쳐졌을 때가 궁금하다.

 

 

합쳐진다면 어떻게 표현해야할까???

 

 

m->n->p이므로 결국 기저벡터의 개수 또한 p개를 가지고 있겠다.

 

p차원이므로 p에 대해서 정리한다면

 

 

오 우리가 많이 봤던 모양새다.

행렬로도 바꿀 수 있을 것 같이 생겼다.

 

S,T가 합쳐진 변환을 행렬로 나타낸 것이다.

++ S,T 합쳐진 변환을 F라고 하자.

 

 

****잘 보면 a(p,n) b(n,j) 이렇게 되어있다.????

-> 뭔가 행렬 곱이랑 관련된 것 같다?? 는 정말 똑똑이

 

F에 대응하는 행렬 M의 i행, j열 구성요소가 이렇게 되는 것이다.

**여기서 행렬 M이란 변환을 행렬로 바꿨을 때의 행렬을 의미한다.

 

 

여기서 신기해할 부분 하나.

A,B를 아래와 같은 행렬이라고 한다면

 

 

??만약 곱하면 어떻게 되는거지??

 

 

와...

M은 이런 거였다. 왜 M이 되는 것일까?

 

행렬 A는 n차원 기저벡터에 T를 적용한 결과를 열벡터로 만들어 조합한 확대행렬이다.

즉, 선형변환 T를 말한다.

 

행렬 B는 뭐겠나. 선형변환 S를 말한다.

 

즉, 선형변환이 조합한다는 것은, 행렬의 곱이라고 말할 수 있다는 것이다.

 

하지만 이것은 우연이 아니다. 

행렬의 곱 목적 자체가 선형 변환의 조합을 표현하기 위해 정의했다고 한다.

**우리가 왜 배워? 하던 것을 이제야 깨닫는다. 선형대수를 위해서이다.

 

 

하지만 중요한 것이 있었으니.

행렬의 곱셈은 일반적으로 교환법칙이 성립하지 않는다.

따라서 곱하는 순서에 따라 선형변환의 순서도 바뀐다는 것이다.

 

순서는 

선형변환이 적용되는 순서와 행렬의 곱 순서는 반대다.

S다음 T가 적용되어야 하고 T가 행렬 A고 S가 행렬 B일 경우

행렬의 곱에서는 A x B가 되어야 한다.

 

 


 

 

결국 우리가 벡터 공간을 배우고, 변환을 배우는 이유는 무엇일까?

 

3D 게임 같은 경우에는 선형 변환들의 조합을 적용하는 경우가 무지하게 많다.

크기랑 회전이 한 두개일리가 없으니까.

 

그 때마다 행렬 곱셈으로 계산하면 컴퓨터 미치고 팔짝 뛴다.

이들의 조합을 하나로 만들고 reusable하게 만든다면

연산량이 줄어드니까. 성능 향상에 도움을 준다.

 

단적인 예로

플레이어의 크기가 너무 작다는 피드백이 들어와서 플레이어를 포함한 모든 오브젝트에 대해 크기를 조정하기로 했다.

즉, 모든 오브젝트를 1.5배정도 키우기로 했다.

그렇다면 모든 오브젝트에 대해서 선형변환을 하는 것은 맞는데.. 계속 행렬을 계산해야할까?

어차피 모든 오브젝트에 똑같은 행렬이 적용되는 것인데..?

마찬가지다.

적용되는 오브젝트가 많을수록, 복잡한 선형 변환이 많이 사용될수록, 성능을 기대할 수 있을 것이다.

 

반응형
그리드형