Mathematics of Rendering
Vectors and MatricesPermalink
Basic Vector OperationsPermalink
Vector Magnitude(백터의 크기)Permalink
- 백터의 크기를 구하는 공식은 다음과 같다.
- 3-Dimensions(3차원 공간)에서 위 공식을 적용해 보면 |V|=√V2x+V2y+V2z 으로 된다.
- 벡터의 각각의 성분을 제곱해서 √ 연산을 하면 우리는 벡터의 크기를 구할 수 있다.
unit VectorPermalink
- unit vector는 크기가 1인 벡터를 의미한다.
- 방향성만 가진 벡터를 구하기 위한 방법이다. 벡터의 크기로 벡터를 나누어 주면 된다.
- 우리는 이것을 Vector를 Normalize 했다고 한다. 공식은 아래와 같다.
Vector의 덧셈 및 곱셈에 관한 성질Permalink
속성 | 설명 |
---|---|
(a+b)+c=a+(b+c) | 덧셈에 관한 결합법칙 |
a+b=b+a | 덧셈 교환법칙 |
(st)a=s(ta) | 스칼라 곱에 관한 결합 법칙 |
ta=at | 스칼라 곱에 관한 교환 법칙 |
t(a+b)=ta+tb | 스칼라 곱에 대한 분배법칙 |
(s+t)a=sa+ta | 스칼라 곱에 대한 분배법칙 |
벡터 끼리의 곱셈에서 교환 법칙은 성립하지 않으며, 스칼라 곱에 대한 교환법칙만 존재 한다.
Matrix(행렬) 의 기초Permalink
- A 행력과 B 행렬이 다음과 같다.
A는 n×p 행렬 이고 B는 p×m 인 경우, i 와 j 번째 요소를 구하는 식은 다음과 같다.
Matrix Multiplication TransposePermalink
- 행렬에서 곱셈을 Transpose 하는 공식은 다음과 같다.
antisymmetic matrix OR skew-symmetric matrixPermalink
- 반대칭 혹은 비대칭 행렬이라고 한다.
- 공식은 MTij=−Mij 이다.
벡터의 표기법Permalink
v=(v0,v1,…,vn−1)=[v0v1⋮vn−1]Column Vector
vT=[v0v1…vn−1]Row Vector
Vector MultiplicationPermalink
Dot Product (내적)Permalink
a⋅b=n−1∑i=0aibi위 공식을 3차원 에서 적용해 보면 아래와 같다.
각 성분끼리 곱해서 더한다.
a⋅b=axbx+ayby+azbz
a⋅b=[a0a1⋯an−1][b0b1⋮bn−1]아래와 같이 표현 하기도 한다.
a⋅b=‖a‖‖b‖cosθ벡터의 기하학적 의미 공식은
여기서 우리가 알 수 있는 사실은 θ 가 90∘인 경우 내적의 값은 0이 되며,
a 벡터와 b벡터가 직교하는 경우 내적의 값은 0이 된다는 것을 알수 있다.
v2=V⋅V=‖V‖2여기서 특별한 케이스인 자기 자신과 dot product는 아래와 같은 특징이 있다.
참고로 |V| 는 아래와 같다.
‖V‖=√n−1∑i=0v2i내적의 속성
속성 | 설명 |
---|---|
a⋅b=b⋅a | 교환 법칙 |
a⋅(b+c)=a⋅b+a⋅c | 분배 법칙 |
(ta)⋅b=a⋅(tb)=t(a⋅b) | 인수분해 |
Cross Product (외적)Permalink
2개의 3차원 Vector에서 다음과 같은 공식
a×b=(aybz−azby,azbx−axbz,axby−aybx)외적(Cross Product)는 특수한 3X3 비대칭 행렬을 정의해서 나타낼 수도 있다.
[a]X=[0−azayaz0−ax−ayax0] a×b=[a]Xb=[0−azayaz0−ax−ayax0][bxbybz]=[−azby+aybzazbx−axbz−aybx+axby]‖a×b‖=‖a‖‖b‖sinθ외적의 크기 공식
또한 외적의 크기는 기하학적 의미로는 평행사변형의 넓이에 해당 한다.
외적은 a×b=−b×a 비가환성 특징을 가진다.
외적의 속성
속성 | 설명 |
---|---|
a×b=−b×a | 외적의 비가환성 |
a×(b+c)=a×b+a×c | 외적의 분배법칙 |
(ta)×b=a×(tb)=t(a×b) | 스칼라 인수분해 |
a×(b×c)=b(a⋅c)−c(a⋅b) | Vector triple product |
(a×b)2=a2b2−(a⋅b)2 | 라그랑주 항등식 |
Scalar Triple ProductPermalink
순서에 상관없이 동일한 결과를 나타 냅니다.
[a,b,c]=(a×b)⋅c=(b×c)⋅a=(c×a)⋅bScalar Triple Product의 기하학적 의미는 (parallelepiped)평행육면체의 부피와 같습니다.
위 그림으로 부터 아래와 같은 공식을 유도할 수 있습니다. (θ=90−φ)
(a×b)⋅c=‖a×b‖‖c‖cosθ=‖a×b|‖c‖sinφVector ProjectionPermalink
x, y, z Axis에 일직선이 되도록 아래의 unit Vector를 정의 한다. i, j ,k 를 아래와 같이 정의 한다.
i=(1,0,0)j=(0,1,0)k=(0,0,1)3D Vector를 다음과 같이 표기 할 수 있다.
v=vxi+vyj+vzk(v⋅i=‖v‖‖i‖cosθ)iisunitvector(vx=v⋅i,vy=v⋅j,vz=v⋅k)v=(v⋅i)i+(v⋅j)j+(v⋅k)k일반적으로 →a 를 →b에 Projection(사영) 시킬때 공식은 아래와 같다.
a∥b=→a⋅→b‖b‖2→brejection→afrom→b 의 공식은 다음과 같다.
a⊥b=→a−a∥b=→a−→a⋅→b‖b‖2→b위 그림을 보면 →a와→b의 Projection과 Rejection이
직각삼각형의 밑변과 높이에 해당하는 것을 볼 수 있으며, 삼각함수에 따라서 아래와 같은 공식이 된다.
Gram-Schmidt processPermalink
Gram-Schmidt process 특정 벡터의 정규직교기저를 구하는 방법이다.
공식은 아래와 같다.
Matrix InversionPermalink
우리는 종종 A좌표계 에서 B좌표계로 변환하는 일을 수행하게 됩니다.
이떄 A -> B로 혹은 B -> A로 좌표계를 변환하게 되는데 이때 우리는 변환 행렬인
M,M−1 을 찾아야 하며, M−1 을 Inverse Matrix라고 합니다.
Identity Matrices (단위행렬)Permalink
Matrix의 곱에 대한 항등원 이라고 생각하면 됩니다.
항등원이란 : 어떤수에 연산을 했을때 자기자신이 나오게 만드는 값
I 는 다음과 같이 정의 됩니다.
In=[10⋯001⋯0⋮⋮⋱⋮00⋯1]AIn=AInB=B∴(IB)ij=n−1∑k=0IikBkj=BijInverse Matrix(역행렬)의 특징
- n by n 정방행렬(정사각행렬) 에서만 존재 합니다.
- MM−1=In 또는 M−1M=I 입니다.
- 역행렬은 항상 존재하지는 않습니다.
- Determinant(행렬식)을 이용해서 존재 유무를 알 수 있습니다.
Determinants (행렬식)Permalink
det(M)=n−1∑j=0Mkj(−1)k+j|M¯kj|det(M)=n−1∑i=0Mik(−1)i+k|M¯ik|∵det(MT)=det(M)(|M¯kj|:k행과j열을제외한MinorMatrix에대한행렬식)행렬식의 공식은 다음과 같습니다.
위 공식의 의미는 다음과 같다.
Determinent Property
속성 | 설명 |
---|---|
det(In)=1 | 단위행렬의 행렬식 |
det(AT)=det(A) | 전치행렬의 행렬식 |
det(A−1)=1/det(A) | 역행렬의 행렬식 |
det(AB)=det(A)det(b) | 행렬식의 곱 법칙 |
det(tA)=tndet(A) | Scalar factorization 의 행렬식 |
Elementary Matrices (기본행렬)Permalink
단위행렬 In에서 기본행연산(elementary row operation)을 한 번 실행하여 얻어지는 행렬이다.
아래에 3가지의 기본행연산이 있습니다.
(a) 0이 아닌 스칼라 값을 M의 행에 곱합니다.
(b) M의 행의 위치를 바뀌어 줍니다.
(C) 스칼라 값을 곱한 행을 다른행에 더합니다.
[cdab]=cb−da=−(ad−bc)=[abcd]기본행 연산 중 (b)의 경우는 행교환을 하게 되면 교환하기 전/후 Matrix Determinant의
부호가 반대가 된다는 사실입니다.
위 사실을 기반으로 가장 중요한 사실은 동일한 Row를 포함하고 있는 행렬의 행렬식의 값은 0 이라는 사실입니다.
행 교환을 했지만 Matrix자체에 변화가 없기 때문에 유추해 보면 양수와 음수 값이 같은 경우는 0이기 때문입니다.
Inverse Calculation (역행렬)Permalink
- 역행렬을 구한는 방법 두가지를 설명 하고자 합니다.
- Gauss-Jordan Elimination
- Determinant & Cofactor Matrix
Gauss-Jordan Elimination Case
- 기본행 연산의 곱으로 역행렬을 구할 수 있습니다.
- 예제
- 기본행 연산을 양쪽 행렬에 동일하게 적용한다.
(Cofactor)Cij=(−1)i+j|M¯ij|(adjugateofthematrixM)=CT(M)∴M−1=CT(M)det(M)Determinant & Cofactor Matrix Case
- 3×3 행렬의 경우는 다음과 같이 벡터로 계산 할 수 있음.
4×4 Matrix에서 M−1을 구하는 효율적인 방법.Permalink
- 처음 3개 행에 대한 Column Vector →a,→b,→c,→d 와 4번째(마지막)행인 x, y, z, w를 다음과 같이 설정.
- 그 다음 우리는 →s,→t,→u,→v를 다음과 같이 정의 합니다.
- 역행렬M−1의 처음 3개의 컬럼은 위 4개의 3차원 행 벡터 에 의해서 채워 짐
- 역행렬M−1의 4번째 컬럼은 4차원 벡터 (−→b⋅→t,→a⋅t,−→d⋅→s,→c⋅→s) 에 의해서 채워 짐
- 대부분 게임엔진에서 M 행렬의 4번재 Row는 [0001] 이므로
- x=y=z=0,w=1 이고, →u=0,→v=→c 이 된다.
TransformsPermalink
Coordinate SpacesPermalink
Transformation MatricesPermalink
Position pA A의 좌표계로 부터 Position pB B 좌표계로 변환하는 표현은 아래와 같다.
pB=MpA+→t(affinetransformation)- M 은 3×3 Matrix, →t는 3D Translation Vector 이며 좌표계의 Origin(원점)을 이동시킵니다.
- 우리는 역으로 B의 좌표계에서 A의 좌표계로 변환 할 수도 있습니다.
- M과 →t는 4×4 matrix로 표현 할 수 있습니다. 그 전까지는 일단 →t는 무시하고
-
원점(origin)은 같다는 전제하에 3×3 매트릭스 에만 당분간 집중 합니다.
- 일반적인 Linear trasnformation(원점이 동일한)은 아래와 같이 나타 냅니다.
Orthogonal Transformation (직교변환)Permalink
- 게임 엔진에서 대부분 Transform Matrices를 Perpendicular unit-length columns(직교 유닛 컬럼)으로 표헌합니다.
- 이러한 Matrices를 우리는 Orthogonal matrices(직교 행렬) 이라고 합니다.
- 아래는 모두 같은 의미를 지닙니다.
- M은 Orthogonal Matrix(직교행렬) 이다.
- M−1=MT는 같다.
- M은 columns Mutually Perpendicular unit-length
- M은 rows Mutually Perpendicular unit-length
Transform CompositionPermalink
- Transform A 는 A좌표계 에서 적용된 변환이라고 한다면, 그와 동등한 B좌표계에서의 변환은 아래와 같습니다.
- 행렬 M 은 좌표계 A→B 로 변환행렬.
- 행렬 M−1 은 좌표게 B→A로 변환행렬.
Rotations (회전)Permalink
- 어떤 →v를 z축을 기준으로 회전 시키려고 합니다.
- →v를 다음과 같이 표기 합니다.
- →v=vxi+vyj+vzk
- i,j,k는 좌표축과 평행한 unit vector입니다.
- k는 z axis와 평행하므로 변화가 없고, vxi+vyj만 변화될 것입니다.
- 위 그림에서 vx→i를 θ 만큼 회전 시키면 아래와 같습니다.
- →i는 unitvector 입니다.
- 또 한 우리는 vy→j도 계산해 줘야 합니다.
- 위 그림의 j축을 기준으로 θ 만큼 회전한 값을 구해주면 아래와 같습니다.
- 최종적으로 X, Y, Z 축에 대한 공식은 아래와 같습니다.
Rotation about an Arbitrary Axis (임의의 축에 대한 회전)Permalink
- 하지만 일반적으로 회전을 할 때, 임의의 축을 중심으로 회전 할 경우가 더 많다.
- projection과 rejection의 정의에 의해서 아래와 같이 정의된다.
- →a=unitvector 이기 때문에 a2은 생략한다.(Projection 공식에서)
- a,v 는 벡터 입니다.
- c=cosθ, s=sinθ
Reflections (반사)Permalink
- 게임엔진에서 거울이나 물표면에 반사되는 변환을 나타낼때 많이 사용 된다.
ScalesPermalink
- 객체의 사이즈를 확장 하거나 축소하는 변환 입니다.
- Uniform Scale : 모든 방향이 동일한 크기로 확장 하는것.
- Nonuniform Scale : 어떤 한 방향이 다른 방향에 비해서 크거나 작은 크기로 확장 되는것.
- 우리는 x, y, z 축 이 아닌 특정 방향 →a 대해서 확대/축소 할 수도 있습니다.
- 위 그림으로 아래와 같은 공식을 유도 할 수 있습니다.
→v′=s→v∥a+→v⊥a=s(v⋅a‖a‖2a)+(v−v⋅a‖a‖2a)=s(v⋅a)a+v−(v⋅a)a=(s−1)(v⋅a)a−v=(s−1)(a⊗a)v−v=(s−1)[axayaz][axayaz]−[100010001]v
SkewsPermalink
-
Skews를 그림으로 설명하면 다음과 같습니다.
- 공식은 아래와 같이 유도 된다.
- v′=v+a(b⋅v)tanθ
- 만약 a 와 b가 좌표시스템의 축과 같다면, a=(1,0,0) , b=(0,1,0)
- 공식은 아래와 같이 더 간결해 집니다.
Homogeneous Coordinates (동차 좌표)Permalink
- 일반 적인 Affine Transformation 좌표계A 에서 좌표계 B로 의 공식
- 4×4 매트릭스로 나타내면 다음과 같다.
QuaternionsPermalink
Quaternion FundamentalsPermalink
- x, y, z, and w are real number
- three imaginary units i,y, and k
q=xi+yj+zk+w
-
두개의 Quaternions를 곱하면 다음과 같이 계산 됩니다.
-
q1=v1+s1 이고 q2=v2+s2 이므로
q1q2=v1×v2+s1v2+s2v1+s1s2−v1⋅v2q2q1=q1q2−2(v1×v2) -
q의 켤레수는 q∗로 표현 한다. q=v+sq∗=−v+sqq∗=q∗q=v2+s2
-
quaternion의 magnitude는 아래와 같다.
‖q‖=√qq∗=√v2+s2 ‖q1q2‖=‖q1‖‖q2‖ -
multiplicative inverse
q−1=q∗qq∗=−v+sv2+s2 -
quaternions의 성질
Rotations With QuaternionsPermalink
- q=xi+yj+zk+w 그리고, v=(vx,vy,vz) 이고
-
최종적으로 v에 의해서 회전된 v′은 다음과 같다. v′=qvq−1.
-
q가 unit quaternion 일 경우 v′=qvq∗
- q=b+c 라고 하면, qv 는 qv=(b+c)v=b×v+cv−b⋅v
- 또 q∗=−b+c 입니다.
-
qvq∗는 아래와 같습니다. qvq∗=(b×v+cv−b⋅v)(−b+c)=(c2−b2)v+2(v⋅b)b+2c(b×v)
- −b×v×b=(b⋅v)−b2v 라면
댓글남기기