Godot (ゲームエンジン)

**Godot**（ゴドー）は、クロスプラットフォームかつオープンソース（MITライセンス）の2D/3Dゲームエンジンである。アルゼンチンのソフトウェア開発者であるJuan LinietskyとAriel Manzurが、ラテンアメリカの複数の企業向けにブエノスアイレスで開発し、2014年に一般公開された。開発環境（エディタ）はWindows、macOS、Linuxで動作し、開発対象となるプラットフォームはPC、スマートフォン、Webブラウザ (WebGL) と、多様なプラットフォーム上で動作するように設計されている。

## 概要
Godotは統合ゲーム開発環境として開発されているため、 CGアセットや音楽といった素材を除いてゲームをスクラッチで制作することを可能にしている。「シーン」による入れ子構造によって構成される独特のゲームデザインアーキテクチャを用いている。スクリプトからグラフィック素材に至るまで、ゲームの構成部品すべてが独立したファイルシステム（またはデータベース）に統合される。この管理システムはバージョン管理システムと併用することも可能である。

Godotは複数のプラットフォームへの出力をサポートしており、開発者はスマートフォン、Web、PC、ゲーム機など多くのプラットフォームに対応できる。テクスチャ圧縮や解像度をプラットフォーム毎に設定することも可能である。

現在サポートされているプラットフォームはWindows、macOS、Linux、iOS、Android、Webブラウザの他、W4 GamesがNintendo Switch、PlayStation 5、Xbox Series X/Sへのエクスポートライセンスを販売している。

### スクリプティング
ゲームの作成はPythonに近い独自のスクリプト言語である**GDScript**によって成される（C#を利用可能な版もある。またC/C++コードを呼び出すことも可能）。GDScriptはその基となったPythonよりも変数の厳格な記法が可能で、「シーン」を礎となすGodotのアーキテクチャに最適化されたものになっている。エンジン開発者は当初外部のプログラミング言語を検討していたが、結局高度な最適化とエディタへの統合が成されたカスタム言語を採用することになったと述べている。

Godotにはオートインデントやシンタックスハイライト、コード自動補完などの機能を有するスクリプトエディタが統合されている。またブレークポイントおよび プログラムステッピングを設定できるデバッガも有している。

一方で、GodotはVisual Studio Codeなどの外部エディタや統合開発環境と連携して開発を行うことも出来る。

また、バージョン3からはビジュアルスクリプトが利用可能になり、Unreal EngineのブループリントやBlender Game Engineのロジックエディターのような視覚的なプログラミングが可能である。しかし、次期メジャーアップデートであるGodot 4.0ではビジュアルスクリプトの廃止がなされることがアナウンスされた。

### 描画機能
Godot 4.xはVulkanを介した描画機能を提供する。さらにDirect 3D 12(Windows版Godot 4.3以降とXBox),Metal(Apple silicon版Mac版Godot 4.4以降,Intel Mac版Godotは今後もMetalへの対応予定はなくMoltenVK経由での動作である)が実験的にサポートされたもののGodot開発陣は今後もVulkanとOpenGLをデフォルトのレンダラーとする方針を示しておりDirect 3DやMetalの本格的なサポートには消極的である。またCompatibility（互換性）モードの形でOpenGL ES 3.0をサポートする。

エンジンは透明度、法線マッピング、スペキュラ、シャドウマップを用いた動的な影や、FXAA、ブルーム効果、被写界深度、HDR、ガンマ補正やフォグ等のフルスクリーンポストプロセッシング効果を実装している。シェーダーはマテリアルやポストプロセッシングはもちろん、2DCGレンダリングに対しても用いることができる。

Godotは独立した2Dグラフィックスエンジンを備えており、3Dのそれとは別に動かすことができる。2Dエンジンの機能の一例としてライティングやシェーディング、タイルセット、多重スクロール、2Dポリゴン、アニメーション、パーティクルに加えて物理演算エンジンを備えている。これら2Dと3D二つのグラフィックスエンジンを「ビューポートノード」を用いて併用・統合させて用いることが可能であり、エンジンの大きな特徴となっている。

レンダリングメソッドは *Forward+* (Clustered lighting) をPC向けに採用しており、このため depth pre-pass を持つ。これにより光源数の制約が緩くかつピクセルシェーダーの負荷も小さく抑えられている。また ver 4.3 の段階では deferred rendering を実装していない。

#### シェーダー
GodotはGLSLに似た独自シェーディング言語 *Godot shading language*（拡張子: `.gdshader`）およびビジュアルエディタを提供しており、これらを用いてシェーダーを制御できる。シェーダーはプログラム可能なステージにあたる *processor functions* を持ち、ここに各ステージの処理を記述する。Godot 4.2 では`vertex()` / `fragment()` / `light()` および `start()` / `process()` / `sky()` / `fog()` の7種類の processor functions が定義されている。またシェーダーはレンダリングの種類に応じたタイプ設定（*shader_type*）を持つ。タイプに応じてレンダリング方式・ビルトイン値・対応 processor functions が変更される。Godot 4.2 では `spatial` / `canvas_item` / `particles` / `sky` / `fog` の5種類のタイプが定義されている。更にGodotが内部でおこなうシェーダー処理の振る舞いを変更するレンダーモード設定（*render_mode*）をもつ。

##### 頂点シェーダー
頂点シェーダーの制御は `vertex()` processing function 内に記述される。Godot はデフォルトで暗示的なモデル・ビュー・投影変換をおこなっており、これはレンダーモードでオフ・変更できる（マニュアル実装できる）。

