2024年8月15日(現地時間)- 無料でオープンソースのゲームエンジン Godot 4.2 がリリースされました。
新機能ハイライト
今回のリリースでは、500 人を超える貢献者によって作成された4.2の2倍となる 3,500 件を超えるコミットにより、新しいノード タイプ、生活の質の向上、そしてバグ修正など多くの新機能と改善点が追加されました。
ハイライト
インタラクティブな音楽
新しいリソースAudioStreamInteractive
、AudioStreamPlaylist
、 AudioStreamSynchronized
により、複雑でレイヤー化された音楽やトランジションを作成できるようになりました。
これにより、ゲームのコンテクストに反応する独自のダイナミックミュージックシステムを構築できます。
2D物理補間
物理補間(Physics Interpolation)は、物理ティック(Physics Tick)とディスプレイのフレームレートを切り離すために使われる機能です。これは、最後の物理位置と現在の物理位置の間に追加のフレームを作成するもので、これによりジッターが減少し、全体的に滑らかな表示になります。
これは次のことに役立ちます:
- リフレッシュレートが高いディスプレイでは、ゲームが見やすくなります。
- モバイルゲームを作っている場合、低いティックレートの方が開発するハードウェアへの負担は少なく、通常は滑らかさを妥協することになりますが、物理補間により、その必要がなくなります。
また、こちらにあるように3D物理補間機能も既に開発中です。
ビジュアルシェーダーエディターの改良
ビジュアルシェーダーエディタは、より視覚的に魅力的で、大規模で複雑なシェーダーグラフの読みやすさを向上させるために、一から刷新されました。
ノードはカテゴリに基づいて色分けされ、接続の色も見やすく調整されました。ノードをクリックするとハイライトされるようになり、見やすくなっています。
さらに、新しいノードタイプとして、rerouteノードとframeノードの2つが追加されました。どちらもシェーダーコードに影響を与えるものではなく、ワークスペースを整理するのに役立ちます。
- rerouteノードは、ノード間の既存の接続に追加して、自由に移動させることができます。
- frameノードは、関連するノードを視覚的にまとめるために使用します。
TileMapLayerノード
TileMapレイヤーはTileMapLayerノードに変わりました。
このリリース以前は、TileMapにレイヤーを追加したい場合、インスペクタで追加する必要がありましたが、これを簡素化する新しいTileMapLayerノードが作成され、古いアプローチは完全に置き変わりました。より直感的に使えるようになっただけでなく、これはGodot Engineの設計思想に沿ったものとなっています。
既存のTileMapノードはエディタ上で直接ワンクリックでTileMapLayerノードに変換することができます。また、非推奨のノードタイプも当分の間サポートされます。
シングルスレッドWebエクスポート
Godot 3 では、シングルスレッドとマルチスレッドの両方の Web エクスポートをサポートしていました。Godot 4 をリリースしたとき、開発チームは、ブラウザの技術がすぐにマルチスレッドだけに集中できるほど向上すると想定していましたが、そのはならなかったので、シングルスレッドアプリケーションをエクスポートするオプションも追加されました。
そうすることで、ブラウザの互換性が向上し、ウェブプラットフォームへのゲームのアップロードがより簡単かつ迅速になります。また、これにより、複雑なサーバー側の設定や、ユーザーが以前経験したその他の制限の必要性がなくなりました。
一般的なマルチスレッドの改善
内部エンジンコンポーネントは、マルチスレッドのパフォーマンスを全面的に向上させるために作り直されました。
デッドロックの原因となるエッジケースの可能性を減らすことで、リソースのロードは全体的に信頼性が高まりました。この効果は、リソースや依存関係の複雑さに関係なく、ランタイム中にも顕著に現れています。
アニメーション
新しい SkeletonModifier3D ノード
このリリース以前は、スクリプトでボーンを動かすのは難しいことでしたが、新しい SkeletonModifier3D ノードにより、このプロセスが把握しやすくなり、全体的により柔軟になりました。
リターゲットがより簡単に
新しいスケルタルアニメーションのインポートオプションされました。これらの新しいインポートオプションは、特に .fbx フォーマットを使用したアニメーションセットのリターゲットをサポートします。
これにより、すべてのスケルトンを完全に使用できるように、レストポーズを設定したり、独自のテンプレートを使用したりできるようになりました。
QOLの改善
キーフレームの選択、コピー、ペースト、複製が可能になりました。
ナビゲーション
ナビゲーションメッシュをチャンクに分割
ナビゲーションメッシュをより管理しやすいチャンク(ひとまとまりになったデータ)に分割することができるようになりました。
大規模なゲームワールドのプロジェクトに取り組んでいる場合、これはメモリ割り当てに役立ち、その結果パフォーマンスも向上します。
以前は手動でメッシュを分割することは可能でしたが、チャンクが適切に整列していることを確認することは、決して容易なことではありませんでした。この整列は、ナビゲーション・マップ内の実行時の変更を効率的に処理するために必要なものです。
このリリースでは、NavigationPolygon
(2D) and NavigationMesh
(3D)の両リソースに、ベイキング境界とボーダーサイズのオフセットを定義する新しいプロパティが追加されましたが、この2つのプロパティを組み合わせて使用することで、ナビゲーション メッシュ チャンクを、隣接するチャンクと完全に整列したエッジで自動的にベイクできます。
障害物をナビゲーションメッシュにベイク
NavigationObstacle2D
と NavigationObstacle3D
に、ベイクに影響する 2 つの新しいプロパティが追加されました。
affect_navigation_mesh
は、ベイク時に障害物がナビゲーションメッシュに寄与するようにします。carve_navigation_mesh
はさらに、ベイク処理のオフセットによって形状が影響を受けないようにします。障害物は基本的にステンシルとして機能し、最終的なナビゲーション メッシュ サーフェスにカットインされます。その後のポストプロセスによっても影響を受けます。
実際には、これは障害物がその内部の他のソースジオメトリを破棄することを意味します。3Dでは、これは壁や屋根のようなオブジェクト内部の不要なナビゲーションメッシュを破棄するのに役立ちます。
ナビゲーションパスの簡素化
NavigationAgent
ノードの新しいパス簡略化オプションを使用すると、アルゴリズム的に重要度の低いパスポイントを削除できるようになりました。
これは、広いエリアでのエージェント移動に伴う問題を解決するのに役立ちます。また、クリティカルなパスポイントだけがターゲットとして残るので、ナビゲーションポイントを使って操縦するエージェントにもメリットがあります。
このアルゴリズムは、NavigationServer
からも公開されており、一般的な Vector2
/Vector3
配列を簡略化するために使用することができます。
エディタ
ネイティブ ufbx インポーター
インポーターが内蔵されたため、外部コンバーターをダウンロードする必要がなくなりました。ufbxのキャラクタやアニメーションをインポートする際の作業が軽減されます。
この業界標準をサポートすることで、3Dワークフローが改善されることが期待さ れています。また、このリリースでは、エンジンのこの領域における一般的な改善も行われています。
ファイルシステムが画面下部へ移動可能に
エディタレイアウトをさらにパーソナライズできるように、FileSystem ドッカーを画面下部に移動できるオプションが追加されました。
プロジェクトマネージャー: レイアウトとUXの改善
言語、インターフェースのテーマ、表示スケール、新しいネットワークモード、ディレクトリの命名規則などいくつかのエディタ設定にここから直接アクセスできます。
さらに、新しい Godot バージョンが到着したことを知らせるアップデートチェッカーが追加されました。自動的に機能させるには、ネットワークモードを有効にしてください。
2D
新しい Parallax2D ノード
視差(Parallax)とは、2Dゲームで使用される視覚効果で、背景要素を異なる速度で動かすことによってプレイヤーに奥行きのある錯覚を与えます。
すでにゲームに視差効果を追加することはできましたが、以前のParallax2Dの実装には制限がありました。例えば、次の動画で見られるようなエフェクトのオーバーレイは、以前は不可能でした。
移動ピクセルの再整列
サーフェスにトランスフォームをスナップする際、隙間ができたり、ピクセルの位置がずれたりすることがありました。これは、トランスフォーム内の以前の洗練されていない計算が原因でした。これはスナップ解除によってのみ回避できましたが、理想的な解決策ではありませんでした。
以下の動画で見ることができるように、この問題が修正されました。
レンダリング
3DシェーダのPremultipliedアルファブレンディング
Premultipliedアルファは、3Dマテリアルの新しいブレンドモードです。これにより、同じパーティクルが加算(additive blending)ブレンド(炎用)と混合(mix blending)ブレンド(煙用)のプロパティを持つことができるようになり、より見栄えの良い炎や花火を作成できるようになりました。
コンポジターエフェクトAPI
コンポジターエフェクトによって、ユーザーはGodotレンダリングパイプラインにフックして、カスタムレンダリングコードを追加することができるようになりました。これは高度な機能で、レンダリングがどのように機能するかについての深い知識が必要ですが、専門家がより効率的にさまざまなエフェクトを作成できるようになります。
新しいRenderingDeviceアーキテクチャ
この領域にあるいくつかの厄介なバグを消滅させるために、RenderingDevice、特にデバイス・コンテキストの管理方法がリファクタリングされました。
この結果、必要なときにいつでも新しいレンダリングデバイスを作成できるようになり、Compatibilityレンダラーでライトマップをベイクすることができるようになりました(現時点では、ローエンドデバイスやWebプラットフォームをターゲットにする場合に推奨)。
深度ベースのフォグが可能に
深度ベースのフォグでは、どこでフォグが始まり、いつ完全に不透明に遷移するかを決めることができます。
指数(exponential)フォグモードと比べると、リアルさに欠けるように見えるかもしれませんが、昔のホラーゲームにふさわしい雰囲気を作り出すことができます。
有向非巡回レンダリンググラフ
Forward+およびMobileレンダリングバックエンドを駆動するエンジンの一部であるRenderingDeviceが、有向非巡回グラフ(directed acyclic render graph)を導入することで改善されました。
新しいGPU API(Vulkan、D3D12、Metal)によって開発者がグラフィックカードに直接アクセスできるようになったため、すべてが正しく動作することを確認する負担がユーザーにのしかかるようになりました。acyclic graphは、グラフィックスAPIのAPIオーバーヘッドを最小限に抑えつつ、すべてが正しい順序で行われるようにするために、エンジンがコマンドを並べ替え、最適化することを可能にします。
この機能により、3Dシーンに変更を加えなくても、フレームレートが5%から15%向上します(GPUParticlesを多用する場合はそれ以上)
互換レンダラー機能
Compatibility ( 互換 ) レンダリングのバックエンドは、今回のリリース サイクルで多くの注目を集めました。
現在、この機能は完成したと考えられています。
- MSAA
- 解像度スケーリング(resolution scaling)
- グロー(Glow)
- 反射プローブ(ReflectionProbes)
- ライトマップGI(LightmapGI)
- 調整( Adjustments)
- 色補正(Color Correction)
ディスプレイ
Direct3D 12
WindowsではDirect3Dが推奨されているため、この新しいレンダリングドライバを追加することで、あらゆるMicrosoftプラットフォームとの互換性が向上します。さらに、最近WindowsがARMに対応したことで、今後はそれらのデバイスでGodot Engineを使用したり、それらのデバイス向けにゲームをエクスポートしたりできるようになります。
これまでは、Direct3D 12を使用するためには、Godotのカスタムバージョンを自分でビルドし、DXIL.dllライブラリをプロジェクトに含める必要がありました。これは、DXIL.dllが独自のファイルであるために複雑であり、Godot Engineにバンドルすることができなかったためです。先月、MicrosoftがDXILバリデータハッシュをオープンソース化したおかげで、この問題はなくなり、公式ビルドでDirect3D 12レンダリングドライバを直接サポートできるようになりました。
Linux/*BSDのWaylandサポート
Waylandは、LinuxやいくつかのBSD由来のオペレーティングシステムで使用できる最新のディスプレイサーバーのプロトコルです。これはX11ウィンドウシステムプロトコルとアーキテクチャを置き換えることを目的としています。Waylandのビルトインサポートにより、開発者はよりクリーンなAPIとリリースされる新機能にアクセスできるようになります。
この機能は現在実験的なもので、オプトインが必要です。
XR
2Dコンテンツのレンダリングの改善
レンズの歪みを補正するために、3D空間のビジュアルはXRコンポジターによって修正される必要があります。この余分な処理によって、2Dコンテンツは少しぼやけ、特にユーザーインターフェイスにある小さなテキストが読みにくくなることがあります。
UIを OpenXRCompositionLayer
ノードに追加することで、XRコンポジターにビューポートを直接レンダリングさせることができるようになり、2Dコンテンツがより鮮明になります。
標準化された手、体、顔のトラッキング
このリリースでは、XRハンドトラッキング用の新しい標準化されたシステムが導入さ れました。これにより、開発者は1種類のノード(とコード)を使用して、複数のXRエコシステムで動作するハンドトラッキングエクスペリエンスを作成することができます。これは現在、OpenXRとWebXRの両方でサポートされています。
それに加えて、同じ標準化された方法で構築されていますが、現在Meta Questヘッドセット上のOpenXRでのみサポートされている、ボディと顔のトラッキング用の新しいシステムが導入されました。
パフォーマンスと安定性の向上
エンジンの一部に行われた無数の改良により、XRアプリケーションはより安定し、パフォーマンスも向上しました。
ハイライトは以下の通りです:
- トラッキングデータのタイミングの改善
- MobileおよびForward+レンダラーでFoveatedレンダリングが調整されました。
- メガネ型ARとパススルー型ARが統一されました。
Meta XR シミュレーターサポート
XRゲーム開発の複雑さの一つは、特にヘッドセットがスタンドアロンVRユニット(コンピュータに接続されていない)の場合、ヘッドセット上でアプリケーションを繰り返しテストしなければならないことです。
Meta XR Simulatorは、XRアプリケーションをシミュレートされたQuestヘッドセットでテストするための無料ツールです。ダウンロードしてマシンにインストールした後、Godotエディタ内で直接動作するように設定することができます。シミュレータ自体は現在Linuxをサポートしていないので、この機能はWindowsとmacOSに限定されています。
Meta ヘッドセット:シーンの発見とアンカー
拡張現実は、周囲の世界と相互作用できるようにするための知識を必要とします。Metaは、シーンディスカバリー機能を通じてこのような情報を提供してくれます。これにより、周囲の世界のメッシュや、部屋の中の重要な要素の位置を得ることができます。
開発者は独自の空間アンカーを追加して、ヘッドセットがセッションを追跡し、記憶することができます。例えば、ゲームオブジェクトに恒久的な位置を割り当てたり、仮想スクリーンを1つの場所に固定したりするために使用できます。
理論的には、この機能は、将来同様の機能を実装するヘッドセットに再利用することができます。
ウェブ
ウェブオーディオ
ウェブプラットフォームでオーディオサンプリングがサポートされたことにより、APIを活用してシームレスに低レイテンシーかつ高品質なオーディオを提供することが可能になりました。
この追加は、 single-threaded Web ビルドをエクスポートする際に発生する、持続的なオーディオの問題に対処するために必要なものです。
スプラッシュスクリーンがウェブに登場
スプラッシュスクリーン機能は、他のすべてのプラットフォームでかなり確立されており、今回ウェブにも登場します。いつものように、スプラッシュスクリーンを設定するのは完全に任意であり、好みに応じてカスタマイズしてください。
さらに、ウェブのプログレスバーも作り直されました。なお、偽の時間推定は追加されていません。
C#
.csスクリプトを含むノードとリソースのインスペクタに、コードを変更したにもかかわらずプロジェクトを再構築していない場合に警告が表示されるようになりました。この変更以前は、この不一致を目に見える形で示すことはなく、なぜ更新されないのか混乱する原因となっていました。この警告が貴重な時間の節約に役立ちます。
過去に、C#プロジェクトを再構築した後にエディタの再起動が必要であるというユーザー報告があり、エディターが無効な状態のままになるバグが見つかりました。これが修正され、再構築プロセスが全体的にエラーになりにくくなりました。
ジェネリック(generic)クラスとメソッドは、多くのプログラミング言語の定番です。ジェネリックスは、パラメータの型の指定を実行時まで延期するため、コードの再利用性、型の安全性、効率性が高まります。
以前はジェネリクスを使うことができましたが、コードをリロードするときにエディターが例外をスローする可能性がありました。これは修正されました。
C# プロジェクトをコンパイルするには、エンジンに .sln ファイルと .csproj ファイルが必要です。エクスポート時にこれらのファイルが欠落していた場合、壊れた実行ファイルが作成されます。
このような事態を防ぐため、エディターではこれらのファイルなしでプロジェクトをエクスポートすることができなくなり、代わりにマッチングエラーが表示されるようになりました。
GDスクリプト
この新しいエクスポートオプションにより、GDScriptエクスポートのサイズを大幅に縮小することができるようになりました。これは、コードを必要最低限にまで削ぎ落とすことで機能します。技術用語では、これを Binary tokenization と呼びます。
副次的な効果として、これはコードを効果的に難読化します。それでもまだ逆コンパイルは可能ですが、これは少なくとも参入障壁を高め、コードがプレーンテキストで利用可能になるのを防ぎます。
if not my_node is Node3D:
と書く代わりに、if my_node is not Node3D:
とシンプルに書くことができるようになりました。
この小さな変更は、自然言語に近いため、コードを読みやすく保つのに役立つはずです。
組み込み関数が Callable
として使えるようになりました。この変更はメソッドとユーティリティ関数の両方に影響します。これらの関数を Callable と同じように呼び出そうとすると、内部で変換が行われ、動作するようになりました。
例えば、 print()
は次のように呼び出せるようになりました: print.callv(my_array)
これは、特にバリアディック(variadic)関数に便利です。
新しい @export_storage
アノテーションを使うと、シーンに隠れた値を保存することができます。一般的な使用例としては、アドオン情報をノードに保存し、インスペクタでユーザーが(誤って)編集するのを防ぐことができます。
@export_custom
を使って、ニーズに合った値をエクスポートできるようになりました。つまり、プレフィックスやサフィックス、カスタムヒントやヒント文字列、使用フラグなどを定義できます。
enum、subscripts、get_node()
. を含むいくつかのコンポーネントのオートコンプリート(auto-completion)の機能が改善されました。
この分野のリグレッションを検出するのは難しいので、これらの結果の品質を検証するために自動テストが始まりました。いつものように、間違ったオートコンプリート候補や見つからないオートコンプリート候補を見つけたらいつでも GitHub issuesを開いて手助けしてください。
循環依存性(cyclic dependenciesとも呼ばれる)は、2つのスクリプトが互いに呼び合うことで発生します。これはソフトウェア工学ではアンチパターンとみなされるかもしれませんが、実際にはよくあることです。GDScript では、このような循環依存に関連して表示されるいくつかの既知の問題を修正しました。これらの変更は、あなたのシーンをより弾力的で安定したものにします。
GDExtension
これは、GDExtensionを使ってゲームロジックをコーディングしている人にとっては特に興味深い機能です。
以前は、実行時にのみ使用される GDExtension クラスを登録したいときはいつでも、現在エディタにいるかどうかのチェック(is_editor_hint()
)でラップする必要がありました。
実行時クラスをどのように宣言するかは、使用するバインディングによって異なります。公式にメンテナンスされている godot-cpp では、モジュールの初期化で GDREGISTER_RUNTIME_CLASS(
を使用します。
仮想メソッド(仮想関数とも呼ばれる)は基底クラス内で宣言されますが、継承クラスでのみ実装されます。つまり、実際のメソッド呼び出しは実行時のオブジェクトタイプに依存します。
GDExtension クラスはすでに Godot に登録されている仮想メソッドを実装することができました。今回のリリースから、GDExtension クラスも独自の仮想メソッドを登録できるようになり、それにアタッチされたスクリプトが実装できるようになりました。
プラグイン開発者であれば、Godot が _ready()
, _process()
, _draw()
を公開するのと同じように、独自の仮想メソッドをユーザーに公開することができます。
この新機能により、GDExtension コードにドキュメントを追加できるようになりました。エディタに Godot Docs の Class Reference セクションのオフラインコピーが含まれているのと同じです。
ドキュメント
他のソフトウェアのドキュメントに倣って、Giscus に支えられた Godot Docs にコメントセクションが追加されました。 Giscus は、GitHub Discussions を利用してページにコメントできるようにした FOSS プロジェクトです。そのため、GitHub アカウントにログインする必要があります。
コメントは一般的な修正のためのものであり、個別の技術サポートではないことに注意してください。。プロジェクトに関する問題については、 代わりに公式フォーラムにアクセスしてください。
Godotでは、オンラインかつ常に最新の Godot Docsの一部が、オフラインのコピーとしてエディタで直接利用できます。ただし、その内容は使用しているGodot Engineのバージョンに関連しており、 Class Reference セクションに限定されています。
このドキュメントコピーにシンタックスハイライト機能が追加されました。さらに生活の質を向上させるために、コピーボタンも再現され、ワンクリックでコードブロックの内容をコピーできるようになりました。
Class Reference セクションに便利な新機能が追加されました。メソッド名の横にあるアイコンをクリックすることで、現在見ているメソッドへの直接リンクをコピーすることができます。
開発をサポート
次のリンクからエンジンの開発をサポートすることができます。
金銭的な支援以外にも、質の高いバグレポートの作成、コードベースへの貢献、ドキュメントの作成、チュートリアルの作成(ドキュメントや自分のスペースで)、さまざまなコミュニティプラットフォームで質問に答えたり役立つヒントを提供したりすることもサポートにつながります。
ダウンロード
Godot Engine 最新版
のダウンロードはこちらから
コメント