게임 엔진
게임 엔진()은 비디오 게임 같은 실시간 그래픽 표시 기능을 갖춘 상호 작용 응용 프로그램을 구현하는 핵심 소프트웨어 구성 요소를 말한다. 컴퓨터 게임 개발에 바탕이 되는 기술을 제공하여 개발 과정을 단축시켜 줄 뿐 아니라, 게임을 다양한 플랫폼에서 실행할 수 있게 해주기도 한다. 특히 게임 엔진은 재사용을 염두에 두고 있기 때문에, 하나의 게임에 종속되지 않고 여러 종류의 게임에 쓰일 수 있도록 개발된다.
게임 엔진이 제공하는 주요 기능으로는 2차원 그래픽이나 3차원 그래픽을 출력하기 위한 렌더링 엔진('렌더러'), 물리 엔진, 충돌 검출과 충돌 반응, 사운드 출력, 스크립트 작성, 애니메이션, 인공 지능, 네트워크, 스트리밍, 메모리 관리, 쓰레딩, 씬 그래프 등이 있다.
게임 엔진은 게임 소프트웨어의 구성에 필요한 소프트웨어 구성 요소를 재사용할 수 있게 만든 것이다. 엔진은 개발에 필요한 기능을 즉시 사용할 수 있도록 제공하여 개발의 단가와 복잡도를 줄여주고, 제 일정에 복잡한 게임을 출시할 수 있게 해 준다. 이것은 게임 업계에서 매우 중요한 일이다.
게임 엔진은 유연하고 재사용 가능한 소프트웨어 환경을 제공해주는 점 때문에 '게임 미들웨어'라고 불리기도 한다. 게임 미들웨어라고 불리는 시스템들은 구성 요소(컴포넌트) 기반의 구조를 가지는 것이 많다. 그로 인해 게임의 특정 시스템을 더 전문적인 미들웨어 구성 요소로 대체하거나 확장할 수도 있다. 렌더웨어 같은 게임 엔진의 경우, 아예 일련의 미들웨어 구성 요소들을 느슨하게 연결하는 방식으로 설계되었다. 개발사가 그 중 적당한 것만 선택해 자신들이 사용하는 엔진과 결합할 수 있는 것이다.
이름과는 달리 게임 엔진은 다른 분야에서도 사용된다. 홍보용 데모나 건축 시각화, 훈련 시뮬레이션, 모델링 환경 등 실시간으로 그래픽을 출력하는 상호작용 응용 프로그램들이 좋은 예이다.
각각의 게임 엔진은 저마다 특징을 가지고 있지만, 일반적인 엔진들이 제공하는 기능들이 있다.
많은 게임 엔진은 다른 미들웨어 프로그램처럼 플랫폼 추상화를 제공하기 때문에, 비교적 손쉽게 같은 게임을 다양한 플랫폼에서 실행할 수 있게 해준다. 소스 코드에 아주 적은 혹은 어떤 수정도 없이 게임 콘솔과 개인용 컴퓨터 모두에서 실행 가능한 게임을 만들 수 있는 것이다.
많은 3D 엔진이나 게임 엔진의 렌더링 시스템은 그래픽 처리 장치나 비디오 카드의 소프트웨어 추상화를 제공하는 다이렉트3D나 오픈GL같은 그래픽스 API를 기초로 만들어진다. 또한 게임에 일반적으로 사용되는 다이렉트X나 SDL, 오픈AL 같은 저수준 라이브러리는 입력 장치, 네트워크 카드, 사운드 카드 같은 컴퓨터 하드웨어에 접속하기 위해 하드웨어와 독립된 접속을 제공한다.
물리 엔진은 실제 세계의 물리 작용을 컴퓨터로 모사하여, 보다 사실적인 게임 환경을 제공해준다. 게임 엔진 초기에는 충돌을 감지하고 반응하는 것이 엔진이 제공하는 물리 기능의 대부분이었다. 그러다 현실과 가까운 물리 엔진이 크게 대두된 것은 게임 엔진 소스에 탑재된 하복 물리 엔진의 물리 시뮬레이션 기능을 활용한 일인칭 슈팅 게임 《하프라이프 2》가 공개되고 나서였다.
물리 엔진이 지원하는 기능은 크게 차량, 강체, 액체, 레그돌, 직물과 연체 효과 등이다.
쓰레딩은 오늘날의 멀티 코어 시스템과 사실성에 대한 요구의 증가 때문에 게임 엔진에서 중요한 위치를 차지하게 되었다. 일반적인 스레드는 렌더링, 스트리밍, 사운드, 그리고 물리를 수반한다.
어떤 회사들은 전문적으로 '미들웨어'라 불리는 소프트웨어 묶음을 개발해서 다른 게임 개발사가 게임을 만드는 데 필요한 구성 요소들을 제공한다. 대부분의 미들웨어 소프트웨어는 그래픽, 사운드, 물리, AI 등 특정 기능의 개발을 쉽게 해준다. 유니티3D, DX 스튜디오, 게임브리오, 렌더웨어(현재 개발과 마케팅을 모두 중단)가 널리 사용되는 미들웨어 소프트웨어들의 예이다.
어떤 미들웨어는 오직 특정한 기능만을 수행하기도 한다. 예를 들어 스피드트리는 오직 사실적인 나무와 식물을 렌더링하는 용도로만 사용되는 미들웨어다.
기능성있는 서브 시스템들을 제공하여 널리 사용되는 미들웨어에는 하복 물리 엔진과 RAD 게임 툴즈의 시스템들이 있다. 하복 물리 엔진은 사실적인 물리 시뮬레이션 시스템을 제공하며, RAD 게임 툴즈는 비디오 렌더링, 오디오 녹음재생, 그리고 3D 렌더링을 위한 시스템들을 개발하고 있다.
대규모 다중 사용자 온라인 게임(MMOG)을 위한 미들웨어는 일인용 게임을 위한 것보다 더 복잡하다. 하지만, MMOG의 인기가 증가하면서 그러한 미들웨어 패키지의 개발도 늘어나고 있다.
게임 엔진은 주로 게임과 함께 개발된다. 제작에 들어가기 전에 프로젝트 관리자와 프로그래머, 게임 디자이너 등이 함께 게임 프로그램의 설계 방향을 결정하는데, 엔진을 직접 개발할 것인지 개발된 것을 쓸 것일지도 이때 결정한다.
개발된 것을 사용할 경우 예산과 일정을 단축시킬 수 있지만, 개발할 게임과 상성이 맞지 않을 경우 역효과가 난다. 물론 아무리 범용적인 엔진이라도 모든 게임이 요구하는 바를 모두 충족하지는 못 하기 때문에, 게임 개발사가 자신들의 게임에 맞춰 최적화하거나 개조하는 경우가 많다. (상용 게임 개발사를 위한 상용 엔진은 대부분 구입자에게 소스를 공개한다.) 스프린터 셀 시리즈는 구입한 엔진을 개조한 대표적인 예이다. 처음에 언리얼 엔진 2.5를 구입했지만, 시리즈를 거듭할수록 자신들의 게임에 맞게 엔진을 개조해왔다. (결국 《》에서는 개조된 엔진을 LEAD 엔진이라 이름붙였다.)
직접 엔진을 개발하는 경우는 자신들의 게임에 맞는 엔진이 없는 경우이다. 일인칭 슈팅 게임 《헤이즈》의 개발팀은 자신들의 게임이 가진 특징을 살리기 위해 스스로 엔진을 개발했다. 직접 개발하는 엔진도 사내의 다른 프로젝트나 후속 프로젝트를 고려해 범용성을 보장해야 하는 경우가 있다. 나아가 어떤 개발사들은 연구개발팀을 따로 두어 회사 프로젝트 전용의 게임 엔진을 개발하기도 한다. 일본의 게임 개발사인 캡콤은 회사의 자체 엔진인 MT 프레임워크를 꾸준히 개발하고 있고, 《로스트 플래닛》과 《데드 라이징》에 이 엔진이 쓰였다.
판매를 위해 개발되는 엔진은 그 범용성이 관건이 된다. 에픽 게임즈의 언리얼 엔진은 판매를 목적으로 개발된 엔진으로, 특히 언리얼 엔진 3는 기존의 일인칭 게임 중심 구조에서 벗어나 범용성을 더욱 강화했다. 그 외에 판매 목적으로 엔진을 개발하는 회사로는 크라이엔진의 크라이텍과 토크 게임 엔진의 게러지게임즈가 있다.
게임 엔진의 개발은 컴퓨터 과학도와 취미 개발자 모두에게 인기있는 프로젝트이다. 엔진 개발은 기하학, 색상 이론, 전산학에 대한 학제적인 이해가 강력하게 요구되는 일이지만, 시각적인 결과가 나오는 프로젝트이기 때문에 그런 개발자들은 그것을 재미와 보상으로 받아들인다. 그 중 크리스털 스페이스는 유명한 오픈 소스 멀티플랫폼 게임 엔진이다.대한민국에서는 아직까지도 게임 엔진의 개발이나 마케팅보다는 해외의 게임 엔진을 구입하는 일이 많다. 잘 알려진 국산 게임 엔진으로는 《》와 《팡야》에 적용된 왕리얼 엔진과 드림익스큐션이 《워록》을 만들 때 개발한 진도 엔진과 넥슨산하의 데브캣 스튜디오에서 만든 게임에 사용되는 프라우드넷과 또한 데브캣 스튜디오에서 만든 마비노기의 기본 그래픽 처리 기법인 카툰 렌더링을 위한 플레이오네 엔진이 있고 가이블에서 판매용으로 개발한 지블렌더가 있다. 네트워크 엔진으로는 프라우드넷과 엑스커넥터가 있다.엔터브레인의 RPG 만들기 같은 소프트웨어는 최종 사용자를 위해 만들어진 게임 엔진이라고 할 수 있다. 이러한 게임 제작 소프트웨어는 쉽고 빠르지만 제한된 범위의 게임을 만들 수 있게 해준다.NScripter와 키리키리는 비주얼 노벨에 특화된 엔진으로, 간단한 스크립트 언어로 프로그램을 작성할 수 있는 환경을 제공한다. 한국어로 제공되는 비주얼 노벨 엔진으로는 브이냅과 바실리어트가 있다.