Make Unreal REAL.
article thumbnail
평면의 방정식

이득우의 게임 수학 다수의 게임 오브젝트가 월드 공간에 넓게 퍼져 있는 경우, 카메라 시야(절두체) 밖에 위치한 게임 오브젝트까지 모두 그리는 것은 비효율적이다. 그래서 게임에서 그래픽을 구현할 때는 절두체 영역에 속한 게임 오브젝트만을 그리고, 영역 밖에 있는 게임 오브젝트를 파악하고 걸러내는 기능을 절두체 컬링(Frustum culling)이라고 한다. 절두체 컬링은 절두체를 구성하는 6개의 평면에 대해 각각 평면의 방정식을 세워 대상 게임 오브젝트가 평면의 바깥에 있는지 확인하는 정차로 진행된다. 6개 평면 중 하나라도 바깥쪽에 위치해 있다면, 그리기에서 제외된다. 절두체 컬링에 앞서 평면의 방정식부터 알아보자. 세 점이 주어지면 두 벡터를 생성해 평면 상의 모든 점을 생성할 수 있다. 따라서 하나..

article thumbnail
깊이 버퍼(Depth buffer)

이득우의 게임 수학 다수의 게임 오브젝트를 그리는 경우, 카메라로부터 멀리 떨어진 게임 오브젝트를 먼저 그린 후 가까운 오브젝트를 그리도록 해야 원근감이 올바르게 표현횐다. 하지만 같은 거리에 두 게임 오브젝트가 서로 겹쳐 있다면, 물체 단위로 순서를 조절하는 것으로는 문제를 해결할 수 없다. 따라서 근본적인 해결 방법은 게임 오브젝트 단위가 아닌, 삼각형의 픽셀 단위로 깊이를 비교해 가까운 곳에 있는 픽셀만 그리는 것이다. 이를 위해 화면의 픽셀마다 현재의 깊이 값을 보관해주는 별도의 저장 공간이 필요한데, 이를 깊이 버퍼 혹은 Z-버퍼(Z-buffer)라고 한다. 최종 픽셀을 찍는 과정에서 현재 깊이 값을 버퍼에 저장된 값과 비교해, 현재 깊이 값이 작은 경우에만 픽셀을 찍도록 구성한다. 그러면 물체..

article thumbnail
원근 보정 매핑

이득우의 게임 수학 근평면, 원평면을 통해 깊이 속성을 추가해 메시에 원근 투영을 해보았다. 이번에는 텍스처를 입혀 본다. 기존에는 아핀 공간에서 텍스처의 색을 선형 보간을 통해 적용하는 아핀 텍스처 매핑(Affine texture mapping) 방식을 사용했지만 여기에는 문제가 있다. 책의 예제인 CK소프트렌더러에서 아핀 텍스처 매핑 방식으로 텍스처를 입히는 부분이다. // 책의 예제인 CK소프트렌더러에서 삼각형을 그리는 함수 void SoftRenderer::DrawTriangle3D(std::vector& InVertices, const LinearColor& InColor, FillMode InFillMode) { ... // 두 점이 화면 밖을 벗어나는 경우 클리핑 처리 lowerLeftPoi..

article thumbnail
깊이(Depth)

이득우의 게임 수학 원근 투영 행렬을 활용해 3차원의 물체를 원근감 있게 표현해봤지만, 텍스처를 입힌다면 추가로 고려할 사항이 발생한다. 카메라의 시선을 기준으로 할 때, 가장 가까운 곳에 위치한 오브젝트를 가장 앞쪽에 그려야 하기 때문이다. 이를 위해 물체가 카메라로부터 얼마나 떨어져 있는지에 대한 정보를 기록해 앞에 있는 물체를 나중에 그리도록 하는 것이다. 카메라로부터 얼마나 떨어져 있는지 파악할 수 있는 데이터를 깊이(Dpeth)라고 한다. 2차원 NDC에 깊이 값을 추가하면 3차원 NDC로 확장된다. 카메라의 속성으로부터 원근 투영 행렬을 생성하기 위해서는 카메라에 추가 속성을 부여해야 한다. 카메라에서 깊이에 대한 속성은 근평면(Near plane)과 원평면(Far plane)으로 나타낸다. ..

article thumbnail
동차 좌표계

이득우의 게임 수학 NDC는 2차원 평면의 좌표지만, 원근 투영 행렬을 사용하도록 계산 과정을 두 단계로 구분하고 사용하는 벡터의 값도 한 차원 높였다. 이렇게 한 차원 높인 벡터를 사용하는 것을 게임 제작에서는 동차 좌표계(Homogeneous coordinate system)를 사용한다고 표현한다. 동차 좌표계의 동차는 모든 차수가 같음을 의미하는 수학 용어다. 원근 투영을 위해 하나의 점으로 모이는 사각뿔의 사영 공간과 동차 좌표계가 어떤 연관이 있는지 알아보자. 3차원 사영 공간에서 Z축에 평행하게 점을 이동시키면, 투영된 점은 사영 공간의 점이 카메라로부터 가까울수록 원점에서 멀어지고, 카메라로부터 멀어질수록 원점에 가까워지는 반비례 관계를 가진다. 3차원 사영 공간의 점은 (x', y', 'z..

article thumbnail
원근 투영 변환의 원리

이득우의 게임 수학 3차원 공간에 투시 원근법의 원리를 적용하기 위해서는, 공간의 모든 점이 한 점을 향해 모이는 형태로 변경해야 한다. 이러한 변환을 원근 투영 변환(Perspective projection transformation)이라고 한다. 우리 눈이 바라보는 방식으로 가상 공간을 변환하는 것이다. 카메라에서 눈에 보이는 범위를 화각(FOV, Field of View)이라고 한다. 원근 투영 변환은 x, y, z축이 모두 직교하는 정육면체 형태의 뷰 공간(View space)을 카메라의 한 점으로 모이는 사각뿔 형태를 가진 공간으로 변환하는 작업이다. 3차원 공간을 변환한 후에는 공간의 물체를 투영해 2차원 모니터 평면에 담아내야 한다. 이를 위해 모든 물체의 상이 맺히게 하는 가상의 평면을 투..

검색 태그