[게임수학의 이해 이득우 교수님 강의 정리] 3. 물체의 수학 Ⅱ : 정점과 삼각형

Park Sejin·2021년 5월 25일
0
post-thumbnail

공간이동

  • 3차원 공간의 이동 구현을 위해서는 물체를 표현하는 3차원 + 이동을 표현하는 1차원

  • 총 4차원의 공간이 필요함

  • 4차원 공간을 그림으로 표현할 수가 없음.

  • 그래서 2차원 공간의 이동 구현으로 대신 설명

  • 2차원 물체의 2차원 이동을 3차원 공간에서 가능

  • 2차원 물체를 표현하기 위해서 사용하는 공간은 노란색 영역

  • 노란색 영역의 마지막 차원의 값이 항상 1이다.

  • 이 노란색 공간의 이름을 아핀공간이라고 한다.

  • 아핀공간의 마지막 차원의 값이 1인 이유는?
    - 3차원 공간을 이동시켰을 때 이동시킨만큼 이동한 평면의 마지막 차원의 값이 1이기 때문에
    - 마지막 차원의 값으로 다른 값을 가지는 평면은 이동시킨만큼 이동한 효과를 가지지 않는다.
  • 이동하는 양에 대한 것을 표현하는 공간도 별도로 필요하다.
    - 그 공간은 마지막 차원이 0인 공간이다.
  • 마지막 차원의 값이 0과 1로 고정되어 있기 때문에 점에 벡터를 더하더라도 그 점이 항상 평행하게 옆으로 움직인다.

  • 점 + 벡터 = 점을 보장 받을 수 있다.

아핀조합(affine combination)

  • 점 + 점 = 2 이므로 아핀공간의 영역을 벗어나게 된다.
  • 따라서 점 + 점은 불가능하다.
  • 하지만 다음과 같이 점 앞에 계수를 붙인다면

  • 두 점을 더한 결과는 a + b가 된다.
  • 만약, a + b = 1이라고 하면

  • 그 두 점을 더했을 때 점이 된다는 것을 알 수 있다.
  • a + b = 1이라고 했을 때 b를 1 - a로 바꿀 수 있다.
  • 이 경우 a와 무관하게 두 점의 합은 항상 마지막 차원의 값이 1이 된다.
  • 이 공식은 점과 점을 더했을 때 항상 아핀공간의 점을 보장한다.
  • 그러므로 점과 점을 조합하여 새로운 점을 생성하는 공식으로 사용된다.
  • 이러한 공식을 수학에서는 아핀조합이라고 한다.
  • 아핀조합은 물체를 구성하는데 기본이 되는 중요한 공식이다.

두 점의 조합

  • 아핀조합으로 만들어진 새로운 점은 점 p1과 점 p2를 연결하는 무한대의 선상에 위치한다.
  • 두 점을 조합해서 만들어지는 선을 직선(Line)이라고 한다.

  • 계수 a의 값이 0이라면 점 p2를 나타내고 계수 a의 값이 1이라면 점 p1을 나타낸다.

  • 계수 a의 값으로 0보다 큰 모든 실수 사용한다면 점 p2에서 점 p1로 향하는 무한대의 직선이 만들어진다.

  • 한쪽이 고정 되어 있기 때문에 이러한 직선을 반직선(Ray)라고 한다.

  • 반직선은 게임제작에 많이 사용
    - 레이케스팅(Raycastring)
    - 시선 방향에 장애물이나 목표물이 있는지 감지하는 기능
    - 레이트레이싱(Raytracing)
    - 모니터 화면에서 거꾸로 빛의 방향을 추적해 렌더링하는 기법

  • 계수 a의 범위를 0에서 1 사이로 좁히면 점 p1에서 점 p2로 잘라지는 선을 만들 수 있다.

  • 시작과 끝이 분명한 선을 선분(Line Segment)이라고 한다.

  • 이렇게 두 점을 조합해 선을 만들 수 있다.

  • 다음에는 한 차원 높혀서 면을 생성하는 수학에 대해 알아본다.

  • 면을 생성하는 수학은 점 3개를 조합하는 메커니즘으로 구성된다.

  • 점 3개에 계수를 붙인 뒤 마지막 차원의 값이 항상 1이 되도록 점 p3의 계수를 1 - a - b로 한다.

  • 따라서 이 계산 결과는 항상 점을 보장 받는다.

  • 그리고 이 세 점을 조합한 결과는 평면을 만든다.

  • 계수의 값을 0에서부터 1까지로 제한하면 세 점의 내부에 위치하는 점을 생성한다.
  • 이 점들이 바로 삼각형의 영역이 된다.

  • 이 삼각형이 모여서 물체를 생성한다.
  • 물체를 각각 그려주는 것이 게임 그래픽의 원리이다.
  • 이런 삼각형의 데이터를 모아둔 집합을 메시(mesh)라고 한다.

