언리얼엔진/기초수학

행렬

season97 2023. 10. 4. 21:27

▶ 행렬 곱셈 

ㆍ 행렬의 곱셈은 A의 열 수와 B의 행 수가 같아야 성립한다.

 

ㆍ 교환법칙이 성립하지 않는다

A =

              [a,b]

              [c,d]

B =

              [e,f]

              [g,h]

라 가정할때

A * B = [ae + bg   af +bh]

            [ ce + dg  cf + dh]

 

 

 

▶ 전치 행렬이란?

ㆍ 행렬의 행들과 열들을 맞바꾼 것

원래 행렬의 i번째 행 j번째 열 원소가 전치행렬에서는 j번째 향 i번째 열 원소가 됩니다.

 

ㆍ 언리얼 엔진에선 Transpose()를 통해 전치행렬의 값을 얻을 수 있습니다.

언리얼 엔진에서 전치행렬의 얻는 함수 사용 예시

 

 

 

▶ 정방행렬이란?

 

행과 열의 수가 같은 정방형의 행렬을 의미합니다. DirectX에선 2x2행렬 3x3행렬 4x4행렬이 있습니다.

 

- 3x3행렬 : 주로 회전과 스케일링 변환에 사용됩니다.

ㆍ 첫번째열 : x축에 대한 벡터와 관련된 스케일 및 회전 정보

ㆍ 두번째열 : y축에 대한 벡터와 관련된 스케일 및 회전 정보

ㆍ 세번째 열 : z축에 대한 벡터와 관련된 스케일 및 회전 정보

 

- 4x4행렬 : 스케일링, 회전, 이동변환까지 포함할 수 있습니다.

ㆍ 첫번째열 : x축에 대한 벡터와 관련된 스케일 및 회전 정보

ㆍ 두번째열 : y축에 대한 벡터와 관련된 스케일 및 회전 정보

ㆍ 세번째 열 : z축에 대한 벡터와 관련된 스케일 및 회전 정보

ㆍ 네번째 열 :  이동(위치)에 대한 정보를 포함하며, 이는 원점에서의 상대적인 위치(offset)을 나타냅니다.

 

※ D3D에선 대부분 4x4행렬을 사용합니다. -> 단일 행렬 연산으로 여러 종류의 변환을 동시에 적용할 수 있기 때문에

 

▶ 언리얼 엔진에서의 정방행렬

언리얼 엔진 정방행렬 생성 예시
FReansForm 에서 생성되는 행렬의 일반적 형태

ㆍ Rij : 회전

ㆍ Tx,Ty,Tz : 위치

ㆍ Sx, Sy, Sz : 스케일

90도에 대한 회전 연산을 행렬로 표현

 인자가 3개인데 4x4 행렬인 이유?

우리가 다루는 것은 동차좌표계 이기 때문입니다. 

ㆍ동차 좌표계에서는 점의 위치를 나타내기 위해 하나의 추가적인 차원을 사용합니다 (n+1차원)

ㆍ 즉 3D공간의 한 점은 [x, y ,z ,w]와 같이 네 개의 값을 사용하여 표현되며 여기서 w값은 대체로 1로 설정됩니다.

 

※ 동차 좌표계?

ㆍ 3D에서는 기본적으로 3차원 좌표계지만 어떤 목적으로 4차원으로 확장이 가능합니다 .

어떤 목적을 위해 한 차원의 좌표(N) 을 추가한 좌표 (N+1)로 표현하는것

 

※ 언리얼 엔진에서는 이 모든 복잡한 과정을 내부적으로 처리해주며 필요할 때마다 해당 변환 정보를 바탕으로 만들어진 최종 변환 행렬을 제공합니다. (FTransform::ToMatrixWithScale()등등)

 

 

 

 

▶ 단위행렬

 

주 대각선에 1이 있고 나머지 요소들이 모두 0인 정방행렬을 의미합니다.

ㆍ 단위행렬은 곱셈에 있어서 '1'처럼 동작합니다. 어떤 행렬이든 단위행렬과 곱하면 그 결과는 원래 행렬과 같습니다.

단위행렬 예시
언리얼엔진 단위행렬

 

▶ 역행렬

 

ㆍ 어떤 행렬A에 대해, 그 형렬과 곱했을 때 결과가 단위행렬이 되는 행렬을 'A의 역행렬' 이라고 합니다.

ㆍ 행렬에는 나누기와 비교연산은 없지만 곱하기와 반대의 의미를 가지는 역 연산이 존재합니다.

ㆍ 정방행렬 만이 역행렬을 가질 수 있습니다.

ㆍ 행렬과 역행렬을 곱하면 항등행렬을 얻습니다.

ㆍ 행렬은 자신의 역행렬과 곱하면 아래와 같은 식이 성립한다.

ㆍB가 A의 역행렬 이라 가정했을때 AB = BA = I

ㆍ I는 단위행렬을 나타냅니다.

언리얼 엔진에서 역행렬을 얻는 예시

 

▶ 역행렬이 언리얼 엔진에서 어쩔때 사용되는가?

 

1. 변환의 취소 

ㆍ 어떤 객체에 행렬 변환을 적용하면 객체의 위치,방향,크기 등이 변경됩니다. 

만약 이 변환을 되돌리고 싶다면 역행렬을 사용하여 적용할 수 있습니다.

 

2. 좌표계의 전환 

ㆍ 월드 좌표계에서 로컬 좌표계 또는 클립좌표계로 전환이 필요할 때 역행렬이 사용됩니다.

예를들어 카메라 시점, 프로젝션(투영)을 계산하는데 필요합니다.

 

3. 법선 벡터 변환 

ㆍ 3D 그래픽스에선 법선 벡터는 빛과 재질 상호작용 등을 계산하는데 중요합니다. 하지만 객체가 회전하거나 크기가 변경되면 원래의 법선 벡터도 함께 변경되어야 합니다. 이때 원본 변환 행렬의 역 전치 행렬이 사용됩니다.

 

※ 법선벡터란 특정한 점에서 평면의 방향을 나타내는 벡터를 의미합니다.

법선벡터는 해당 평면에 수직인 방향을 가리킵니다.

 

 

▶ 마무리하며

 

ㆍ 언리얼 엔진에서는 FTransform클래스를 사용하여 3D변환을 표현하고 관리합니다.

이 클래스는 내부적으로 스케일 회전 위치를 별도로 저장하며 이를 통해 안정적이로 빠른 변환 연산을 지원합니다.

'언리얼엔진 > 기초수학' 카테고리의 다른 글

벡터와 좌표계  (1) 2023.10.04