[게임 수학] 행렬의 활용 (3D 그래픽스)

구교승·2025년 5월 28일

[게임 수학]

목록 보기
8/9

Determinant (행렬식)

Determinant (행렬식)

  • 정사각 행렬 (행과 열의 갯수가 같은 행렬)에서 계산할 수 있는 스칼라 값
  • 행렬의 가역 확인, 선형 변환에서의 면적이나 부피 변화 판단, 연립 방정식 해결에 사용
    • 행렬의 가역 : 역행렬을 가질 수 있는지 여부
    • 역행렬 : 어떤 행렬을 곱했을 때 곱셈에 대한 항등원인 단위행렬이 나오게 하는 행렬
  • 정사각 행렬 A의 행렬식은 det(A) 또는 |A|로 표현
  • 행렬 A의 행렬식이 0이면 A의 역행렬은 없음
  • 3x3 행렬의 행렬식

Minors, Cofactor (소행렬식, 여인자)

  • 소행렬식
    • 특정 요소와 그 요소가 포함된 행과 열을 제외한 부분 행렬의 행렬식
    • 위의 예시는 1행과 2열을 삭제한 행렬 M{12}
    • 이후 2x2 행렬에서 행렬식을 진행하면 최종 결과 2 도출
  • 여인자
    • 소행렬식에 부호를 추가한 형태
    • 행렬 요소의 위치에 따라 부호 결정
    • 위치가 짝수면 양수, 홀수면 음수

Determinants of Arvitary n x n Matrices (임의의 행렬 n x n)

  • 행렬식을 구하는 방법 중 여인자를 이용한 정의는 재귀적으로 행렬식을 구하는 방법
  • 주어진 행이나 열을 기준으로 소행렬식과 여인자를 계산해 전체 행렬식을 구하는 과정
  1. 임의의 행 또는 열 선택 (보통 첫번째 행이나 열을 선택)
  2. 각 요소와 여인자 곱
  3. 곱한 값 합산
  • 높은 차수의 행렬식 계산은 빠르게 복잡해짐
  • 이를 해결하기 위한 피벗팅(Pivoting) 방법 사용 가능
  • 피벗팅 (Pivoting)
    • 행렬식의 값을 변경하지 않음
      1. 특정 행이나 열을 0으로 만들고 단 하나의 요소(피벗 요소)만 남김
      2. 하나의 여인자만 계산
    • 높은 차수의 행렬식 계산 단순화

Properties of Determinants (행렬식의 성질)

  1. 항등 행렬의 행렬식
    • 항등 행렬(단위 행렬)의 행렬식은 항상 1
  2. 행렬 곱의 행렬식
    • 행렬 A와 B의 곱의 행렬식은 각각의 행렬식을 곱한 것과 동일
    • 두 개 이상의 행렬의 곱에서도 적용
  3. 전치 행렬의 행렬식
    • 행렬의 전치(Transpose)를 취해도 행렬식의 값은 동일
    • 원본 행렬과 전치 행렬의 행렬식은 항상 동일한 값
  4. 모든 요소가 0인 행이나 열이 있는 경우
    • 어떤 행 또는 열의 모든 요소가 0이라면 그 행렬의 행렬식은 0
    • 여인자 전개를 통해 확인 가능
  5. 행 또는 열의 교환
    • 임의의 두 행 또는 두 열을 교환하면 행렬식의 부호 전환
  6. 어떤 행 또는 열에 다른 행 또는 열의 배수를 더해도 행렬식 값 동일
    • 행렬식 계산 단순화에 사용

