Godot 4.0 Beta について
2019年から継続的に開発されていた Godot 4.0 のベータ版がこの度リリースされました。ベータリリースは、これまでのリリースサイクルと同様、搭載された機能に満足していることを意味し、事前に議論し計画したものを除いて、これからリリース前に大きな新機能を追加する予定はありません。安定版リリースまでの間の目標は、バグを修正しパフォーマンスを最適化することで、現在の機能セットに磨きをかけ続けることとされています。
新機能ハイライト
コア
この2年間、エンジンのコアは、保守性、信頼性、パフォーマンスの面で次のレベルに持っていくために、多くの改良とリファクタリングが行われました。
内部的な変更は紹介しにくいのですが、詳しく知りたい方は、Godot のリード開発者 Juan Linietsky (reduz)氏 が、こちらのブログ記事(1, 2)でエンジンコアで行われた大きな改良を紹介しています。
これらの記事でカバーされていない重要な追加事項のひとつは、エンジンコンポーネントへのユニットテストの導入です。既存の統合テストは、コードのコンパイルや実行を妨げる重大な問題を明らかにすることはできますが、エンジンの安定性を保証することはほとんどできません。適切なユニットテストカバレッジ( unit test coverage)があれば、logical regressionや、エンジンのシステムを誤って壊してしまうような変更を、よりよく把握することができるはずです。
レンダリング
ここ数年の間に、Godot のレンダリングは全面的に見直されました。現在では、デフォルトで Vulkan をターゲットにしており、Direct3D 12 やその他のレンダリング API の将来のサポートを念頭に置いて作成されています。また、Vulkanやその他の最新のGPU APIをサポートしていない古いデバイスやローエンドデバイスのサポートを目的として、OpenGLベースの互換レンダラーも作成されています。
●Godotのグローバルイルミネーションシステムは、新リリースで一から作り直されました。GIProbeは、VoxelGIノードに置き換えられ、小規模および中規模の環境に適したリアルタイムソリューションとなっています。
また、Godotでは初めて、大規模なオープンワールドで使用できるGI技術、符号付き距離場グローバルイルミネーション(signed distance field global illumination – SDFGI)を搭載しています。SDFGI は、Juan氏 が作成し実装した新しい技術で、リアルタイムに動作します(より詳しい情報はこちらから)。ハイエンドデバイスで実行する際に、さらに品質を高めたい場合は、レンダリング貢献者のClay John(clayjohn)氏による Screen Space Indirect Lighting が利用できます。この機能は、SSAOと同様にスクリーン・スペース・サンプリングを使用することで、既存のGI技術にさらなるディテールを追加します。さらに、ライトマップのベイクは、GPU を使用して行われるようになり、処理が大幅に高速化されました。
●Volumetric fog は、時間的再投影(temporal reprojection)の使用により、リアルな外観と高速なパフォーマンスのバランスをとって Godot 4 で初めて実装されました。この効果は、グローバルに設定することも、FogVolumeノードで特定のエリアを定義することもできます。FogVolume ノードを操作するカスタム シェーダを記述することで、複雑な動的効果を作成することもできます。
●Godot 4.0 では、リアルタイムで更新されるダイナミックな空(反射を含む)を作成できるスカイシェーダ(sky shaders)が導入されています。詳しくは、こちらの紹介記事をご覧ください。
●Decalsは、ダイナミックエフェクトを追加する新しい方法のひとつで、PBR マテリアルに依存し、環境を装飾するために使用することもできます。
●GPU ベースのパーティクルでは、 attractors, collision, trails, sub-emitters and manual emissionがサポートされるようになりました。
●シェーダーメンテナーの Yuri Rubinsky (Chaosus) 氏は、シェーディング言語とビジュアルシェーダーをよりアクセスしやすく、多用途にするためにいくつかの改善をしました。詳しくはこちらから(1, 2)
シェーダに関するその他の追加機能には、均一配列(uniform arrays)とフラグメント・ツー・ライト(fragment-to-light)バリエーションのサポート、および構造体(structs)、プリプロセッサ マクロ(preprocessor macros)とシェーダ インクルード(shader includes)などの新しいシンタックス機能があります。
●物理ライトユニットの使用がサポートされました。これにより、ライトの強度に現実的な単位を使用したり、標準のカメラ設定(絞り、シャッタースピード、ISO など)を使用して最終シーンの明るさを制御することができます。物理的な光の単位はデフォルトではオフになっていますが、プロジェクト設定で有効にすることができます。
ゲームのパフォーマンスを犠牲にすることなく、これらの新機能の利点を利用することができ、オクルージョンカリング、自動メッシュLOD、可視範囲による手動HLODなど、いくつかの新しい最適化技術も自由に使えるようになっています。
●AMD の Fidelity FX Super Resolution 1.0 (FSR 1.0) のサポートが Je06jm 氏によって追加されました。FSR 2.1 のサポートは、将来のベータ版リリースで予定されています。
●2Dキャンバスレンダラーが更新され、複数のオーバーラップするCanvasItemの複雑なブレンドを可能にするCanvasグループをサポートしました(たとえば、多数のCanvasItemを重ねて、あたかも1つのアイテムであるかのように背景とブレンドすることが可能です)。
また、4.0 では、シャドウを伴う 2D 方向性ライトと、カスタム エフェクトに使用できる 2D SDF もサポートされています。詳しくは、Juan氏のブログ記事をご覧ください。
フィジックス と ナビゲーション
■Physics
Godot 4 では、Godot の内製 3D 物理エンジンである Godot Physics が大復活しました。長年にわたり、 Godot は Bullet エンジンに依存してきましたが、新しい機能を実装する際や 問題点を修正する際に、専用のソリューションがあればより柔軟に対応できます。
まず最初に、Godot Physicsの機能をBulletと同等にし、その過程で機能の性能と精度の向上が図られました。これには、新しいコリジョン形状、シリンダー(cylinder)、ハイトマップ(heightmap)の追加や、SoftBodyノードの再実装が含まれます。機能別の改良に加え、ブロードフェーズ最適化やマルチスレッド対応などの一般的な最適化技術も、2Dと3Dの両方の環境で実装されています。これらの改良点のいくつかは、最近の Godot 3 のリリースでも見ることができます。
次に、ユーザーサイドの改善が行われました。この機会に、物理ノードの大規模な再編成が行われ、多くの API やビヘイビアを改善して、よりユーザーフレンドリーな体験ができるようになりました(コリジョン レイヤー ロジック、RigidBodies など)。以前は特定のボディタイプにしかなかった多くのプロパティが、今ではすべての PhysicsBody ノードで利用できます。これにより、古いキネマティックボディに代わる新しいCharacterBodyノードが導入され、2Dと3Dでより高度な動作を実現し、柔軟に設定できる新しいプロパティで高度なキャラクターコントローラーをすぐに使用できるようになりました。
また、スクリプトもよりシンプルになりました。以前のバージョンのエンジンでは、移動、スライド、衝突に関連するプロパティは、手動で move_and_slide() に渡す必要がありました。現在は、シーンを使用して、ノード自体に設定することができ、必要な物理的インタラクションを持つためのコードを減らすことができます。
新しいリリースは新しい大きな機能だけではなく、ジッターや不正確な計算の原因となる様々な問題を修正するためにも、多大な努力が費やされました。貢献者であるCamille Mohr-Daurat (pouleyKetchoupp)氏, lawnjelly氏, Fabrice Cipolla (fabriceci)氏によるこれらの作業については、こちらで詳しく読むことができます。
■navigation
Godotの次のメジャーバージョンでは、新しいナビゲーションシステムも導入されます。以前のバージョンのナビゲーションは完全にノード・ベースであったため、使い勝手とパフォーマンスが制限されていました。Andrea Catania 氏によって始められ、smix8 氏 によって継続された作業のおかげで、Godot 4 ではナビゲーションにサーバーベースのアプローチを採用しています。
新しい NavigationServer は、完全に動的な環境とオンザフライのナビゲーションメッシュのベイクをサポート。リージョンをストリームすることができるので、広いオープンスペースにも適用できます。物理ボディを障害物としてマークして自動衝突回避を行うことが可能で、マルチスレッドのサポートにより、すべての動作が以前よりはるかに高速になりました。ナビゲーションリンク( Navigation links)もサポートされており、ジャンプポイントやテレポートなどを設定することができます。
Andrea氏が、この新しいシステムについてこちらの記事で例を使用して説明してくれています。
アニメーション
●3Dアニメーションは内部的に見直され、メモリ使用量を減らすための圧縮や、統合されたトランスフォームの代わりに個々の位置、回転、スケールのトラックを使用することができるようになりました。アニメーションの変更について詳しくはこちらの記事をご覧ください。
●Juan氏 はまた、アニメーションだけを含むシーンをインポートして、プロジェクトでのアニメーションの再利用を合理化するアニメーションライブラリも実装しました。詳細については、元の proposalを参照してください。
●K. S. Ernest Lee (fire)氏 は、Juan氏 が以前に行ったプルリクエストを復活させ、AnimationTree の遷移のためのステートマシンの条件として式を使用する機能を実装しました。これは、複雑なステートマシンを作成するための、より大きな柔軟性を提供します。
●Silc ‘Tokage’ Renew (Tokage)氏 は、アニメーションのバグを修正し、機能拡張や新機能の追加を行いました。その中には、新しいアニメーションリターゲットシステムがあります。アニメーションのリターゲットにより、ユーザーはインポート時にアニメーションを他のアセットにマッピングすることができ、複数のモデルが便利で使いやすい方法でアニメーションを共有できるようになりました。
スクリプティング
■GDScript
GDScript は現在の Godot ユーザーの間で最も使用されている言語であり、要求の多かった、待望の言語機能のいくつかを使って Godot 4 でのコーディング体験が改善されました。
第一級関数とラムダ、新しいプロパティ構文、await
と super
キーワード、そして型付き配列の恩恵を受けることができるようになりました。新しい組み込みアノテーションは言語をより明確にし、エクスポートされたプロパティのシンタックスを改善します。さらに、スクリプトが自動的にドキュメントを生成し、ビルトインヘルプやインスペクタドックのツールチップで学習することができるようになりました。
機能が増えているにもかかわらず、GDScript ランタイムは Godot 4 でより速く、より安定しています。これは、メインスクリプトメンテナである George Marques(vnen) 氏が言語バックエンドを完全に書き直したことにより実現されました。George 氏は、新しい言語機能 (1, 2)や、新しい言語パーサとランタイムの決定プロセス (1, 2, 3, 4)について、いくつかの詳細なレポートを提供してくれています。ドキュメント機能は、昨年のGoogle Summer of Codeで学生のThakee Nathees (ThakeeNathees)氏が実装しました。彼らのレポートはこちらで読むことができます。
■C#
.NET 6への移植がほぼ完了しました。比較的最近追加されたので、他の機能ほどアルファ版でテストされていません。テストは慎重に行い、問題が発生した場合は報告してください。
- .NET 6への移行により、ユーザーは最適化と新しいAPIをもたらす、より新しいフレームワークをターゲットにすることができるようになりました。.NET 6 では、プロジェクトはデフォルトで C# 10 を使用し、すべての機能を利用できます。
- リフレクションを廃止し、代わりにソースジェネレータに頼ってパフォーマンスを向上させ、これまで実行時に行っていた作業の多くがコンパイル時に移行されました。
- エクスポートされたプロパティにサポートされていない型を使用するといったゲーム実行時に失敗する要素を、プロジェクト構築時にエラーを発見して報告することができるようになりました。
- コアAPIで変更されたものはすべて.NET APIにも反映されます。最も顕著な変更の1つはスカラー値として64ビット型を使用することです。これは、
int
やfloat
を使用していた多くのAPIが、_Process
メソッドをはじめとするlong
やdouble
を使用するようになったことを意味します。 Variant
型も実装され、これまでSystem.Object
を使用していたVariantを使用するすべてのAPIで使用されるようになりました。これによって、値のボックス化を避けることができるなど、いくつかの改善がもたらされます。- もう一つ重要な変更点は、シグナルをC#のイベントとして宣言できるようになったことです。シグナルの宣言は、従来通り
[Signal]
属性を持つデリゲートで行いますが、デリゲート名の最後にEventHandler
サフィックスを付ける必要があり、イベントが生成され、シグナルへの接続と切断に使用することができるようになりました。シグナルの発信は、現在EmitSignal
メソッドで行っていますが、将来的には変更される可能性があります。
[Signal]
delegate void ValueChangedEventHandler(string newValue);
// The compiler generates the following event
public event ValueChangedEventHandler ValueChanged;
// Connect
ValueChanged += Foo;
// Disconnect
ValueChanged -= Foo;
// Emit
EmitSignal(SignalName.ValueChanged);
.NETモジュールにはまだやるべきことがあり、その一部はベータ版であっても互換性を壊す可能性があるので、バックアップを取り、更新時に.godotディレクトリをクリアして、クリーンなビルドを確保するようにしてください。
大きな変更点としては、C# で GDExtension を記述できるようになりました。GDExtension を使うと、C# クラスがエンジンに登録され、組み込みクラスと同じように動作するようになり、エンジン全体の C# ノードとリソースのサポートが改善されるはずです。
現在、Godot の .NET 版は、Godot 3 と同様、まだ別のビルドが必要ですが、エディタを統一することが計画されており、.NETが使用されるときに必要な追加コンポーネントをダウンロードする単一のエディタになる予定です。
新機能や今後の変更点については、今後の進捗報告でより深く掘り下げてくとのことです。
■GDExtension
Godot 4 では、GDExtension と呼ばれる新しいシステムが導入されました。GDExtension は、GDNative のエクステンションを作成したり、カスタムエンジンモジュールを書いたりする際の良い部分を取り入れた設計になっています。必要であれば、自分で作ったコードをエンジンに移植することができますし、逆に、エンジンのパーツを GDExtension ライブラリにすることで、エンジンの肥大化を抑えることができます。これらはすべて、エンジンを再コンパイルすることなく実現できます。
新しい GDExtension システムは Juan 氏と George氏 によって実装され、特に official godot-cpp C++ bindingsを移植する際に、多くの貢献者によってさらに改良されました。XR の愛好家であり Godot の貢献者である Bastiaan Olij (BastiaanOlij) 氏は、 GDExtensions を紹介するブログ記事を作成しています。
GUI と テキスト
●ローカライズは、より多くの人にゲームを体験してもらったり、ツールを効率的に使ってもらうために、おそらく最もわかりやすい方法です。ほとんどのソフトウェアは、ラテン文字やキリル文字を十分に処理できますが、アラビア文字や東アジア言語の表語文字になると、テキストレンダリングはすぐに厄介なことになります。
この問題に挑んだPāvels Nadtočajevs(bruvzg) 氏は、Godot のテキストレンダリングシステムを TextServer という傘の下に再実装しました。このバックエンドソリューションは、画面上のテキスト情報の表示に関連するすべての重労働をこなします。また、右から左へ読む言語が、合字や複雑な字体など、ユーザーの期待通りに動作することも可能です。改善された点については、Pāvels氏の詳細なレポート(1, 2, 3)をお読みください。
●ローカライゼーションの努力は、内蔵の擬似ローカライゼーションツールによって、さらに強化されます。Google Summer of Code 2021の学生であるAngad Kambli (angad-k)によって、プロジェクトのストレステストのために実際の翻訳に頼ることなく、GUIにおける発音区分や他のフォントの並べ替えの効果を簡単にテストすることが可能となりました。擬似ローカライズの機能については、こちらの学生のレポートで詳しく説明されています。
●合字やその他の OpenType 機能のサポートに加えて、フォント リソースには、Godot 3 との重要な違いが 2 つあります。まず、フォントには適切なマルチレベルフォールバックロジックが追加され、単一のフォントリソースでは不可能な、より広範囲の文字をカバーすることができるようになりました。第二に、フォントのサイズはフォント自体に縛られなくなったので、オンザフライで簡単に変更できるようになりました。実際、設定可能なフォントを持つすべてのコントロールノードは、テーマプロパティで個別に設定可能なフォントサイズを持つようになりました。
●デフォルトのプロジェクトテーマが近代化され、よりすっきりした外観になり、埋め込まれた画像も取り除かれました。
オーディオ
Ellen Poe (ellenhp)氏の Godot 4 での仕事によって、オーディオシステムに関する多くの未解決の問題が修正されました。
新しいリリースでは、既存の AudioServer をフルに活用し、オーディオ処理ロジックのかなりの部分( significant chunk of audio processing logic)がそこに移動されました。この変更は、様々なポッピングの問題、レースコンディション、そして全体的に貧弱なリサンプリングの動作に対処することを目的としています。またGodot のオーディオシステムをより柔軟で機能豊富なものにするための、将来の改良への道筋をつけるものでもあります。例えば、内蔵のポリフォニーサポート( built-in polyphony support,)により、1つのAudioStreamPlayerノードを使用して、同じ音を何度も繰り返すことができるようになります。これにより、銃声のような、より満足度の高いオーディオエフェクトが実現します。
マルチプレイヤー
Fabio Alessandrelli (Faless), Max Hilbrunner(mhilbrunner), Haoyu Qiu (timothyqiu), David Snopek(dsnopek), Jordan Schidlowsky(jordo), sarchar や他の多くの貢献者が、DNS、HTTP、TCP、UDP、ENet、Websocket など、Godot 4.0 のネットワークシステムの基礎とその信頼性についての改善に多くの時間と労力を費やし、DNS が複数の IP アドレスを正しく解決したり、接続がより安定し中断やハングアップが少なくなったり、大きなダウンロードが正常に動作したり、その他無数の小さな改良が行われました。これらの貢献者は、多くの修正を Godot 3 にもバックポートするために働きもしてくれています。
GDScript 2.0 の変更により、RPC は新しいアノテーションを使って設定することができるようになりました。Godot 4.0 には、完全に動作するヘッドレスモードも搭載されており、これはマルチプレイヤー・サーバーのホスティング、CI/CD、その他多くのものに最適です。また Godot は、信頼できるclient-serverモデルの代わりにmesh やpeer to peer networkingもサポートするようになりました。
そして、この大きく安定し改善された基盤の上に、高レベルの機能を構築することができるようになりました。
より詳しい情報はこちらから
インポート/エクスポート
●Godot 4には専用のインポートダイアログが用意されるようになり、インポートしたシーンやそのマテリアル、物理プロパティのあらゆる部分をプレビューしてカスタマイズすることができます。新しいプラグインインターフェースのおかげで、スクリプトを使用してさらに微調整することができます。
●etcpakライブラリと新しいマルチスレッドインポーターのおかげで、テクスチャのインポート速度が大幅に向上しました。
●glTF ファイルをランタイムにインポートできるようになり、このエンジンで作られたツールだけでなく、よりモジュール化された 3D プロジェクトを実現できるようになりました。
●ゲームのエクスポートダイアログに、新しいCPUアーキテクチャのオプションが追加されました。これは、複数の CPU アーキテクチャに対する第一級のビルドシステムサポートと一緒になっています。ビルドをコンパイルしておけば、Raspberry Pi、Microsoft Volterra、Surface Pro X、Pine Phone、VisionFive、ARM Chromebook、Asahi Linuxなどのデバイスをターゲットに、手動でそれほど手間をかけることなく、ビルドを実行できるようになりました。これは、Godotが持つ既存のx86 Windows & Linux、およびAndroid、iOS、macOSの様々なアーキテクチャへのサポートに加えられたものです。
エディターとユーザビリティ
●2DエディタのメンテナであるGilles Roudière(groud)氏は、TileSetsとTileMapsのワークフローを統合し、タイルの整理と配置、メタデータやアニメーションを提供する様々な方法を提供しました。詳細は、Gillesの数ヶ月に渡る開発の進捗に関する複数の詳細なレポート( 1, 2, 3, 4, 5)をご覧ください。
●Godot 4 のもうひとつの重要なツールは、アニメーション・エディターです。Juan氏 と Gilles氏、そして François Belair (Razoric480)氏 と Nathan Lovato (NathanLovato) 氏の貢献により、アニメーションエディタはブレンドシェープトラック、専用の位置、回転、スケールトラック、ベジェ曲線ワークフローをサポートするようになりました。
●エディタ全体の使い勝手も常に改善されており、Godot 4 の安定版リリースが近づくにつれ、いくつかの新しいトリックを目にすることができるようになると思います。
すでに試すことができる素晴らしいユーザビリティ向上策の1つが、今年の Godot Summer of Code で学生によって追加された新しいコマンドパレットです。このツールは、キーボードが得意なユーザが、多くのエディタ操作に素早くアクセスできるようにします。この機能については、Bhuvaneshwar (Bhu1-V) 氏のレポートを読んでください。
もう一つの大きな時間節約は、新しく改良されたスクリプトテンプレートで、ノードタイプごとにカスタマイズ(customized per node type)できるようになりました。エディタには、Fabrice氏提供する便利な物理ボディテンプレートも付属しています。
●エディタは、project.godotファイル内に、プロジェクトの編集に最後に使用したエディタのバージョンを保存します。これにより、プロジェクトがどのバージョンのGodotで作成されたかをすぐに確認することができます。さらに、異なるバージョンの Godot で作られたプロジェクトや、利用できないエンジンの機能を使って作られたプロジェクトを編集しようとすると、プロジェクト・マネージャは警告を表示します。
●すべてのプロジェクトにフォールバック環境を追加していた “default_env.tres” が削除され、エディター内でデフォルトの DirectionalLight3D と WorldEnvironment を使用できるようになりました。これにより、実行時にエディタ内のノードを手動で無効にすることを忘れずに、エディタでアセットをプレビューするためのライティングやエフェクトを簡単に調整することができます。詳しくは、こちらの記事をご覧ください。
●最後に、新しいリリースは、エディタの外観を更新しなければ、新しいとは感じられないということで、新しいプロジェクトテーマと同様に、新しいエディタテーマ(new editor theme もHugo氏によって作成されました。よりモダンな感じを与え、よりアクセスしやすくなるように配色が改善されています。また、エディタのテキストレンダリングや右から左へのサポートも改善され、より多くの地域の開発者にゲーム開発のチャンスを与えます。
Webプラットフォーム
ウェブプラットフォームの他の多くの改良点の中で、Fabio氏は、HTML5エクスポートのリモートプロファイリング(remote profiling of HTML5 exports)を可能にするために必要なツールを追加しました。つまり、デスクトップ・プラットフォームと同じように、ウェブ・エクスポートでもデバッガやプロファイラを実行できるようになり、ウェブベースのゲームをより簡単に改良・最適化できるようになりました。
バグレポート
テスターとして、4.0 beta 1 で問題が発生した場合、バグレポートをオープンすることが推奨されています。まず、GitHub の検索機能を使って、関連するキーワードで既存の課題を確認し、あなたが経験したバグが既に知られていないことを確認してください。
他のメジャーリリースと同様に、互換性を損なう変更が行われる予定ですが、プロジェクトの移行経路を提供するよう努めています。既知の移行経路や回避策がないままリグレッションが発生した場合は、遠慮なく報告してほしいとのことです。
プロジェクトを支援
Godotは、可能な限り最高のフリーでオープンソースのゲーム技術を世界に提供することを目的とした非営利団体です。寄付や企業からの助成金は、100%エンジンに携わる開発者への支払いに使用されており、Godotを持続的なペースで開発できるようにするための重要な役割を果たしています。
もしGodotを使い、気に入って成熟した高品質のフリーでオープンソースのゲームエンジンのためにサポートしたい場合は、こちらから寄付をすることができます。
ダウンロード
Godot 4 のベータ版のダウンロードは、次のリポジトリで直接見つけることができます。
- 標準ビルド(GDScript、GDExtension)。
- .NET 6 ビルド(C#、GDScript、GDExtension)。
コメント