픽셀화

  • 왜 점으로 물체를 표현하지 않고 삼각형을 활용할까?
  • 점으로 물체를 표현하고 가까이서 물체를 보면 점들이 퍼지게 되어 물체를 제대로 볼 수가 없게 된다.
  • 삼각형으로 물체가 가지는 영역을 설정한 다음에 삼각형 내부에 위치한 픽셀의 수를 구한다.
  • 그 다음 픽셀을 칠하면 물체를 정밀하게 표현할 수 있다.
  • 이렇게 삼각형이 가지고 있는 영역을 픽셀로 변환하는 작업을 레스터라이제이션(Rasterization)이라고 한다.

  • 세 개의 점을 이용해 다음의 방정식을 구할 수 있다.
  • 방적식의 계수는 반드시 합이 1이다.
  • 그렇기 때문에 방정식으로 만들어진 새로운 점이 세 점 중에 어떤 점에 가까운지 비중을 파악할 수 있다.

  • 만일 모든 계수의 값이 모두 1/3이라면 방정식으로 만들어진 새로운 점은 삼각형의 정중앙에 위치하게 된다.
  • 계수들을 모아서 좌표를 만들 수 있는데 이 것을 무게중심좌표(Barycentric Coordinate)라고 한다.

  • 삼각형 내부의 픽셀을 칠할 때 픽셀이 가지는 무게중심좌표를 알고있다면 삼각형의 각 점의 데이터를 적절히 조합해서 삼각형 내부의 픽셀 색상을 결정할 수 있다.

  • 각 점에 빨강, 초록, 파랑 색을 지정한다.
  • 삼각형 내부의 각 픽셀이 가지는 무게중심좌표를 사용해서 세 가지 색의 비중을 결정하고
  • 색의 비중대로 색상을 혼합한 후 픽셀의 색상을 칠한다.
  • 아래와 같은 삼각형을 구할 수 있다.

  • 무게중심좌표는 색상뿐만 아니라 좌표에도 활용할 수 있다.
  • 삼각형에 텍스처를 오려붙일 때 사용하는데 이 때 사용하는 좌표를 UV좌표라고 한다.

  • 아래의 그림은 사각형 텍스처의 영역을 삼각형에 대응하여 표현한 그림이다.

  • 각 점에 대응하는 이미지의 2차원의 좌표를 삼각형에 도배하듯이 붙여넣는다.
  • 삼각형의 정점에 지정한 좌표들을 붙여주면 삼각형 내부 영역은 앞서 이야기한 무게중심좌표를 사용해 적절한 텍스처를 채워넣을 수 있다.
  • 이렇게 삼각형을 구성하는 세 점에 색상이나 UV 같은 정보들을 넣어서 삼각형 내부를 칠하는 효과를 만들 수 있다.

정점(Vertex)

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

하나의 물체를 화면에 그리는 과정

  • 물체를 3개의 정점으로 구성된 삼각형으로 분리한다.
  • 그리고 삼각형을 각각 그려서 화면을 채운다.
  • 이 과정은 정형화되어 있기 때문에 보통 렌더링 파이프라인이라고 부르고 그래픽카드가 모두 자동으로 처리해준다.
  • 하지만 그래픽의 응용력을 높이기 위해서 파이프라인 중간에 개발자가 원하는 기능을 추가할 수 있는 두 가지 명령 집합이 있다.
  • 그것들이 바로 정점 셰이더(Vertex Shader)와 픽셀 셰이더(Pixel Shader)이다.
  • 정점 셰이더
    - 삼각형을 구성하는 각 정점의 최종 데이터를 확정하는 함수
  • 픽셀 셰이더
    - 삼각형 내부를 구성하는 각 픽셀의 최종 색상을 확정하는 함수
    - 각 픽셀들은 앞에서 설명한 무게중심좌표에 의해 계산된 값이 자동으로 들어오게 된다.
    - 이 값과 텍스처의 값 조명 등의 값이 서로 결합하여 다양한 효과를 연출할 수 있다.

출처

게임 수학의 이해 강의 - 이득우 교수님

유튜브 링크

0개의 댓글