Make Unreal REAL.
article thumbnail
카메라 공간

이득우의 게임 수학 2차원 카메라를 구현할 때는 이동 기능만 부여했지만, 3차원 카메라에는 회전 기능도 함께 부여해본다. 3차원의 카메라는 고려할 요소가 더 많다. 원점에 카메라가 있고, 카메라가 바라보는 Z축 앞 방향 (0, 20, 500)에 게임 오브젝트가 위치했다고 해보자. xy평면으로 최종 화면을 생성한다고 할 때, CK소프트렌더러의 좌표계 상 카메라의 화면에서 x축은 익숙한 오른쪽이 아닌 왼쪽을 향하게 된다. 따라서 보편적으로 인지하는 데카르트 좌표계와 맞춰주기 위해 y축을 180° 회전시켜 x축을 오른쪽을 향하도록 해주면, 게임 오브젝트의 좌표는 (0, -20, -500)이 된다. 카메라에는 크기의 개념이 없기 때문에, 카메라의 위치를 t, 오일러 각을 통해 구한 로컬 축을 x, y, z라고 ..

article thumbnail
오일러 각(Euler's angle)

이득우의 게임 수학 3차원 공간에서의 회전 변환에 대해 생각해보자. 회전 변환은 물체의 형태를 보존해주는 강체 변환의 성질을 갖는다. 따라서, 세 표준 기저 벡터는 동일한 크기와 직교성을 유지한 상태로 함께 움직여야 한다. 회전 변환으로 달라진 세 표준 기저 벡터를 알 수 있다면, 이를 열벡터로 만들어 회전 변환 행렬 R을 만들 수 있다. 하지만 이러한 방법은 매번 3개의 변화된 표준 기저 벡터 값을 계산해야 하기 때문에 비효율적이다. 따라서, 3차원 공간에서 회전을 지정할 때는 일반적으로 회전하는 중심축과 각으로 표현된 회전량을 지정하는 방식을 사용한다. 2차원 공간의 극좌표계 방식과 유사하다. 하나의 평면만 존재하는 2차원과 달리 3차원은 무수히 많은 평면으로 구성되기 때문에, 새로운 오일러 각 방식..

article thumbnail
3차원 공간의 설계

이득우의 게임 수학 x축, y축의 방향이 명확했던 2차원 공간과 달리, 3차원 공간을 설계하는 방법은 크게 2가지로 나뉜다. A를 왼손 좌표계(Left-handed coordinate system), B를 오른손 좌표계(Right-handed coordinate system)라고 한다. 엄지를 Z축으로 하고 손을 감을 때, 각 좌표계는 X -> Y 순으로 순서가 정해진다. 오른손/왼손 좌표계뿐만 아니라, 프로그램마다 위, 옆, 앞 방향을 나타내는 용도도 다르다. 책의 예제인 CK소프트렌더러는 y업 오른손 좌표계(Y-up right-handed coordinate system)를 사용한다. 3차원 공간에서는 2차원 공간에서 기저 벡터가 하나 증가했을 뿐, 2차원 공간의 트랜스폼 설계 방식과 크게 다르지 않..

article thumbnail
카메라 시스템

이득우의 게임 수학 게임 엔진은 개발자 관점에서 바라보는 게임 공간과 게이머 관점에서 바라보는 게임 공간 두 가지 화면을 제공해야 한다. 카메라가 출력할 화면의 해상도 정보를 갖고 월드의 일부를 그려낸 화면을 뷰포트(Viewport)라고 한다. 카메라에 설정된 뷰포트 정보를 바탕으로 월드 공간의 일부분을 렌더링하기 위해서는 카메라를 중심으로 물체의 트랜스폼을 재조정하는 작업이 필요하다. 카메라를 중심으로 변환한 공간을 뷰 공간(View space)이라고 한다. 월드 공간에서 게임 오브젝트 A가 (10, 10)에 위치하고 카메라가 (-10, -10)에 위치한다면, 카메라를 기준으로 한 A의 상대적인 위치는 (20, 20)이다. 카메라를 기준으로 한 뷰 공간에서 월드 공간의 원점 좌표는 (10, 10)이다...

article thumbnail
렌더링 파이프라인

이득우의 게임 수학 렌더링은 그릴 물체의 정보를 GPU에 위임해 처리하도록 하는 것이 일반적이다. CPU 내부에 설정된 워크플로우를 렌더링 파이프라인(Rendering pipeline)이라고 한다. 책의 예제인 CK소프트렌더러는 학습을 위해 4단계로 렌더링 파이프라인을 단순화시켜 구성했다. 정점 변환 게임 오브젝트에 연결된 메시의 모든 정점 정보를 정점 버퍼와 인덱스 버퍼에 직렬화하는 과정이다. 정점 처리 직렬화된 모든 정점을 모델링 행렬을 통해 로컬 공간에서 월드 공간으로 변환하는 과정이다. 픽셀화 메시를 구성하는 삼각형 폴리곤마다 픽셀화를 진행하는 과정이다. 무게 중심 좌표를 활용해 각 폴리곤에 속하는 픽셀들을 추려낸다. 픽셀 처리 폴리곤을 구성하는 각 픽셀의 최종 색상을 구하는 과정이다. 텍스처로부..

article thumbnail
게임 엔진의 워크플로우

이득우의 게임 수학 게임 엔진이 제공하는 실행 흐름을 워크플로우(Workflow)라고 한다. 책의 예제인 CK소프트렌더러는 총 4단계의 워크플로우를 제시한다. 리소스 로딩 메모리에 게임 진행에 필요한 메시, 텍스처 등의 리소스를 미리 올려둔다. 씬 구축 씬에 속한 게임 오브젝트를 생성하고 트랜스폼 정보가 설정되며, 리소스 정보가 게임 오브젝트에 연결된다. 게임 로직 게임 오브젝트의 트랜스폼을 변경하는 작업이다. 렌더링 로직 게임 로직에서 완성된 씬 정보를 바탕으로 최종 화면을 그려내는 과정이다. 게임 오브젝트의 트랜스폼 정보와 오브젝트에 연결된 메시, 텍스처 등의 리소스를 활용한다. 매 프레임마다 3 -> 4 과정을 반복한다. 1. 리소스 로딩 단계 불러들인 리소스에 고유한 키를 설정한다. // 책의 예..

검색 태그