Geometric Interpretation of Determinant (기하학적 관점에서의 행렬식)

  • 2D에서의 행렬식 - 면적
    • 2차원에서의 행렬식은 변환 후 형성되는 평행사변형의 면적
    • 평행사변형의 두 변은 변환된 기저 벡터
    • 면적은 행렬식의 부호에 따라 양수 또는 음수
      • 양수 : 변환이 원래 방향을 유지
      • 음수 : 변환이 원래 방향을 뒤집음, 뒤집힌 모양의 평행사변형
  • 3D에서의 행렬식 - 부피
    • 3차원에서의 행렬식은 변환 후 형성되는 평행육면체의 부피
    • 평행육면체의 세 변은 변환된 기저 벡터
      • 양수 : 변환 후 방향 유지
      • 음수 : 뒤집히거나 반사되어 원래의 형태가 뒤집어짐
  • 행렬에서의 절댓값 - 크기 변화
    • 행렬식의 절댓값은 변환이 객체의 크기에 미치는 영향
      • 1인 경우 : 변환 후에도 면적이나 부피 유지
      • 1 초과인 경우 : 객체가 늘어나면서 면적이나 부피 증가
      • 1 미만인 경우 : 객체가 축소되면서 면적이나 부피 감소
  • 행렬식이 변환을 설명하는 방식
    • 행렬식이 0인 경우 : 특정 차원으로의 투영이 포함, 3D 공간에서 2D 평면으로의 투영은 행렬식이 0
    • 행렬식이 음수인 경우 : 변환에 반사가 포함되어 방향이 반대

Inverse Matrix (역행렬)

역행렬의 정의

  • 주어진 정사각 행렬에 대해 정의
  • 원래 행렬과 곱했을 때 항등 행렬 (Identity Matrix)
  • 선형 변환과 관련된 기하학적 성질 설명

역행렬이 존재하지 않는 경우

  • 모든 행렬에 역행렬이 존재하진 않음
  • 비가역 행렬 (Singular Matrix) 또는 가역 불가능 행렬
  • 조건
    • 행 또는 열의 모든 요소가 0인 경우
    • 행렬식이 0인 경우

역행렬의 성질

  • 선형 독립성
    • 가역 행렬의 행과 열은 선형적으로 독립적
    • 행과 열 벡터가 서로 선형 결합을 통해 만들어질 수 없음
  • 선형 종속성
    • 비가역 행렬은 선형적으로 종속적인 행이나 열 포함
    • 특정 행이 다른 행들의 선형 결합으로 표현 가능
  • 벡터 방정식 vM = 0
    • 가역 행렬의 경우 v가 0일때만 성립
    • 가역 행렬이 1대1 대응 관계를 갖기 때문

역행렬 계산 방법

  • 고전적 수반행렬(Classical Adjoint)을 사용하는 방식
  • 여인자 전개를 이용해 각 요소에 대한 행렬식 계산, 전치 과정을 통해 최종 역행렬 도출
  • 단계별 과정
    1. 여인자 계산 : 각 요소에 대해 해당 행과 열을 제외한 소행렬식에 부호 적용
    2. 여인자 행렬 구성 : 각 여인자를 모아 행렬로 구성하면 여인자 행렬
    3. 전치 : 여인자 행렬을 전치해 수반행렬을 도출

Orthogonal Matrix (직교 행렬)

  • 특별한 성질을 갖는 정사각 행렬
  • 회전 및 반사 변환에서 효율적 계산
  • 직교 행렬 : 행렬과 그 전치 행렬의 곱이 항등 행렬

직교 행렬의 성질

  • 역행렬과 전치 행렬의 동일성
    • 직교 행렬의 전치가 역행렬과 동일
    • 역행렬 계산이 필요할 때 전치 행렬을 사용해도 동일
    • 계산의 간편화
  • 회전 및 반사 행렬의 직교성
    • 회전 행렬과 반사 행렬은 모두 직교 행렬
    • 크기를 유지하며 방향을 변환
    • 크기 변화를 나타내는 행렬식이 +1 또는 -1로 유지

직교 행렬의 응용

  • 회전과 반사와 같은 변환에 사용
  • 역행렬을 구하는 작업은 비용이 많이 들기 때문에 직교 행렬 사용

3x3 직교 행렬의 벡터 조건

  • 3x3 행렬 M에서 각 행 벡터 r1, r2, r3는 다음 조건을 만족
    1. 단위 벡터 : 행렬의 각 행은 단위 벡터
    2. 상호 수직 : 행렬의 행은 서로 수직, 각 행의 내적이 0
  • 이로 인해 직교 행렬의 행은 직교 정규 기저(Orthonormal Basis) 형성
  • 9개의 원소를 갖지만 직교 조건을 만족해야 하므로 3개의 자유도
  • 3개의 자유도는 곧 3D 회전 변환의 자유도와 일치

