본문 바로가기
Computer Science/게임 수학

게임 수학 | 2부 콘텐츠 제작 기초 | 09장 게임 엔진

by continue96 2023. 2. 20.

09장 게임 엔진: 콘텐츠를 만드는 기초

 

09장 게임 엔진: 콘텐츠를 만드는 기초

9.1 게임 엔진의 구성 요소

  • 게임 엔진 인터페이스는 두 작업 공간으로 나뉜다.
    • 게임 공간을 설계하는 작업 공간인 신(scene) 혹은 레벨(level)
    • 게임 데이터를 관리하는 작업 공간인 리소스(resource) 혹은 애셋(asset)

 

9.1.1 신의 구조

  • 신에서 콘텐츠를 구성하는 기본 단위는 게임 오브젝트(game object) 혹은 액터(actor)이다.
    • 게임 오브젝트의 배치 정보는 위치, 회전, 크기로 구성된 트랜스폼(transform)으로 관리한다.
    • 트랜스폼 정보로부터 모델링 행렬을 설계해 렌더링할 물체의 정점을 변환한다.

그림 9-1 신, 게임 오브젝트, 트랜스폼의 관계

 

 9.1.2 2차원 모델링 행렬

  • 모델링 행렬(modeling matrix)은 크기(S), 회전(R), 이동(T)에 대한 세 가지 아핀 변환 행렬의 곱으로 나타낸다. 
    • 행렬 곱은 교환 법칙이 성립하지 않기 때문에 변환 순서가 중요하다.
    • 트랜스폼 변환은 크기 → 회전 → 위치 순서로 이루어지기 때문에 행렬 곱으로는 T·R·S이다.

그림 9-2 아핀 변환 행렬로부터 설계한 2차원 모델링 행렬

 

 9.1.3 로컬 공간과 로컬 축

  • 독립된 물체의 정보를 담기 위해 부여한 공간을 로컬 공간(local space)이라고 한다.
  • 여러 물체를 모아 게임 콘텐츠를 만드는 데 사용되는 새로운 공간을 월드 공간(world space)라고 한다.

 

  • 물체를 기준으로 설정된 방향 정보를 로컬 축(local axis)이라고 한다.
    • 라이트 벡터(right vector), 업 벡터(up vector), 포워드 벡터(forward vector) 
    • 2차원 평면에서 트랜스폼에 새로운 회전 값이 설정되면 로컬 축(표준 기저 벡터)이 변경된다.
    • 최종 모델링 행렬은 변경된 로컬 축(표준 기저 벡터)을 사용해 계산한다.

그림 9-3 표준 기저 벡터 e1, e2을 세타만큼 회전한 벡터 r1, u1

 

그림 9-4 로컬 축 정보를 활용한 2차원 모델링 행렬

 

 9.1.4 리소스의 구조

  • 게임 엔진은 여러 게임 오브젝트가 자원을 공유하도록 리소스 저장소(resource repository)를 제공한다.
    • 메모리를 절약하기 위해 게임 오브젝트는 리소스 데이터를 가리키는 리소스 키(key)만 갖는다.

그림 9-5 리소스 저장소의 구조

 

9.2 평면 카메라

 9.2.1 2차원 평면의 카메라

  • 카메라가 출력할 화면의 크기 정보를 뷰포트(viewport)라고 한다.
  • 물체의 트랜스폼을 카메라를 중심으로 변환한 공간을 뷰 공간(view space)이라고 한다.
    • 모델링 행렬(modeling matrix)은 로컬 공간의 좌표를 월드 공간의 좌표로 변환한다.
    • 한편, 뷰 행렬(view matrix)은 월드 공간의 좌표를 뷰 공간의 좌표로 변환한다.

그림 9-6 로컬 공간에서 뷰 공간으로변환하는 모델링 행렬과 뷰 행렬

 

  • 2차원 평면에서의 뷰 행렬(V)은 카메라 트랜스폼에서 이동 행렬의 역행렬을 계산하면 된다.
    • 로컬 공간의 좌표 vlocal에서 뷰 공간의 좌표 vview로 변환하는 행렬
    • vview = V · M · vlocal

 

9.3 게임 엔진의 워크플로우

 9.3.1 게임 엔진의 워크플로우

  • 4단계 게임 엔진 워크플로우
    • 리소스 로드: 메시, 텍스처 같은 리소스를 불러들인다.
    • 신 구축: 신에 속한 게임 오브젝트를 생성하고 리소스 정보를 연결한다.
    • 게임 로직: 프레임마다 게임 오브젝트에 포함된 트랜스폼 정보를 갱신한다.
    • 렌더링 로직: 게임 오브젝트에 연결된 리소스 정보를 활용해 화면을 그린다.

그림 9-7 게임 엔진의 간단한 진행 과정

 

 9.3.2 렌더링 파이프라인

  • 렌더링 파이프라인(rendering pipeline)
    • 정점 변환: 게임 오브젝트에 연결된 메시의 정점 정보를 월드 공간을 중심으로 지정한다.
    • 정점 처리: 화면에 그려질 정점의 위치 값을 월드 공간을 기준으로 변환한다.
    • 픽셀화: 무게중심 좌표를 활용해 삼각형 속의 픽셀을 추려내고 색상을 결정한다.
    • 픽셀 처리: 텍스처로부터 UV에 대응되는 색상을 가져와 픽셀의 최종 색상을 설정한다.

그림 9-8 간단한 렌더링 파이프라인

댓글