### その他の特徴
Godotはアニメーション作成用のGUIを備えており、スケルタルアニメーション、ブレンディング、アニメーションツリー、モーフィング、リアルタイムカットシーンを編集できる。これによって定義した任意のアニメーションで、ゲームエンティティを動かせる。3D物理エンジンにはJolt Physicsを実験的に採用している。Godotの標準機能としてのTerrain(3D)は今後も搭載しない方針がGodot開発陣から示されている。「Terrain(3D)はプラグインで」というGodot開発陣の方針である。

他にも以下のような機能を備えている:
* オクルージョンカリング
* レベル・オブ・ディテール
* パフォーマンス統計のグラフ化
* ライティング
* マルチスレッド処理
* プラグインシステム
* レンダリングターゲット
* 動画再生機能(Theora)
* 音声再生機能(Ogg Vorbis,MP3,WAV)
* パーティクルシステム
* テクスチャ入力/出力/圧縮パイプライン
* Navmeshのサポート
* GUI
* キーボード、マウス、ゲームパッドとタッチ操作のサポート
* OpenXRプラグインを使用したVRのサポート

## 歴史
Godotの開発がJuan 'reduz' LinietskyとAriel 'punto' Manzurによって開始されたのは2007年のことである。Linietskyはプレゼンテーションにおいて、"Godot"の名は「エンジンに新しい機能を追加し、完璧なものへと近づけたい」という永遠の叶わぬ願いをサミュエル・ベケットの劇「ゴドーを待ちながら」になぞらえて取られたということを述べている。2014年2月、GodotのソースコードがMITライセンスでGitHubに公開される。

2014年12月15日、Godotはライトマッピングやナビメッシュによる経路探索のサポートを追加し、シェーダー機能を強化したバージョン1.0をリリースし、これが初の安定版となった。次いで2015年5月21日にリリースされたバージョン1.1はコードエディター上でのオートコンプリートの改善、ビジュアルシェーダーエディター、OSのウィンドウ管理のためのAPI、ダークテーマを追加し、Blender用Colladaエクスポーターの改善がなされた。また、2Dエンジンの書き直しとそれに伴い2Dナビゲーションポリゴンのサポートが追加される。新しい2Dエンジンはシェーダーやマテリアル、独立したノード毎のZオーダー、光源やポリゴンを用いたシャドウ、法線マッピングの他、Distance-fieldフォントのサポートが改善された。

2015年11月4日、GodotはSoftware Freedom Conservancyのメンバー・プロジェクトとなる。

2016年2月23日、Godotは安定版としてバージョン2.0をリリースした。シーンのインスタンス化と継承、複数シーンの編集機能やデバッガー等が改善され、新しいファイルブラウザが追加された。更に2016年8月リリースのバージョン2.1では、アセットデータベースやプロファイル、プラグインAPIの追加がなされた。

2016年6月22日、 GodotはMozilla Open Source Support (MOSS) の“Mission Partners”アワードからWebSocket、 WebAssemblyとWebGL 2.0のサポートへの支援として20,000ドルの支援を受けた。

2018年1月29日、 Godotはバージョン3.0をリリースした。3DレンダリングとVRの互換性が向上し、C#（Mono）がサポートされた。ゲームの開発言語をC#のみに一本化したUnityと異なりGodotではGDScriptが引き続きゲームの開発に使用可能である。エクスポートについてWebGL 2.0がサポートされた。WebエクスポートについてWebGL 1.0をサポートするGodotはGodot 3.1以降のGodot 3.xが最後である。WebエクスポートについてGodot 4.0以降ではWebGL 1.0はサポートされずWebGL 2.0のみがサポートされる。glTF 2.0のインポートがサポートされた。Linux版Godotエディタで日本語入力が可能になった。また組み込み3D物理エンジンはBullet物理エンジンがデフォルトとなったが従来のGodot Physicsも選択可能である。デフォルトのBullet物理エンジンの衝突判定が渋い場合は従来のGodot Physicsを選択する。MP3の特許切れを受けGodot 3.3以降でMP3形式音声ファイル(.mp3)の再生がサポートされた。

2023年3月1日、Godotはバージョン4.0をリリースした。新しいVulkanレンダラーの追加、.NETのオープンソース化を受け、C#(Mono)が廃止されC#(.NET)へ一本化される。この一本化はC#についてMonoから(オープンソース化された).NETへ一本化されるという意味でありGDScriptは引き続き使用可能である。前述のように.NETがオープンソース化されたためC#(.NET)はLinux版Godot 4.xやMac版Godot 4.xでも使用可能である。WebエクスポートについてWebGL 1.0のサポートが廃止されWebGL 2.0のみのサポートとなる。SDFベースのグローバルイルミネーションの追加、物理エンジンの刷新(2.x時代・3.x時代のものとは異なる新しいバージョンのGodot Physics)GDScriptランタイムの性能向上、WebXRへの対応、Blenderのネイティブファイル形式である.blend形式ファイルのインポートのサポートなどが行われた。Linux版Godot 4.3以降でWaylandがサポートされた。

## 採用ゲーム一覧
OKAMスタジオのゲームの多くがGodotを用いて作られている。コミュニティ製のオープンソースのゲームに用いられることもある。

* *El Asombroso Show Zamba*
* *Dog Mendonça & Pizza Boy*
* *Anthill*
* *Running Nose*
* *Project Carnival*
* *[https://github.com/akien-mga/dynadungeons/ DynaDungeons]*
* *[https://kobuge-games.github.io/minilens/ Minilens]*
* *[https://github.com/w84death/Tanks-of-Freedom/ Tanks of Freedom]*
* *[[ソニック カラーズ|ソニック カラーズ アルティメット]]*
* *[https://store.steampowered.com/app/1963610/Road_to_Vostok/?l=japanese Road to Vostok]*

## 脚注

## 外部リンク
* 
*