23.03.02. (목) - 게임 엔진에 대한 이해

김도익·2023년 3월 6일
0

Unity

목록 보기
2/23
post-custom-banner

개요

게임 개발에 관심이 있다면 Unity 엔진과 Unreal 엔진에 대해서는 들어봤을 것입니다.
예전에는 기술을 가진 사람만이 게임을 제작할 수 있었지만, 오늘날에는 누구나 게임 엔진을 이용해 게임을 제작할 수 있습니다. 그뿐만 아니라 게임 외에도 건축, 애니메이션, 웹툰 등에 사용되고 있습니다. 게임 엔진이란 무엇일까? 이번 시간에는 이에 대해서 알아보도록 하겠습니다.

초기 사용 게임 개발의 문제점

콘솔 / PC 게임이 개발되기 시작했던 시점은 대략 1980년대입니다. 아타리 게임사가 활약했던 시기이며, 8-bit / 16-bit 콘솔 게임기가 등장했던 시기입니다.

그 시절에는 게임을 개발할 때 어셈블리어를 사용했습니다. 근래에 '페르시아의 왕자'의 소스코드가 복원되어 공개되었는데, Apple2를 비롯한 일부 시스템에서만 동작하는 Assembly 6502로 작성되어 있었습니다. 이는 어셈블리어로 개발하는 것도 어려운데, 배포 대상이 바뀔 때마다 코드를 재작성해야 한다는 문제가 있음을 시사합니다. 그렇기에 콘텐츠를 많이 개발한다거나 게임 자체를 빠르게 출시하는 것이 쉽지 않았습니다.

게다가 어셈블리어로 개발을 하기에 당연히 게임 구현에 필요한 모든 것들을 개발자가 스스로 해결해야했습니다. 게임 프레임워크와 필요한 라이브러리 구현부터 시작해 공격, 피격 판정 등의 기획적인 부분까지 모두 프로그래머의 몫이었던 것입니다. 그렇다고 모든 게임 프로그래머가 서로서로 소스코드를 공유하고 발전시키질 않았으므로*, 게임이
개발될 때마다 동일하거나 유사한 소스코드가 다양한 프로젝트에서 반복적으로 작성될 수밖에 없는 환경이었습니다.

*그것을 위한 인프라 자체가 없기도 했습니다. 인터넷이 사용되기 시작한 것이 1990년 ~

물론, 규모가 좀 있는 기업에서 게임을 개발하는 경우에는 여러 프로젝트를 진행하면서 코드를 재활용할 수도 있었겠지만, 그럼에도 불구하고 게임 엔진이라는 개념이 통상적으로 인지되진 못했습니다.

하지만 계속 코드 재활용이 이루어지지 않았다면 지금과 같이 업데이트가 빠르고 컨텐츠가 방대한 게임들이 나올 수 없었을 것입니다.

게임 엔진의 등장

게임 엔진(Game Engine)게임을 위한 통합 개발 환경이라고 할 수 있습니다. 아무리 게임마다 콘텐츠의 구조나 특징이 달라 재활용할 수 없는 부분들이 있다고 하더라도, 일부분 때문에 모든 코드들을 매번 다시 작성하는 것은 너무나 비효율적입니다.

게임 엔진이라는 개념이 하루아침에 뚝딱하고 만들어졌다거나 누가 공식적으로 선언을 한 것도 아니라, 그 경계와구분이 모호합니다. 대부분 최초의 게임 엔진은 Doom 개발에 사용된Doom Engine 이라고들 합니다.
게임 플레이 로직과 렌더링 로직을 분리할 수 있도록 도와주는 역할을 수행했는데, 이를 이용해 많은 파생 게임들이 제작되었습니다. 이를 토대로 게임 엔진은 점점 더 많은 것들을 지원하는 복합적인 프로그램으로 진화하였습니다.

초기의 게임 엔진은 거의 라이브러리 형태로 사용되었거나, 게임 컨텐츠 생성기에 가까웠습니다. 렌더링 API 등을 처리하는 로직을 제공한다거나, 레벨 생성 및 편집 기능*을 지원한다거나 하는 경우입니다. 시간이 지남에 따라 코드 레벨에서의 기능과 리소스** 레벨에서의 기능을 합친 게임 엔진도 나오기 시작했습니다.

*프로그래머가 기획자를 위해서 만들어주는 툴 프로그램이라고 할 수 있겠습니다.

** 게임을 제작하기 위한 이미지, 애니메이션, 사운드 등의 파일을 말한다. 애셋(Asset)이라고도 합니다.

근래의 게임 엔진은 독자적인 에디터를 지원하면서 사용성을 대폭 강화해왔습니다. 이제는 애셋이 게임 내에서 어떻게 보여질 지 미리 확인할 수 있고, 프로그래머가 아닌 인력도 충분히 다룰 수 있는 UI/UX 를 제공함으로써 교육 비용을 낮춰주었습니다. 게다가 자체 스크립트 시스템까지 구축하는 경우도 있는데, 언리얼 엔진의 블루프린트 혹은 유니티의 볼트는 코딩을 못해도 게임 개발이 가능하게 만들어 주었습니다.

게임 엔진은 크게 2가지로 분류할 수 있습니다.
다른 회사에 팔기 위해서 만들어진 상용 게임 엔진(Commercial Game Engine)
회사 내부에서 게임을 개발하기 위해서 만들어진 자체 게임 엔진(Proprietary Game Engine / In-house Game Engine)이 있다.

자체 게임 엔진의 쇠락

