Math

공간의 수학

현실 세계의 공간은 하나지만, 가상 공간은 무한하다.

circle-info

공간이란 어떤 물질 또는 물체가 존재할 수 있거나 어떤 일이 일어날 수 있는 장소

행렬 (Matrix)

선형 변환을 수행하는 도구

  • 컴퓨터에게 가상공간을 빠르게 변화시키도록 지시하는 일종의 명령어

  • 공간을 변환할 때 사용하는 것들은 다 행렬에 대응된다.

circle-info

원하는 공간 변환을 구현하기 위해서는 행렬이 어떻게 만들어지고, 어떻게 설계해야하는지 기본원리를 이해하는것이 중요하다.

평면의 방정식

ax + by + cz + d = 0

  • 여러개의 평면을 사용해서 공간안에 자신의 영역을 구축할 수 있다.

  • 대표적인 예로 카메라 영역을 제어하는 절두체(Frustum)가 있다.

circle-info

절두체(Frustum)란, 6개의 평면으로 구성되며, 3D 공간에서 카메라 영역에 담긴 부분만 걸러내 실제로 렌더링시키는 매커니즘을 가지고 있다.

물체의 수학

가상 공간의 체계와 물체를 구성하는데 사용하는 수학

아핀조합

aP1+bP2=a(x1,y1,1)+b(x2,y2,1)=(ax1,by1,a)+(bx2,by2,b)=(ax1+bx1,ay1+by2,a+b)aP_1 + bP_2 \\ = a(x_1, y_1, 1) + b(x_2,y_2,1)\\ = (ax_1,b y_1, a) + (bx_2,by_2,b) \\= (ax_1 +bx_1, ay_1 + by_2 , a+b)

만약 a+b=1a + b = 1인 경우 그 두 점을 더 했을 때 항상 점이 된다.

해당 조건을 상시화시킨다면 P=aP1+(1a)P2P = aP_1 + (1 -a)P_2 즉, a값과는 무관하게 마지막 차원의 값은 1이 된다.

  • 즉, 점과 점을 더 했을 때 언제나 아핀공간의 점을 보장한다.

  • 두 점을 조합했을 때 새로운 점을 만드는 공식이 된다.

면을 생성 하는 수학

점 3개를 조합하는 메커니즘

P=aP1+bP2+(1ab)P3P = aP_1 + bP_2 + (1 - a - b)P_3

  • 세 점을 조합한 결과는 평면을 만들어 낸다.

  • 세 점에 사용되는 계수의 값의 범위를 0 ~ 1로 제한하게 되면 세 점이 가지고 있는 영역 내부에 위치하는 점을 생성하는데 이것이 바로 삼각형의 영역이 된다.

  • 이 삼각형이 모여 물체를 구성하게 되고 이것들을 하나씩 그려주는 것이 결국 그래픽의 원리이다.

  • 이런 삼각형의 정보를 모아둔 것을 Mesh라고 한다.

왜 점이 아닌 삼각형으로 물체를 그릴까?

  • 점으로 구성된 물체를 가까이서 보는 경우 점들이 퍼지게 되면서 물체의 밀도가 떨어지게 된다.

  • But 삼각형으로 물체가 가지고 있는 영역을 설정한 다음 삼각형 내부에 픽셀의 계수를 구하고 각각 칠해주게 된다면 정밀하게 보여줄 수 있게 된다.

  • 삼각형이 가지고 있는 영역을 칠해주는 것을 픽셀화(Rasterization) 라고 한다.

삼각형에 대한 수학은 세개의 점과 각 점에 대응되는 계수들로 구성된다.

  • 이 계수들은 0~1의 범위를 가진다.

  • 어떤 점이 1이라면 나머지는 무조건 0이 되어야 한다.

  • 즉, 세 개의 점을 가지고 방정식을 통해 만들어진 새로운 점은 삼각형을 구성하는 세 점 중 어디에 가까운지 그 비중을 나타낼 수 있다.

  • 만약 모든 계수의 값이 1/3 이라면 만들어진 점은 삼각형의 정중앙에 위치하게 된다.

  • 이 계수들을 모아 좌표를 만든것이 무게중심좌표(Barycentric coordinate)라 한다.

    • 삼각형의 무게중심 좌표를 이용해 픽셀의 색상을 결정할 때 각 점의 데이터를 혼합해서 원하는 결과를 만들어낼 수 있다.

    • 삼각형의 텍스쳐를 오려 붙일 때에도 사용하게 되는데 이때 사용되는 좌표를 UV 좌표라 한다.

  • 삼각형을 구성하는 세 점에 색상이나 UV 정보들을 넣어서 삼각형 내부를 칠하는 다양한 효과를 만들어 낼 수 있다

  • 삼각형을 구성하는 세 점에다가 Color, UV, Normal, tangent 등 부가적인 데이터를 넣은 각각의 최종적인 점의 데이터 묶음을 정점(Vertex)이라 한다.

하나의 물체를 화면에 그려내는 과정 요약

  1. 물체를 세 개의 정점으로 구성된 삼각형으로 분리

  2. 분리된 삼각형을 각각 그려서 화면을 채운다.

  • 이 과정은 정형화 되어있기 떄문에 렌더링 파이프라인이라고도 부른다. (그래픽카드가 자동으로 처리)

  • 이 과정에서 개발자가 커스텀할 수 있도록 제공하는 함수 정점 셰이더, 픽셀 셰이더가 있다.

1. 정점 셰이더(Vertex Shader)

  • 삼각형을 구성하는 각 정점의 최종 데이터를 결정하는 함수

2. 픽셀 셰이더(Pixel Shader)

  • 삼각형 내부를 구성하는 각 픽셀의 최종 색상을 결정하는 함수

회전의 수학 (삼각함수와 회전행렬)

삼각함수

  • 기준 위치에서 얼마만큼의 각을 이용해서 회전했는지를 회전한 값과 반지름을 사용해 표현할 수 있다.

  • 단위 원의 반지름의 크기가 1 이라면 원상의 위치한 한 점에 대해 삼각함수로 표현을 하면 sin(θ) → 높이, cos(θ) → 밑변이 된다.

삼각비

  • 높이빗변\frac{높이}{빗변} 밑변빗변\frac{밑변}{빗변}높이밑변\frac{높이}{밑변} 삼각비의 3가지 종류

  • 이러한 비율을 원으로 확장해서 함수로 표현한것이 삼각함수이다.

    sin(θ) => 높이빗변\frac{높이}{빗변}

    cos(θ) => 밑변빗변\frac{밑변}{빗변}

    tan(θ) => 높이밑변\frac{높이}{밑변}

Last updated