직교 행렬과 직교 투영

  • 직교 행렬 : 회전과 반사와 같은 변환 표현에 사용
  • 직교 투영 : 평행 투영, 3D 객체를 2D 평면에 표현할 때 사용
  • 직교 투영 변환을 구현할 때 직교 행렬 사용 가능
  • 두 개념 자체는 서로 다른 목적

Orthogonalization (직교화)

  • 벡터들을 서로 수직이 되도록 조정하는 방법
  • 주로 Gram-Schmidth 직교화 알고리즘 사용
  • 벡터들이 서로 직각을 이루지 않을 때 바로잡기 위해 사용

Gram-Schmidth 직교화 알고리즘

  • 주어진 벡터들을 순서대로 선택해 서로 수직이 되도록 조정
  • 각 벡터에서 이미 조정된 벡터와 평행한 성분을 빼서 새로운 수직 벡터 생성
  • 절차
    1. 첫번째 벡터 r1은 그대로 유지
    2. 두번째 벡터 r2에서 첫번째 벡터에 평행한 성분을 뺌
    3. 세번째 벡터 r3에서 첫번째와 두번째 벡터에 평행한 성분을 뺌
  • 이 과정을 통해 각 성분은 서로 수직이 되며, 직교 기저 생성

단위 벡터로 만드는 정규화

  • 직교화 과정이 완료되면 각 벡터의 크기가 1이 아닐 수 있음
  • 단위 벡터로 만들기 위해 각 벡터 정규화 (Normalization)
  • 3차원 공간에서는 세번째 벡터를 외적으로 구할 수 있음
    • r3 = r1 X r2

반복적 직교화 알고리즘

  • Gram-Schmidt 직교화는 벡터 순서에 따라 결과가 달라지는 단점 보유
  • 조금씩 직교화하는 방법
  • 벡터 간 직교성을 조금씩 조정하며 수차례 반복

Homogeneous Matrix (4x4 동차 행렬)

3D 그래픽과 컴퓨터 그래픽스에서 변환을 표현하기 위해 사용하는 4차원 벡터와 행렬을 의미
동차라는 용어는 4차원 공간을 사용해 3D 공간에서의 변환을 간편하게 표현하는 기법
이동과 확대와 같은 변환을 하나의 행렬 연산으로 간단하게 표현 가능

4D 동차 좌표의 개념

  • 3D 좌표를 4D로 확장하기 위해 (x, y, z) 좌표에 w라는 요소 추가
  • ex) (x, y, z) => (x, y, z, 1)
  • w를 1로 설정하면 3D 공간에서의 변환을 쉽게 4D 공간에서 표현 가능
  • 이동 변환 표현 가능, 원근 투영 가능의 이점
    • 이동 변환 표현 가능 : 이동을 행렬 연산으로 표현 가능
    • 원근 투영 가능 : w값을 조정하여 원근 투영 효과(Perspective Projection) 표현 가능
  • w값의 역할과 의미
    • w = 1 : 3D 공간에서의 점, 이동 변환의 영향
    • w = 0 : 벡터를 나타내며 이동 변환의 영향을 받지 않음

이동 변환을 위한 4x4 행렬

  • 3D 공간에서 이동 변환은 3x3 행렬로 표현하기 어려움
  • 4x4 행렬을 사용하면 간단히 표현 가능

회전 및 이동 조합

  • 이동뿐 아니라 회전과 스케일링 등 여러 변환을 한 번의 연산으로 처리 가능
  • 회전 행렬 R과 이동 행렬 T를 결합해 먼저 회전하고 이동하는 연산 표현 가능

4x4 행렬 사용의 장점

  • 행렬 곱셈 가능
    • 복합 연산을 쉽게 개선
    • 이동 연산을 곱셈처리, 곱셈 병렬 연산에 최적화된 GPU의 효율 증대
  • 역행렬 가능
    • 정사각 행렬이므로 역행렬 계산 가능
    • 변환의 역연산 가능