게임 시장이 발전하면서, 게임 간의 경쟁이 치열해지기 시작했습니다. 패키지 형태로 판매되던 게임들은 이제 정액제 형태로 판매되기 시작했고, 정액제에서는 부분유료화 형태로 판매되기까지 이르렀습니다. 이는 더 이상 게임은 한 번 팔면 끝나는 상품이 아니라 지속적으로 유지보수가 필요한 프로그램이 되었음을 시사합니다.

이 때문에 필수적으로 요구되는 서비스 전략들이 생겨났는데, 대표적으로 콘텐츠를 빠르게 뽑아내서 사용자 이탈율을 줄이는 전략이 있습니다. 이를 위해서는 컨텐츠를 빠르게 뽑아낼 수 있는 환경이 뒷받침 되어야 합니다. 그렇지 않은 환경이라면 인력과 시간 비용도 비쌀 뿐더러 프로그래머가 퇴사할 수도 있습니다. 회사 입장에서 퇴사를 막을 방법은 없으니, 이를 대체할 수 있는 방법도 큰 과제로 남습니다.

그런데, 슬프게도 라이브 서비스를 오랫동안 해온 프로젝트일수록 자체 게임 엔진으로 개발되었을 가능성이 매우 높습니다. 상용 게임 엔진이 널리 보급되기 이전일 테니 말입니다. 이는 유지보수의 어려움으로 이어집니다. 한 때 “우리는 상용게임 엔진을 안 쓰고 자체 게임 엔진을 써서 개발하는 실력있는 팀이다” 같은 홍보가 먹히던 때가 있었지만 그런 프로젝트를 이제는 찾아보기 어려워졌습니다.
3N 같은 대형 게임사에서 나오는 신규 프로젝트들이 죄다 상용 게임 엔진을 사용하는 데에는 특별히 또 다른 이유가 있는 것은 아닙니다.

반면에 상용 게임 엔진은 앞서 언급한 것처럼 누구나 엔진을 숙련시킬 수 있기 때문에 퇴사자가 발생해도 인력 충원을 하기 쉽습니다.*
또한, 중소기업처럼 (비용 같은 이유로) 자체 게임 엔진을 개발하기 어려운 환경이라면 상용 게임
엔진밖에 선택지가 없기도 합니다. 상용 게임 엔진 개발사들도 이러한 점을 알고 있기 때문에 자사 제품을 라이센스 단위로 팔다가 현재는 매출/수익의 일부분을 수수료로 가져가는 전략을 취해가고 있습니다.

*물론 반대급부로 인력 대체가 쉽기도 하다.

그리고 멀티플랫폼을 지원하는 것이 개발사 입장에서도 유저풀을 쉽게 확보하고 매출을 늘릴 수 있는 확실한 방법이라는 게 업계의 정설이기 때문에 멀티플랫폼도 당연시 되었습니다. 하지만 멀티플랫폼으로 서비스를 유지하는 것은 매우 어려운 일입니다. 그렇기 때문에 상용 게임 엔진을 사용하는 것이 더더욱 자연스러워졌습니다. 여기에는 다음과 같은 이유가 있습니다.

  • 팀 구성원들이 각기 다른 개발환경을 가지고 있다하더라도 문제없이(대체적으로...)개발할 수 있습니다.

  • 하나의 프로젝트 소스코드를 기반으로 모든 플랫폼에서 구동 가능한 실행파일을 뽑아낼 수 있습니다.

  • 게임 엔진단에서 특정 플랫폼에 한정적 / 특수한 API를 미리 구현해주는 편이고, 이를 사용하면 편리하게 플랫폼별에 예외처리를 할 수 있습니다.

게임 엔진에서 제공해주는 위의 기능들 없이 온전히 프로젝트 팀원들의 힘으로 멀티 플랫폼 지원을 지도하려고 한다면 게임을 2개 만드는 정도의 고생을 할 지도 모릅니다.

정리하자면 대기업처럼 규모있는 팀에서는 인력 충원 용이성을 중점으로, 중소기업처럼 소규모 팀에서는 애초에 컨텐츠를 빠르게 찍어내려면 상용 게임 엔진밖에 선택지가 없는 상황입니다. 물론 규모있는 팀에서 자체 게임 엔진을 잘 유지보수하고 개량한다면 네임밸류와 생산성 모두 잡을 수 있을 지도 모릅니다. 하지만 그것이 절대 쉬운 일이 아닌 데다가 전세계 모든 사람들이 유지보수/개량에 참여할 수 있는 오픈소스 상용 게임 엔진과 경쟁이 될 수가 없기도 합니다. 자체 게임 엔진의 시대가 저문 것입니다.

Unity와 Unreal

최신 자료는 아니지만 스팀에 등록된 게임 중 어느 정도 성공한 게임을 대상으로 어떤 게임 엔진을 사용했는지 파악한 연구가 있었습니다. 절반 가량은 어떤 엔진을 사용하는지 알 수 없었지만, 나머지 절반은 상용 게임 엔진이 사용되었고, 이중 대부분은 Unity와 Unreal이었습니다.
최근에 개발된 게임들 위주로 다시 조사한다면 상용 게임 엔진의 비중은 더 늘어나서 Unity와 Unreal의 지분도 더 크게 측정될 것이다.

그러면 둘의 차이점은 무엇일까? 성능적인 면에서 Unreal이 Unity보다 뛰어나다는 등의 루머가 있는데, 이는 틀린 말입니다. Unity로도 충분히 고사양 3D 게임을 만들 수 있습니다.* Unity는 사용하는 스크립트 언어가 C#일뿐 엔진은 C++로 구현되어 있기 때문에 스크립트 언어의 차이로 성능의 차이가 날 순 없습니다.

*대표작으로 Escape From Tarkov가 있다.

이러한 차이점으로 서로의 용도가 다르다고 할 수 있습니다.

profile
고급 개발자가 되고 싶어요!
post-custom-banner

0개의 댓글