Godot
1. 개요
1. 개요
갓 엔진은 무료 오픈 소스 2D 및 3D 게임 엔진이다. 후안 리니에츠키와 아리엘 만주르가 공동 창립했으며, 2014년에 최초로 공개되었다. 이 엔진은 게임 개발을 주된 용도로 하며, 시뮬레이션 개발이나 다양한 인터랙티브 콘텐츠 제작에도 활용된다.
엔진의 공식 스크립트 언어는 GDScript이며, C#과 C++를 통한 개발도 지원한다. 과거에는 VisualScript라는 시각적 스크립팅 언어도 제공되었으나, 이후 버전에서는 비권장되었다. 모든 소스 코드는 MIT 라이선스 하에 공개되어 있어, 상업적 이용을 포함한 자유로운 사용, 수정, 배포가 가능하다.
2. 역사
2. 역사
고도 엔진의 개발은 2007년 아르헨티나의 소프트웨어 개발자 후안 리니에츠키와 아리엘 만주르가 시작했다. 당시 그들은 상용 게임 엔진의 폐쇄성과 높은 비용에 불만을 느끼고, 자신들의 게임 개발 경험을 바탕으로 오픈 소스 엔진을 만들기로 결심했다. 초기 버전은 내부 도구로 사용되었으며, 2014년에야 최초의 공개 알파 버전을 MIT 라이선스로 출시했다. 이 결정은 누구나 자유롭게 사용하고 수정할 수 있는 접근성을 보장하는 중요한 전환점이었다.
출시 이후 고도는 지속적인 업데이트를 통해 성장했다. 2018년에 출시된 고도 3.0은 안정적인 3D 렌더링 지원, 물리 엔진 개선, C# 언어 공식 지원 추가 등 주요 기능을 도입하며 본격적인 3D 게임 개발이 가능한 엔진으로 자리매김했다. 특히 이 버전부터는 스팀과 같은 주요 플랫폼에 공식적으로 등록되어 더 많은 개발자들에게 노출되기 시작했다.
2023년에 공개된 고도 4.0은 또 다른 도약을 의미했다. 이 버전은 구식이 된 OpenGL을 대체하여 Vulkan 렌더링 API를 기본으로 채택함으로써 그래픽 성능을 크게 향상시켰다. 또한 물리 시뮬레이션을 위한 새로운 기술 스택 도입, 향상된 실시간 조명 및 그림자 시스템, 그리고 GDScript의 성능 개선이 이루어졌다. 한편, 시각적 스크립팅 도구인 VisualScript는 유지보수의 어려움을 이유로 비권장 상태가 되었다.
고도의 역사는 소규모 오픈 소스 프로젝트가 전 세계 개발자 커뮤니티의 지지를 받아 주요 게임 엔진 시장에서 유니티와 언리얼 엔진에 대한 강력한 대안으로 성장한 과정이다. 지속적인 개발과 커뮤니티 중심의 운영 방침은 그 성장의 핵심 동력이었다.
3. 특징
3. 특징
3.1. 오픈 소스
3.1. 오픈 소스
고도 엔진은 MIT 라이선스 하에 배포되는 완전한 오픈 소스 소프트웨어이다. 이는 소스 코드가 공개되어 있어 누구나 자유롭게 엔진을 사용, 수정, 배포할 수 있으며, 상업적 이용에도 제한이 없음을 의미한다. 이러한 라이선스 정책은 고도의 가장 큰 장점 중 하나로, 개발자들이 라이선스 비용에 대한 부담 없이 게임을 개발하고 출시할 수 있게 한다.
오픈 소스 모델은 고도의 개발 방식에도 직접적인 영향을 미친다. 엔진의 핵심 개발은 후안 리니에츠키와 아리엘 만주르가 주도하지만, 전 세계의 개발자들이 깃허브를 통해 소스 코드에 기여할 수 있다. 버그 수정, 새로운 기능 추가, 문서화 개선 등 다양한 분야에서 활발한 커뮤니티 기여가 이루어지며, 이는 엔진의 지속적인 발전과 빠른 문제 해결을 가능하게 한다.
이러한 접근성은 고도를 유니티나 언리얼 엔진과 같은 주요 상용 엔진에 대한 강력한 대안으로 자리 잡게 했다. 특히 독립 개발자, 학생, 소규모 스튜디오에게 저비용 고효율의 개발 도구를 제공한다. 엔진의 모든 기능과 에디터가 무료로 제공되며, 사용자가 만든 게임에서 발생하는 수익에 대해 엔진 개발사가 로열티를 요구하지 않는다는 점이 큰 매력으로 작용한다.
3.2. 노드 기반 구조
3.2. 노드 기반 구조
고도 엔진의 핵심 설계 철학은 노드 기반 구조에 있다. 모든 게임 오브젝트는 노드라는 기본 단위로 구성되며, 이러한 노드들을 부모-자식 관계로 트리 구조로 배치하여 복잡한 씬을 만드는 방식이다. 이는 마치 레고 블록을 조립하거나 파일 시스템의 폴더 계층을 구성하는 것과 유사한 직관적인 접근법을 제공한다.
노드는 각각 고유한 기능을 담당하는데, 예를 들어 스프라이트를 표시하는 노드, 사운드를 재생하는 노드, 충돌 영역을 정의하는 노드, 사용자 입력을 처리하는 노드 등이 있다. 개발자는 에디터 내에서 이러한 노드들을 드래그 앤 드롭으로 씬 트리에 추가하고 계층적으로 배치함으로써 게임 객체의 논리와 시각적 표현을 동시에 구성할 수 있다. 이 구조는 특히 비프로그래머에게 시각적이고 접근성이 높은 워크플로를 가능하게 한다.
노드 기반 구조의 가장 큰 장점은 재사용성과 모듈화에 있다. 특정 기능을 가진 노드들의 조합(예: 캐릭터, 적, 아이템)을 하나의 독립적인 씬으로 저장한 후, 다른 씬에서 인스턴스로 반복해서 사용할 수 있다. 이는 프리팹 시스템과 유사한 개념으로, 동일한 객체를 여러 곳에 배치하거나 복잡한 객체를 쉽게 관리할 수 있게 해준다. 또한, 노드의 계층 구조는 상속과 유사하게 동작하여 자식 노드가 부모 노드의 변환(위치, 회전, 크기)과 일부 속성을 물려받는다.
이러한 설계는 객체 지향 설계 원칙을 시각적 계층 구조로 구현한 것으로, 게임의 모든 요소를 노드라는 동일한 추상화 단위로 관리함으로써 일관성과 유연성을 보장한다. 결과적으로 고도 엔진은 비교적 낮은 진입 장벽을 가지면서도 복잡한 게임 개발 프로젝트를 체계적으로 구성할 수 있는 토대를 제공한다.
3.3. GDScript
3.3. GDScript
GDScript는 Godot 엔진의 공식 스크립팅 언어이다. Python과 유사한 문법을 채택하여 배우기 쉽고 사용하기 편리하도록 설계되었다. 특히 Godot의 노드 기반 구조와 씬 시스템과 긴밀하게 통합되어 있어, 게임 오브젝트의 행동을 빠르게 정의하고 프로토타이핑하는 데 최적화되어 있다. 이 언어는 동적 타입을 지원하며, 엔진의 다양한 기능에 직접 접근할 수 있는 풍부한 내장 API를 제공한다.
GDScript는 성능과 생산성 사이의 균형을 중시한다. 컴파일된 C++이나 C#에 비해 실행 속도는 느릴 수 있지만, 대부분의 게임 로직 구현에는 충분한 성능을 보인다. Godot 에디터 내에서 통합 개발 환경(IDE)을 제공하며, 코드 완성, 실시간 디버깅, 즉각적인 스크립트 재로딩 등의 기능을 지원하여 개발 워크플로우를 매우 효율적으로 만든다.
Godot는 GDScript 외에도 C#과 C++을 공식적으로 지원하여, 고성능이 요구되는 모듈 개발이나 기존 코드베이스 통합에 유연성을 제공한다. 그러나 엔진의 핵심 설계 철학과 가장 자연스럽게 조화를 이루는 언어는 GDScript로, 공식 문서와 커뮤니티 자료의 대부분이 이 언어를 기준으로 작성되어 있다. 따라서 Godot를 처음 접하는 개발자에게는 GDScript를 우선적으로 학습하는 것이 일반적이다.
3.4. 다중 플랫폼 지원
3.4. 다중 플랫폼 지원
Godot 엔진은 한 번의 개발로 다양한 플랫폼에 게임을 배포할 수 있는 강력한 다중 플랫폼 지원 기능을 제공한다. 엔진 자체가 윈도우, macOS, 리눅스에서 동작하는 통합 개발 환경을 포함하고 있으며, 이를 통해 개발된 프로젝트는 추가적인 라이선스 비용 없이 수많은 대상 플랫폼으로 내보내기(Export)가 가능하다.
주요 지원 대상에는 데스크톱 환경 외에도 모바일 플랫폼인 안드로이드와 iOS가 포함된다. 또한 웹 브라우저 기반 게임을 위한 HTML5 내보내기, 그리고 마이크로소프트의 유니버설 윈도우 플랫폼과 주요 게임 콘솔 플랫폼으로의 배포도 공식적으로 지원된다. 이처럼 광범위한 지원은 독립 개발자와 소규모 스튜디오가 시장 접근성을 크게 높이는 데 기여한다.
내보내기 시스템은 프로젝트 설정에서 각 플랫폼별로 세부 옵션을 구성할 수 있도록 설계되어 있다. 플랫폼별로 필요한 SDK나 도구를 설정하면, Godot 에디터에서 직접 클릭 몇 번으로 해당 플랫폼에 맞는 실행 파일이나 패키지를 생성할 수 있어 워크플로가 매우 간소화된다. 이러한 접근성은 엔진의 핵심 철학 중 하나인 개발자 친화성을 잘 보여준다.
4. 주요 구성 요소
4. 주요 구성 요소
4.1. 씬 시스템
4.1. 씬 시스템
씬 시스템은 Godot 엔진의 핵심 설계 철학이자 작업 흐름의 중심을 이루는 개념이다. 이 시스템은 게임의 모든 구성 요소를 계층적으로 조직화된 노드의 집합으로 구성하며, 이러한 노드들이 모여 하나의 완전한 기능을 가진 독립적인 단위인 씬을 형성한다. 개발자는 작은 단위의 씬(예: 플레이어 캐릭터, 적, 아이템)을 먼저 만들고, 이를 마치 레고 블록을 조립하듯이 더 큰 씬(예: 게임 레벨, UI 화면) 안에 인스턴스로 배치하여 전체 프로젝트를 구축한다. 이 방식은 코드와 자원의 재사용성을 극대화하고, 복잡한 게임 객체의 구조를 직관적으로 이해하고 관리할 수 있게 해준다.
씬 시스템의 강력한 특징 중 하나는 씬 인스턴싱이다. 하나의 씬 파일(예: Player.tscn)을 만들어 두면, 게임 내의 여러 위치나 다른 씬에서 동일한 플레이어 객체를 반복적으로 생성하여 사용할 수 있다. 원본 씬을 수정하면 모든 인스턴스에 변경 사항이 자동으로 반영되므로, 일관성 유지와 대규모 프로젝트의 유지보수가 매우 용이해진다. 이는 프리팹 시스템과 유사한 개념으로, 게임 개발 파이프라인에서 효율성을 크게 높인다.
또한, Godot의 모든 씬은 명확한 부모-자식 관계를 기반으로 한다. 자식 노드는 부모 노드의 변환(위치, 회전, 크기)을 상속받아 움직이며, 부모 노드가 제거되면 모든 자식 노드도 함께 제거된다. 이 계층 구조는 게임 객체 간의 논리적 연결(예: 캐릭터의 손에 쥔 검, 자동차에 장착된 바퀴)을 자연스럽게 표현한다. 이러한 노드 기반 구조 덕분에 시각적 스크립팅이나 코드 작성을 통하지 않고도 에디터 내에서 게임 객체의 구조와 동작을 상당 부분 설계하고 프로토타이핑할 수 있다.
4.2. 에디터
4.2. 에디터
고도트 엔진은 통합 개발 환경인 에디터를 내장하고 있다. 이 에디터는 엔진 자체와 함께 제공되며 별도의 설치나 설정 없이 게임 개발에 필요한 모든 작업을 수행할 수 있는 환경을 제공한다. 에디터는 시각적 스크립팅부터 코드 편집, 애니메이션 제작, 사용자 인터페이스 설계, 씬 편집에 이르기까지 포괄적인 기능을 하나의 창에서 통합하여 제공한다. 이러한 통합성은 개발 워크플로우를 단순화하고 생산성을 높이는 데 기여한다.
에디터의 사용자 인터페이스는 사용자 정의가 매우 자유롭다. 도킹 가능한 패널과 창의 레이아웃을 개발자의 선호에 따라 자유롭게 조정하고 저장할 수 있다. 또한 스크립트 언어 편집기, 디버거, 프로파일러 등 핵심 도구들이 내장되어 있어 외부 도구로 전환하는 번거로움을 줄여준다. 에디터 자체도 고도트 엔진으로 만들어져 있어, 필요에 따라 에디터의 기능을 확장하거나 수정하는 것도 가능하다.
에디터는 실시간 편집과 실행을 지원하는 것이 큰 특징이다. 게임을 실행 중인 상태에서도 씬 내 객체의 변수 값을 변경하거나 스크립트를 수정할 수 있으며, 이러한 변경 사항이 즉시 실행 중인 게임에 반영된다. 이 기능은 프로토타이핑과 반복적인 디버깅 과정을 매우 빠르게 만들어 준다. 또한 2D와 3D 작업을 위한 전용 편집 모드를 제공하여 각 차원에 최적화된 도구 세트를 활용할 수 있다.
고도트 에디터는 다국어를 지원하며, 리눅스, macOS, 윈도우를 포함한 여러 운영 체제에서 동일하게 실행된다. 에디터에서 제작한 게임은 별도의 빌드 과정을 거쳐 다양한 타겟 플랫폼으로 내보낼 수 있다. 에디터의 설계 철학은 접근성과 효율성에 중점을 두고 있어, 초보자부터 전문가까지 폭넓은 개발자 층이 사용할 수 있도록 한다.
4.3. 물리 엔진
4.3. 물리 엔진
Godot 엔진은 2D와 3D 게임 개발을 위한 통합된 물리 시뮬레이션 시스템을 제공한다. 2D 물리에는 Box2D 라이브러리를 기반으로 한 전용 물리 엔진이 사용되며, 3D 물리에는 Bullet 물리 라이브러리가 통합되어 있다. 이를 통해 개발자는 중력, 충돌, 관성, 힘과 같은 현실적인 물리적 상호작용을 비교적 쉽게 구현할 수 있다.
물리 시뮬레이션은 주로 물리 바디 노드를 통해 제어된다. 정적 바디, 동적 바디, 키네마틱 바디, 리지드 바디 등 다양한 유형의 바디가 존재하며, 각각 고정된 장애물, 물리 법칙을 따르는 오브젝트, 코드로 직접 제어되는 오브젝트 등의 역할을 수행한다. 이러한 바디에 콜리전 셰이프를 부착하여 오브젝트의 실제 충돌 영역을 정의한다.
엔진은 충돌 감지와 충돌 반응을 자동으로 처리하며, 개발자는 시그널을 연결하여 충돌이 발생했을 때의 로직을 작성할 수 있다. 또한 연속 충돌 감지 기능을 지원하여 고속으로 이동하는 오브젝트의 터널링 현상을 방지한다. 물리 엔진의 매개변수, 예를 들어 중력의 방향과 세기 또는 물리 프레임률은 프로젝트 설정에서 전역적으로 조정 가능하다.
고급 사용을 위해 직접적인 물리 상태 쿼리, 레이캐스팅, 사용자 정의 충돌 레이어 관리 등의 기능도 제공된다. 이를 통해 복잡한 게임플레이 메커니크나 시뮬레이션을 구축하는 것이 가능하다. Godot의 물리 시스템은 게임 로직과의 통합이 용이하도록 설계되어, 프로그래밍 경험이 적은 개발자도 접근할 수 있으면서도 전문적인 요구사항을 충족시킬 수 있는 유연성을 갖추고 있다.
4.4. 렌더링 파이프라인
4.4. 렌더링 파이프라인
Godot 엔진의 렌더링 파이프라인은 게임의 시각적 요소를 화면에 그리는 과정을 담당하는 핵심 시스템이다. 이 파이프라인은 사용자가 선택할 수 있는 여러 렌더러를 제공하며, 각각은 서로 다른 그래픽스 API를 활용하여 최적의 성능과 시각적 품질을 제공하는 것을 목표로 한다.
주요 렌더러로는 Vulkan API를 기반으로 한 현대적인 Forward+ 및 클러스터 기반 디퍼드 렌더링을 지원하는 렌더러가 있다. 이는 고사양의 3D 그래픽스와 복잡한 조명 효과를 구현하는 데 적합하다. 반면, 호환성을 중시하는 OpenGL ES 3.0 렌더러도 제공되어 구형 하드웨어나 모바일 장치에서도 안정적으로 실행될 수 있도록 한다. 2D 게임 개발을 위해서는 전용의 고효율 2D 렌더러가 별도로 마련되어 있다.
렌더링 파이프라인의 구성은 매우 유연하여, 개발자는 씬의 요구사항에 맞게 사용자 정의 셰이더를 작성하거나, 후처리 효과를 추가할 수 있다. 엔진 내장 물리 기반 렌더링(PBR) 머티리얼 시스템은 현실적인 표면 반응을 구현하는 데 표준으로 사용된다. 이러한 모듈식 설계는 다양한 플랫폼과 그래픽스 타겟에 맞게 엔진을 조정할 수 있는 자유도를 개발자에게 제공한다.
5. 사용 사례
5. 사용 사례
Godot 엔진은 다양한 규모와 장르의 게임 개발에 널리 사용된다. 특히 독립 개발자와 소규모 스튜디오 사이에서 인기가 높은데, 이는 무료 오픈 소스라는 점과 비교적 낮은 진입 장벽이 주요한 이유이다. 2D 게임 개발에 강점을 보이며, 플랫폼 게임, 롤플레잉 게임, 퍼즐 게임 등 다양한 2D 장르의 제작에 적합하다. 또한 점차 발전하는 3D 기능을 통해 액션 게임, 어드벤처 게임 등의 3D 프로젝트 제작에도 활용되고 있다.
게임 외에도 시뮬레이션 개발이나 인터랙티브 콘텐츠 제작에 적용되는 사례가 늘고 있다. 예를 들어, 교육용 소프트웨어, 과학 시각화 도구, 건축 시각화, 혹은 프로토타이핑 도구로 사용될 수 있다. 엔진 내장된 스크립팅 언어인 GDScript는 배우기 쉬운 문법을 가지고 있어 프로그래밍 초보자도 비교적 빠르게 인터페이스를 갖춘 애플리케이션을 만들 수 있다.
주목할 만한 성공 사례로는 상업적으로 성공한 인디 게임들이 다수 있다. *Bastion*과 *Transistor*로 유명한 슈퍼자이언트 게임즈는 프로토타입 제작에 Godot을 사용한 바 있으며, *Cruelty Squad*나 *Dome Keeper*와 같은 독립 게임들은 Godot으로 완전히 개발되어 출시되었다. 이러한 사례들은 Godot이 상업 게임 제작에도 충분히 견고한 기반을 제공할 수 있음을 입증한다.
커뮤니티와 교육 분야에서도 Godot의 역할이 크다. 무료 라이선스 덕분에 학교나 코딩 부트캠프에서 게임 개발을 가르치는 도구로 채택하기에 이상적이다. 전 세계의 개발자들이 GitHub 등을 통해 엔진 기능 개선에 기여하거나, 무료 튜토리얼과 에셋 라이브러리를 공유하며 생태계를 풍부하게 만드는 중이다.
6. 장단점
6. 장단점
Godot의 가장 큰 장점은 완전한 무료 오픈 소스라는 점이다. MIT 라이선스로 배포되어 상업적 이용에 제약이 없으며, 엔진 소스 코드를 자유롭게 수정하고 배포할 수 있다. 이는 특히 중소 규모의 인디 게임 개발자나 예산이 제한된 교육 현장에서 큰 매력으로 작용한다. 또한, 공식적으로 지원하는 GDScript는 파이썬과 유사한 문법으로 배우기 쉬워 프로그래밍 초보자도 접근성이 높다. 엔진 자체가 가볍고 실행 파일 크기가 작아 빠른 프로토타이핑에 적합하며, 2D 게임 개발에 특화된 강력한 기능을 제공한다.
단점으로는 3D 게임 개발 분야에서 유니티나 언리얼 엔진 같은 상용 엔진에 비해 기능과 성능, 생태계 측면에서 아직 뒤처지는 부분이 있다. 고품질의 3D 그래픽스를 구현하기 위한 고급 렌더링 기능이나 물리 엔진의 정확도와 안정성에서 차이가 있을 수 있다. 또한, 시장 점유율이 낮아 상용 엔진에 비해 학습 자료, 에셋 스토어의 콘텐츠, 전문적인 기술 지원의 양이 상대적으로 부족할 수 있다. C# 지원이 공식적으로 포함되었지만, 주력 언어인 GDScript와의 통합이나 네이티브 C++ 모듈 개발의 복잡성은 진입 장벽이 될 수 있다.
전반적으로 Godot는 가볍고 유연한 구조, 진입 장벽이 낮은 공식 스크립트 언어를 바탕으로 인디 게임 및 2D 게임 개발에 매우 강력한 선택지이다. 그러나 대규모 3A 게임이나 복잡한 3D 시뮬레이션 프로젝트를 위해서는 상용 엔진 대비 제한적인 기능과 생태계를 고려해야 한다.