Affine Transformation (아핀 변환)

  • 직선성과 평행성을 유지하는 변환
  • 회전, 스케일링, 반사, 이동
  • 4x4 행렬을 사용하면 변환의 기준점이 원점이 아닌 특정한 위치로 설정 가능
  • 과정
    1. 이동 행렬 T로 점 p를 원점으로 이동
    2. 선형 변환 행렬 R로 원하는 회전 또는 스케일링 수행
    3. 역이동행렬 T^-1로 점 p를 원래 위치로 되돌림

Perspective Projection (4x4 행렬을 통한 원근 투영)

  • 3D 그래픽에서 객체가 멀어질수록 작아 보이는 효과를 수학적으로 구현하는 방법
  • 원근 투영 : 객체와 관찰자의 거리에 따라 크기가 달라지는 투영 방식, 현실적인 깊이감 표현

Perspective Projection vs Orthographic Projection (원근 투영 vs 직교 투영)

  • 원근 투영
    • 3D 객체를 2D 평면에 투영할 때 모든 투영선이 특정 지점(투영의 중심점)에서 교차
    • 중심점은 보통 관찰자의 위치
    • 거리에 따라 객체가 더 작아지게 보이는 원근 축소 효과
  • 직교 투영
    • 3D 객체를 2D 평면에 투영할 때 모든 투영선이 평행
    • 객체와의 관계 없이 크기가 일정
    • 평면 투영(Parallel Projection)이라고도 함

4x4 행렬을 사용한 원근 투영의 원리

  • 3D 좌표를 2D 평면에 투영하려면 w값을 사용하여 좌표를 조정
  • 4D 동차 좌표의 w값으로 나누어 크기를 조절
    • 투영 중심(Center of Projection) : 모든 투영선이 보이는 점
    • w로 나누기
      • 각 점 (x, y, z, w)에서 x, y, z를 w로 나누어 크기 축소
      • w가 커질수록 화면의 크기가 작아짐
      • 멀리 있는 객체가 작게 표현

핀홀 카메라 (Pinhole Camera)

  • 핀홀 카메라는 원근 투영을 이해하는 좋은 예시
  • 한 쪽에 작은 구멍이 있는 상자
  • 구멍을 통해 들어온 빛이 상자 반대편에 투영
  • 3D 공간의 점이 2D 평면에 어떻게 투영되는지에 대한 원리
  • 투영된 이미지는 상하 반전되어 나타남
  • 모든 광선이 핀홀에서 교차하기 때문
  • 핀홀 = 투영 중심

투영 평면의 설정과 계산

  • 투영의 중심 : 원점을 핀홀 위치로 두고 투영 평면은 z축에 평행하게 배치
  • 투영 평면의 거리 d : 투영의 중심에서 평면까지의 거리를 d로 두고, 이 평면을 z = -d 위치에 설정

원근 투영 계산

  • 임의의 점 P(x, y, z)를 투영 평면으로 이동시켜 새로운 좌표 P'(x', y', z') 계산 가능
    1. P'y 좌표 계산
    2. P'x 좌표 계산
    3. 좌표 계산
  • 여기서 음수는 복잡성을 만들 수 있기 때문에 z = d로 두고 투영 평면을 투영 중심 앞으로 이동

4x4 원근 투영 행렬 생성

  • (x, y, z, 1) => (x, y, z, dz)로 변환

원근 투영 행렬 사용의 장점

  • 다른 변환과 결합 가능 : 4x4 행렬을 사용하면 투영 변환을 회전, 이동 등 다른 변환과 결합해 하나의 연산으로 처리 가능
  • 비축 (Planar-Aligned)이 아닌 평면에도 투영 가능 : 축과 일치하지 않는 임의의 평면에 투영, 복잡한 장면 구성 가능
  • 깊이 버퍼링 (Depth Buffering) : w = 1을 클립 평면에 맞추어 깊이 값을 정규화, 거리 기반 깊이 버퍼링 제공

참고 및 출처:
게임 개발을 위한 수학

profile
Face the fear, Build the future

0개의 댓글