0. 게임 개발을 하려면 수학을 배워야 해요.

골두·2024년 6월 18일

게임 수학

목록 보기
1/4
post-thumbnail

해당 글은 이득우의 게임 수학을 내 입맛대로 정리한 글이다.

메타버스 시대

코로나 바이러스가 한창 일 때 IT업계는 대 호황에 가까웠다. 비대면(재택) 근무 부터 시작해 다양한 IT 서비스들이 나오고 이른바 개발자 붐 시대가 일어나게 되었다. (웹 개발자도 이때 많이 호황이였다)

게임 계열에서는 이런 호황과 함께 *메타버스 라는 용어가 눈에 띄기 시작한다.

1992년 닐 스티븐슨의 SF 소설 Snow Crash에서 처음 나온 용어로 초월을 의미하는 Meta와 우주를 뜻하는 Universe가 합성된 합성어다. 초기에는 컴퓨터로 만들어진 가상 세계를 지칭하였으나 현대에서는 현실 공간을 가상 공간에 재현하고 그 곳에서 활동을 가능하게 하는 기술 전반을 자칭하게 된다.

메타버스라는 이름하에 IT 회사들은 다양한 시도를 하게 된다. 비대면 수업부터 시작해 모임, 수업, 가상 콘서트, VTuber, 비대면 게임(?) 등 일상 생활부터 문화 생활 까지 영향을 미치게 된다.


이세계 아이돌 (비대면 콘서트와 VTuber의 대표 사례)

메타버스라는 이름하에 많은 시도가 이루어지면서 관련 기술은 미디어 제작 환경에서도 큰 변화를 이끌어 내었다.

기존에는 단순하게 내가 원하는 촬영지를 탐색해 그 곳을 직접 찾아가 촬영을 진행했다면 이제는 사실적인 배경 이미지를 스튜디오 내부 LED 화면에 출력하거나 합성함으로써 더 나은 배경을 직접 만들어내는 경우 또한 생기기 시작했다.

대표 사례:

뿐만 아니라 메타버스 게임인 로블록스, 마인크래프트 등도 호황이 되고 내부에서 수익 활동까지 하는 상황이 되었으니 메타버스에 대한 기업의 관심도는 점점 올라가게 되고, 페이스북의 대표 마크 저커버그 또한 이 메타버스 서비스를 하기 위해 사명을 Meta로 바꾸는 상황까지 가게 된다.

준비해야할 것은?

메타버스 관련 콘텐츠를 만들 때는 여러 프로세스가 존재한다.

  • 디지털 에셋 제작(원화, 스프라이트, 모델링, 애니메이션)
  • 콘텐츠 기획(스토리 보드, 레벨 및 시스템 디자인)
  • 기술 개발(물리 및 움직임 개발, 재질과 라이팅 처리, 가상 공간과 캐릭터 개발)
  • 인터넷 연결(멀티 플레이, 아바타 구매 등의 시스템 개발)
  • 입출력 처리 (마우스 키보드 부터 모션 캡쳐 기반으로 화면 출력)

이 모든 프로세스는 게임 엔진을 통해서 개발 및 관리가 되기에 게임 엔진에 대해 잘 이해하고 있다면 위와 같은 메타버스 개발이 매우 쉬워지게 된다. 이전의 게임 엔진은 게임을 빠르고 효율적으로 개발하기 위해 제작에 필요한 여러 기능을 통합해 제공하는 소프트웨어 였지만 이제는 다양한 미디어 분야에서까지 사용하는 소프트웨어가 되었다.

현대 사회에서는 게임 엔진의 대표격인 언리얼 엔진과 유니티 엔진을 활용해 다양한 메타버스를 개발하고 있고 이 두 엔진을 잘 다루는 개발자 또한 수요가 커지고 있다.

즉 현재 사회에서 더 차별력있는 메타버스 관련 개발자가 되기 위해서는 이 게임 엔진의 동작 원리를 이해하고 잘 다루는 것이 키포인트가 될 수 있다.

게임 엔진의 구성

게임 콘텐츠를 기술적으로 분석해본다면 현실 세계를 그럴듯하게 복제(제작)해 실시간적으로 움직이는 3차원 가상 세계를 보여주는 기술이다.

사실 게임 엔진이 만들어내는 가상 세계는 모든 것이 수(수학할 때 그 수)로 구성되어 있고 우리가 보는 화려한 그래픽들도 전부 숫자로 구성되어 있는 데이터 조각이다. (게임에 현질하고 나온 결과물도 데이터 쪼...)

이러한 숫자 데이터에 규칙을 넣고 그 규칙을 분석하는 소프트웨어를 만들어 그 수치 기반으로 모니터 화면에 보여주는 렌더링 작업을 수행하게 된다.

렌더링?

