레이 트레이싱 구현기 1-1 배경 지식: 선형대수

Plato·2023년 6월 3일
0

서론

선형대수학은 공학을 공부해 본 학생이라면 누구나 한 번쯤 수강했거나 앞으로 수강해야 할 과목이다. 대부분의 학생이 수강하는 만큼 선형대수는 다양한 분야에서 활용되는데, 3d 그래픽도 예외는 아니다. 선형대수학은 아직도 연구가 진행되는 분야이고 행렬에 대해 다양한 지식이 생성된 만큼, 이를 전부 공부하려 시도하는 건 현실적이지 않다. 선형대수학의 내용 중에서 특히나 레이 트레이싱을 구현하는데 쓸모가 있는 내용들을 다뤄보자.

본론

행렬

행렬의 엄밀한 정의는 도움이 되지 않기에 넘어가겠다. 행렬이 어떤 대상인지에 대한 직관은 갖고있다고 가정하겠다. 다만 명확히 하고싶은 부분은, 이 시리즈에서 행렬은 일관되게 column 벡터로 이루어진다는 점이다.

선형변환

n차원 벡터 공간과 m차원 벡터 공간을 각각 domain과 range로 갖는 함수 f를 생각해보자.
함수 f가 아래의 두 성질을 만족할 때에만 f를 선형 변환이라 부른다.

  1. f(λ+c)=f(λ)+f(c)f(\vec{\lambda} + \vec{c}) = f(\vec{\lambda}) + f(\vec{c})
  2. f(kλ)=kf(λ)f(k * \vec{\lambda}) = k * f(\vec{\lambda})

만약 f가 위의 두 성질 중 하나의 성질이라도 갖지 않는다면, f를 비선형 변환이라 부른다.
엄밀한 내용은 아니지만 일반적으로 수학에서 "선형"이라는 말이 붙는다면, 해당 대상을 "쉽게" 다룰 수 있고 결과를 예측하기 쉽다는 의미를 갖는다.

행렬과 선형변환

n차원 실공간에서 행렬은 선형변환이고 선형변환은 행렬로 표현될 수 있다는 사실은 중요하다. 이 명제 때문에 3d 그래픽분야에서는 3차원적인 공간을 다룸에도 불구하고 4 개의 성분을 갖는 벡터로 포인트를 표현하곤 한다. 이러한 벡터를 homogeneous point라 부르는데, 이에 대해서는 이 시리즈의 이후 글에서 다루도록 하겠다.

행렬과 좌표계

선형적인 좌표계 변환을 행렬로 표현할 수 있고 행렬을 좌표계 변환으로 볼 수 있다는 건, 필자가 처음 공부할 때 놀라웠고 필자가 행렬을 이해하는데 큰 역할을 했다. 공간의 변환이 아니라 좌표계의 변환으로 보는 것이 큰 도움이 되는 건, 행렬이 n x n 정사각형 행렬일 때이다. 정사각형 행렬의 경우, n x 1 벡터를 다른 n x 1 벡터에 맵핑시키는 변환이기 때문에 그렇다.

로컬 좌표계에서 글로벌 좌표계로의 변환을 행렬로 표현하고 싶다면, 새로운 좌표계를 나타내는 단위 벡터로 행렬을 구성하면 된다. 자세한 내용은 3blue1brown의 선형대수학 강의 시리즈를 참고하자. 글로벌 좌표계에서 로컬 좌표계로의 변환을 행렬로 표현하고 싶다면 앞의 행렬의 역행렬을 구하면 된다.

수학에서 동일한 대상을 다른 관점에서 바라봄으로써 문제를 단순화하는 건 흔하게 사용되는 방법이다. 상황에 따라서, 동일한 행렬을 공간의 변환으로 보기도 하고 좌표계의 변환으로 보기도 하며 문제를 접근하면 생각보다 쉽게 풀리는 경우를 종종 맞닥뜨리게 될 것이다.

역행렬

모든 정사각행렬이 역행렬을 갖는 건 아니지만, 정사각행렬이 아니라면 역행렬은 존재할 수 없다. 역행렬을 구하는 방법 중에 필자가 많이 사용하는 방법은 reduced row echelon form으로 만드는 것이다. 자세한 내용은 Sekhon과 Bloom의 Applied Finite Mathematics 2.4장 "Inverse Matrices"를 참고하자.

직교행렬과 역행렬

직교행렬(orthogonal matrix)은 열벡터가 서로 직교하며 단위 벡터인 행렬을 일컫는 말이다. 직교행렬의 전치행렬(transpose matrix)이 직교행렬의 역행렬이라는 사실은 중요하다. 이는 역행렬을 찾는 계산을 무척 단순하게 만들어주곤한다. 이 시리즈에서는 구면 좌표계나 원기둥 좌표계의 표준 기저벡터와 자코비안 행렬간의 관계에 대해 다룰 때, 이 사실을 사용할 것이다.

행렬식

행렬식은 다양한 쓸모를 갖는다. 우선 역행렬의 존재 유무를 행렬식을 통해 알 수 있는데, 정사각행렬 A는 행렬식이 0이 아닐 때에만 역행렬을 갖는다. 행렬식은 또한 좌표계 변환이 공간의 크기를 어떻게 변화시키는지 나타내기도 한다. 행렬식과 공간의 크기에 대한 내용은 Dan Margalit, Joseph Rabinoff의 Interactive Linear Algebra 4.3장을 참고하자.

선형대수학에서는 이 정도만 알고 있어도 레이 트레이싱을 구현하는데 큰 문제가 발생하지 않는다. 다음 글에서는 원기둥 좌표계, 구면 좌표계, 비선형변환을 선형변환으로 근사하여 공간의 크기의 변화를 계산하는 방법에 대해 배워보자.

0개의 댓글