オープンソース
Bevy 0.20 リリース
要約
Rust製ゲームエンジンBevyのバージョン0.20がリリースされました。今回のアップデートでは、リアルタイムパストレーシングレンダラーSolariのパフォーマンスと機能が大幅に向上し、macOSでのMetalサポートも追加されました。また、シーンシステムBSNの構文が改善され、より直感的で使いやすくなりました。
全文翻訳
SolariとDLSSBSN構文の改善Ready Eventより多くのFeathersウィジェットHeadlessタブウィジェットWESLシェーダーメッシュシェーダーSpriteマテリアル2D拡張マテリアルSpriteレンダリングバックエンドの統合Pan Orbitカメラchain_weakによる弱いシステム順序付けContextual ThemingVal::EmとVal::RemPer-Column変更TickFixedNode楕円形の境界半径スケジュールのランダム化パニックのキャッチより高速なバルク削除テクスチャ圧縮の改善BevyエラーコンテキストメッセージInlineBoxとInlineImage今後についてBevyをサポートするコントリビューター
Bevy 0.20
2026年10月8日投稿 by Bevy Contributors
Bevy SolariでレンダリングされたZorahシーン
227名のコントリビューター、817件のプルリクエスト、コミュニティレビュアー、そして寛大なドナーの皆様のおかげで、crates.ioでBevy 0.20リリースを発表できることを嬉しく思います。
Bevyを知らない方のために説明すると、BevyはRustで構築された、驚くほどシンプルなデータ駆動型ゲームエンジンです。今すぐ試すには、クイックスタートガイドをご覧ください。これは永久に無料かつオープンソースです。GitHubで完全なソースコードを入手できます。コミュニティによって開発されたプラグイン、ゲーム、学習リソースのコレクションについては、Bevy Assetsをご覧ください。
既存のBevyアプリまたはプラグインをBevy 0.20に更新するには、0.19から0.20への移行ガイドをご覧ください。
数ヶ月前の前回リリース以降、数多くの新機能、バグ修正、品質改善が行われましたが、ここではそのハイライトを紹介します。
SolariとDLSS: BevyのリアルタイムパストレーシングレンダラーであるSolariは、より高速になり、精度が向上し、より多くのBevyレンダリング機能をサポートし、Metal経由でmacOSでも動作するようになりました。
BSN構文の改善: Bevyの新しいシーンシステムであるBSNは、読みやすく構成しやすくなるよう構文が変更されました。
Ready Event: BSNシーンエンティティは、すべてのチャイルドがスポーンされたときに観測可能なReadyイベントをトリガーするようになりました。
より多くのUIウィジェット: Bevyの意見を反映したエディター中心のUIツールキットであるBevy Feathersに、カラー入力、スクロール可能なリストビュー、ドロップダウン選択、ヘッドレスタブウィジェットが追加されました。Number Inputウィジェットはスクラブ可能/ドラッグ可能になり、ヘッドレスタブウィジェットも追加されました。
WESLシェーダー: BevyはWESLシェーダー言語(WGSLの標準化された拡張)を正式に採用しました。WESLはBevyの古いカスタムWGSL方言よりもすでに改善されており、WESLチームと協力してBevyでのシェーダー開発の将来を計画しています。
Spriteマテリアルと拡張2Dマテリアル: Sprite用のカスタムシェーダーマテリアルを作成できるようになり、3Dと同様に2Dメッシュマテリアルを拡張できるようになりました。
Pan Orbitカメラ: Bevyに「Pan Orbitカメラ」が追加され、CADライクな方法でシーンをナビゲートできるようになりました。
SolariとDLSS #Authors:@JMS55, @mate-h, @stuartparmenterPRs:#24667, #24767, #25082, #25123, #25244, #25423, #25513, #25518, #25703, #25704, #25787, #25814
Solari、Bevyのリアルタイムパストレーシングレンダラーは、プラグインのほぼすべての側面で大幅な改善が見られました!技術的な詳細はJMS55のブログをお読みください。概要については、以下をお読みください。
画質の向上 #ReSTIR実装の改善により、レンダリングはほとんどバイアスがなくなり、より正確なライティングにつながります。
さらに、他の変更により、オブジェクトの移動時に影が遅れることがなくなり、特に非金属素材では、動き中の反射が著しくきらめかなくなりまし
パフォーマンスの向上 #DLSS-RRは最近のアップデートで非常に良くなり、多くのシーンではReSTIRはかなりのパフォーマンスを消費し、画質を大幅に向上させるわけではありません。
その結果、ReSTIRはオプションにし、デフォルトでオフにすることにしました。
Bevy 0.19でSolariを使用していた場合は、ReSTIRの損失がシーンに影響するかどうかを確認し、影響する場合はSolariLighting::restirを再度有効にしてください。
ReSTIRをオフにすると、多くのライトがあるシーンでは影の品質が低下し、動き中の影が失われることが予想されます。将来的には、ReSTIRなしでライトサンプリングを改善するための、より安価な方法を模索しています。
さらに、Solariのシーン管理コードはリテンション(以前のBevyバージョンでのリテンションレンダーワールド最適化に似ています)になり、全体的により最適化され、CPUコストが大幅に削減されました。
SolariLightingの新しいフィールドも確認する価値があります。幅広いゲームでうまく機能する合理的なデフォルトを設定することを目指していますが、特定のシーン、プロジェクト、ハードウェアのパフォーマンスや品質を向上させるために調整できる多くのノブ(ワールドキャッシュサイズ、ピクセルあたりのライトサンプル数、時間的蓄積、パストレーシングバウンス数)があります。
互換性の向上 #Solariは、DirectionalLightとエミッシブメッシュの既存のサポートに加えて、カメラ上のAtmosphereとEnvironmentMapLightsからのライティングもサポートするようになりました。近い将来、残りのPointLight、SpotLight、RectLightタイプもサポートする予定です。
SolariはmacOSでも動作しますが、現在、macOS用のbevy_solariには組み込みデノイザーが含まれていないことに注意してください。MetalFX Ray Reconstructionが将来の解決策になる可能性があります(コントリビューション歓迎!)。
DLSSのアップデート #最後に、dlss_wgpuクレートが最新バージョンのDLSSをサポートするように更新され、DLSS-RR 4.5のサポートが追加され、Solariでのデノイジング品質が大幅に向上しました。
Bevy 0.19でDLSSを使用していた場合は、最新バージョンのDLSS SDKをダウンロードしてセットアップしたことを確認してください。そうしないと、コンパイラエラーが発生します。
BSN構文の改善 #Authors:@cartPRs:#25318, #25626
BSNは、実際には摩擦を引き起こすいくつかの特異性を持っていました。このサイクルでは、エルゴノミクスと明瞭さを向上させるために、BSNの構文に変更を加えました。これにより、構文はほとんど確定しました。
明示的なシーン構文 #すべてのシーン参照には、@プレフィックスが必要になりました。
// 前 bsn! { scene_variable scene_function() @SceneComponent {scene_expression} }
// 後 bsn! { @scene_variable @scene_function() @SceneComponent @{scene_expression} }
これにより、シーンのインクルージョンを簡単に見つけられるようになり(すべてのケースで構文が統一され)、コンポーネント値をより簡単に扱えるようになりました。
template_valueラッパーは不要になりました! #コンポーネント値から、これらの厄介なtemplate_valueラッパーをすべて削除できるようになりました。
// 前 bsn! { template_value(component_variable) template_value(component_function()) }
// 後 bsn! { component_variable component_function() }
列挙型は「そのまま機能」します #列挙型は、DefaultとCloneを実装している限り、VariantDefaultsまたはFromTemplateを必要としなくなりました。
// 前 #[derive(Component, Default, Clone, VariantDefaults)] enum Foo { A { x: u32, y: u32 }, #[default] B, }
b sn! { Foo::B }
// 後 #[derive(Component, Default, Clone)] enum Foo {
A { x: u32, y: u32 },
#[default] B,
}
b sn! { Foo::B }
VariantDefaultsをサポートしない列挙型を使用していた場合は、template_valueラッパーを削除できるようになりました。
// 前 bsn! { template_value(Foo::A) }
// 後 bsn! { Foo::A }
VariantDefaultsの削除は、列挙型がすべてのフィールドを指定する必要があることを意味します。
// 前 (yフィールドはデフォルト値に初期化されます)
b sn! { Foo::A { x: 1 } }
// 後 (yフィールドは手動で指定する必要があります)
b sn! { Foo::A { x: 1, y: 0 } }
このトレードオフは、BSNの任意のRust列挙型との互換性を高めるため、それだけの価値があると考えています。Rustはそもそも「列挙型バリアントのデフォルト」をサポートしていません!
連鎖メソッドのサポート #「ビルダーパターン」(および一般的に連鎖メソッド)は、以前はtemplate_valueラッパーが必要でした。これは削除できるようになりました。
// 前 bsn! { template_value(Transform::from_xyz(-2.5, 4.5, 9.0).looking_at(Vec3::ZERO, Vec3::Y)) }
// 後 bsn! { Transform::from_xyz(-2.5, 4.5, 9.0).looking_at(Vec3::ZERO, Vec3::Y) }
さらに、次のようなケースでもtemplate_valueラッパーを削除できるようになりました。
// 前 bsn! { template_value(node.clone()) }
// 後 bsn! { node.clone() }
一般的に、BSN宣言からすべてのtemplate_valueインスタンスを削除できるようになりました!
改善されたリスト構文 #BSNは以前、エンティティを区切るためにカンマを使用し、境界を明確にするためにエンティティの周りにオプションの()を使用していました。これにより、多くの構文ノイズ、行ノイズ、および過度のインデントが発生していました。
b sn! {
N