렌더링이란 이미지 합성이라고도 불리며 컴퓨터 프로그램을 사용해 2D 및 3D 모델에서 사실적이든 사실적이지 않은 이미지를 생성하는 프로세스를 의미한다.

이렇게만 말하면 좀 와닿지 않은데 웹 개발을 해봤거나 하는 사람들이면 브라우저 렌더링 이라는 말을 알 것 이다.

브라우저 렌더링이라는 말은 브라우저에 HTML, CSS, JS를 기반으로 페이지를 그려주는 행위를 말하는데, 이미지라고 말하지만 실제로는 내가 만든 결과물을 화면에 출력해준다라는 의미로 받아들이면 더욱 이해하기 쉽다.

그래픽 카드의 진화

다시 본제로 돌아와서 게임 엔진은 원래는 그래픽카드를 기반으로 화면을 출력하는 기능을 수행했다. 계산 보다는 출력을 했었지만 현재는 더 사실적이고 더 화려한 그래픽을 표현하기 위해 이 "렌더링"에 필요한 계산을 직접 처리하는 기능만을 위한 하드웨어라는 의미에서 그래픽 카드는 GPU라는 이름으로 변경되고 게임 제작에 특화된 기능들이 탑재되기 시작했다.

흔히 고사양 게임을 하기 위해서는 그래픽 카드를 좋은 것으로 바꿔줘야 하는 이유기도 하다. (영상은 별개다. 빌드 과정을 거치기 때문에)

그렇게 GPU가 나오게 되면서 GPU는 렌더링 관련 기능만 제공하고 게임 분야에서 렌더링을 관리할 때는 전부 GPU가 정해준 공정에 따라 처리하게 된다.

GPU의 의존성을 제거

GPU의 발전은 우리가 직접 렌더링 기술을 따르지 않는 것에 대한 이점이 존재했다. 우리가 관리하지 않고 맡기면 되는 것이니까

다만 현재는 조금 입장이 달라지게 되었다. 이전에는 GPU에 모든 것을 맡기고 개발만 했었던 과거와는 달리 더욱 적극적으로 렌더링을 하기 위해 렌더링 자체에 대한 기술을 이해하고 응용하기 시작했다. 그 결과 언리얼 엔진에서는 최근 나나이트(Nanite)라는 자기 엔진만의 GPU 렌더링 기술을 보여주게 된다.

이런 기술 발전은 사용자들이 더 화려하고 사실적인 렌더링 기법이 필요해졌음을 나타내는 기술이기도 하다.

이런 기술을 이해하려면 가상 세계를 구축하는 규칙인 수학적 지식이 필요하다.

게임 수학

게임 세계를 구축하는 수학은 큰 틀에서는 선형대수학(linear algebra)이라는 벡터 공간, 벡터 선형 변환, 행렬, 연립 선형 방정식 등을 활용하는 수학의 일종이라고 할 수 있다.

일반적인 선형대수학은 해를 구한다면 가상 세계를 구축할 때는 공간의 구조를 분석하고 그 데이터를 다루는 것에 더 고도화 되어있다고 할 수 있다.

학습해야할 내용

게임 엔진을 지탱할 때 필요한 수학은 크게 3가지로 분류할 수 있다.

공간 수학

가상 공간을 구축, 변환하고 분석하는 데 사용하는 수학으로 가상 공간은 벡터로 구성되고 행렬이라는 도구를 이용해 원하는 대로 변형할 수 있다.

그 이후 다수의 물체를 배치하고 관리하는 Transform이라는 작업을 수행해 개발자들이 손쉽게 가상 공간을 꾸밀수있는 수학도 포함된다.

물체 수학

물체의 외형을 설정하고 모니터 화면에 표현하는 데 사용하는 수학으로, 현실에서는 물체나 그림을 만들 때는 선으로 다양한 형태와 질감을 표현하지만 컴퓨터 그래픽 즉 GPU에서는 삼각형만 사용해 물체를 표현한다.

즉 물체를 구성하는 삼각형 폴리곤을 생성하고 관리하기 위해서는 점부터 하나하나씩 체계를 쌓아나가야 하는데 이렇게 된다면 옛날 게임 처럼 폴리곤 덩어리 즉 각져보이는 문제가 발생할 수 있다.

다만 요새 컴퓨터는 좋아서 연산 능력을 최대한 활용해 삼각형으로 구성되었지만 더 작게 쪼개고 다듬는 작업을 수행함으로써 사실적인 결과물을 도출할 수 있고 그것을 화면에 출력시킬 때 모니터 화면을 구성하는 픽셀로 변환시키는 픽셀화 작업까지 하는 과정에 필요한 수학이라 할 수 있다.

회전 수학

가상 공간에서 안정적인 회전 변환을 구현하는 것에 사용되는 수학으로 삼각함수를 많이 활용하게 된다.

profile
나 볼려고 만든 블로그 (블로그 이전: https://goldfrosch.tistory.com/)

0개의 댓글