無料でオープンソースのゲームエンジン Godot 4.3 がリリース!

CGソフト

2024年8月15日(現地時間)- 無料でオープンソースのゲームエンジン Godot 4.2 がリリースされました。

  1. 新機能ハイライト
    1. ハイライト
      1. インタラクティブな音楽
      2. 2D物理補間
      3. ビジュアルシェーダーエディターの改良
      4. TileMapLayerノード
      5. シングルスレッドWebエクスポート
      6. 一般的なマルチスレッドの改善
    2. アニメーション
      1. 新しい SkeletonModifier3D ノード
      2. リターゲットがより簡単に
      3. QOLの改善
    3. ナビゲーション
      1. ナビゲーションメッシュをチャンクに分割
      2. 障害物をナビゲーションメッシュにベイク
      3. ナビゲーションパスの簡素化
    4. エディタ
      1. ネイティブ ufbx インポーター
      2. ファイルシステムが画面下部へ移動可能に
      3. プロジェクトマネージャー: レイアウトとUXの改善
    5. 2D
      1. 新しい Parallax2D ノード
      2. 移動ピクセルの再整列
    6. レンダリング
      1. 3DシェーダのPremultipliedアルファブレンディング
      2. コンポジターエフェクトAPI
      3. 新しいRenderingDeviceアーキテクチャ
      4. 深度ベースのフォグが可能に
      5. 有向非巡回レンダリンググラフ
      6. 互換レンダラー機能
    7. ディスプレイ
      1. Direct3D 12
      2. Linux/*BSDのWaylandサポート
    8. XR
      1. 2Dコンテンツのレンダリングの改善
      2. 標準化された手、体、顔のトラッキング
      3. パフォーマンスと安定性の向上
      4. Meta XR シミュレーターサポート
      5. Meta ヘッドセット:シーンの発見とアンカー
    9. ウェブ
      1. ウェブオーディオ
      2. スプラッシュスクリーンがウェブに登場
    10. C#
    11. GDスクリプト
    12.  GDExtension
    13. ドキュメント
  2. 開発をサポート
  3. ダウンロード

新機能ハイライト

今回のリリースでは、500 人を超える貢献者によって作成された4.2の2倍となる 3,500 件を超えるコミットにより、新しいノード タイプ、生活の質の向上、そしてバグ修正など多くの新機能と改善点が追加されました。

ハイライト

インタラクティブな音楽

新しいリソースAudioStreamInteractiveAudioStreamPlaylist、 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 ノードにより、このプロセスが把握しやすくなり、全体的により柔軟になりました。

重要: これは abstract ノードで、プロジェクトに直接追加することはできません。代わりに、スクリプトの中で @extend して、カスタム機能を使用することができます。

リターゲットがより簡単に

新しいスケルタルアニメーションのインポートオプションされました。これらの新しいインポートオプションは、特に .fbx フォーマットを使用したアニメーションセットのリターゲットをサポートします。

これにより、すべてのスケルトンを完全に使用できるように、レストポーズを設定したり、独自のテンプレートを使用したりできるようになりました。

QOLの改善

キーフレームの選択、コピー、ペースト、複製が可能になりました。

ナビゲーション

ナビゲーションメッシュをチャンクに分割

ナビゲーションメッシュをより管理しやすいチャンク(ひとまとまりになったデータ)に分割することができるようになりました。

大規模なゲームワールドのプロジェクトに取り組んでいる場合、これはメモリ割り当てに役立ち、その結果パフォーマンスも向上します。

以前は手動でメッシュを分割することは可能でしたが、チャンクが適切に整列していることを確認することは、決して容易なことではありませんでした。この整列は、ナビゲーション・マップ内の実行時の変更を効率的に処理するために必要なものです。

このリリースでは、NavigationPolygon (2D) and NavigationMesh (3D)の両リソースに、ベイキング境界とボーダーサイズのオフセットを定義する新しいプロパティが追加されましたが、この2つのプロパティを組み合わせて使用することで、ナビゲーション メッシュ チャンクを、隣接するチャンクと完全に整列したエッジで自動的にベイクできます。

障害物をナビゲーションメッシュにベイク

NavigationObstacle2DNavigationObstacle3D に、ベイクに影響する 2 つの新しいプロパティが追加されました。

  • affect_navigation_meshは、ベイク時に障害物がナビゲーションメッシュに寄与するようにします。
  • carve_navigation_meshはさらに、ベイク処理のオフセットによって形状が影響を受けないようにします。障害物は基本的にステンシルとして機能し、最終的なナビゲーション メッシュ サーフェスにカットインされます。その後のポストプロセスによっても影響を受けます。

実際には、これは障害物がその内部の他のソースジオメトリを破棄することを意味します。3Dでは、これは壁や屋根のようなオブジェクト内部の不要なナビゲーションメッシュを破棄するのに役立ちます。

ナビゲーションパスの簡素化

NavigationAgent ノードの新しいパス簡略化オプションを使用すると、アルゴリズム的に重要度の低いパスポイントを削除できるようになりました。

これは、広いエリアでのエージェント移動に伴う問題を解決するのに役立ちます。また、クリティカルなパスポイントだけがターゲットとして残るので、ナビゲーションポイントを使って操縦するエージェントにもメリットがあります。

このアルゴリズムは、NavigationServer からも公開されており、一般的な Vector2/Vector3 配列を簡略化するために使用することができます。

エディタ

ネイティブ ufbx インポーター

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# ファイルが見つからない場合のエクスポートの防止

C# プロジェクトをコンパイルするには、エンジンに .sln ファイルと .csproj ファイルが必要です。エクスポート時にこれらのファイルが欠落していた場合、壊れた実行ファイルが作成されます。

このような事態を防ぐため、エディターではこれらのファイルなしでプロジェクトをエクスポートすることができなくなり、代わりにマッチングエラーが表示されるようになりました。

GDスクリプト

エクスポートサイズのスリム化

この新しいエクスポートオプションにより、GDScriptエクスポートのサイズを大幅に縮小することができるようになりました。これは、コードを必要最低限にまで削ぎ落とすことで機能します。技術用語では、これを Binary tokenization と呼びます。

副次的な効果として、これはコードを効果的に難読化します。それでもまだ逆コンパイルは可能ですが、これは少なくとも参入障壁を高め、コードがプレーンテキストで利用可能になるのを防ぎます。

is not オペレーター

if not my_node is Node3D:と書く代わりに、if my_node is not Node3D:とシンプルに書くことができるようになりました。

この小さな変更は、自然言語に近いため、コードを読みやすく保つのに役立つはずです。

組み込み関数が Callableとして使えるように

組み込み関数が Callableとして使えるようになりました。この変更はメソッドとユーティリティ関数の両方に影響します。これらの関数を Callable と同じように呼び出そうとすると、内部で変換が行われ、動作するようになりました。

例えば、 print() は次のように呼び出せるようになりました: print.callv(my_array)

これは、特にバリアディック(variadic)関数に便利です。

@export_storage  プロパティアノテーション

新しい @export_storageアノテーションを使うと、シーンに隠れた値を保存することができます。一般的な使用例としては、アドオン情報をノードに保存し、インスペクタでユーザーが(誤って)編集するのを防ぐことができます。

@export_custom プロパティアノテーション

@export_custom を使って、ニーズに合った値をエクスポートできるようになりました。つまり、プレフィックスやサフィックス、カスタムヒントやヒント文字列、使用フラグなどを定義できます。

GDScriptオートコンプリートの修正

enum、subscripts、get_node(). を含むいくつかのコンポーネントのオートコンプリート(auto-completion)の機能が改善されました。

この分野のリグレッションを検出するのは難しいので、これらの結果の品質を検証するために自動テストが始まりました。いつものように、間違ったオートコンプリート候補や見つからないオートコンプリート候補を見つけたらいつでも  GitHub issuesを開いて手助けしてください。

循環依存性(circular dependencies)

循環依存性(cyclic dependenciesとも呼ばれる)は、2つのスクリプトが互いに呼び合うことで発生します。これはソフトウェア工学ではアンチパターンとみなされるかもしれませんが、実際にはよくあることです。GDScript では、このような循環依存に関連して表示されるいくつかの既知の問題を修正しました。これらの変更は、あなたのシーンをより弾力的で安定したものにします。

 GDExtension

ランタイムクラスを登録

これは、GDExtensionを使ってゲームロジックをコーディングしている人にとっては特に興味深い機能です。

以前は、実行時にのみ使用される GDExtension クラスを登録したいときはいつでも、現在エディタにいるかどうかのチェック(is_editor_hint())でラップする必要がありました。

実行時クラスをどのように宣言するかは、使用するバインディングによって異なります。公式にメンテナンスされている godot-cpp では、モジュールの初期化で GDREGISTER_RUNTIME_CLASS(ExampleRuntime)を使用します。

仮想メソッド(virtual methods)の登録

仮想メソッド(仮想関数とも呼ばれる)は基底クラス内で宣言されますが、継承クラスでのみ実装されます。つまり、実際のメソッド呼び出しは実行時のオブジェクトタイプに依存します。

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への直接リンク

Class Reference セクションに便利な新機能が追加されました。メソッド名の横にあるアイコンをクリックすることで、現在見ているメソッドへの直接リンクをコピーすることができます。

開発をサポート

次のリンクからエンジンの開発をサポートすることができます。

金銭的な支援以外にも、質の高いバグレポートの作成、コードベースへの貢献、ドキュメントの作成、チュートリアルの作成(ドキュメントや自分のスペースで)、さまざまなコミュニティプラットフォームで質問に答えたり役立つヒントを提供したりすることもサポートにつながります。

ダウンロード

Godot Engine 最新版のダウンロードはこちらから


Godot Engine ウェブサイトへ

コメント

Translate »
タイトルとURLをコピーしました