Bevy 版本速览笔记
ZoOL 对 Bevy 主要版本发布的快速解读和重点特性提炼。
Bevy 0.15 速览 (2024-11-28)
重点特性
| 特性 | 重要度 | 说明 |
|---|
| 所需组件 (RequiredComponents) | ⭐⭐⭐ | #[require(Team, Sprite)] 自动注入依赖组件,精简 Bundle |
| 实体选择/拾取 (Picking) | ⭐⭐⭐ | 整合 bevy_mod_picking,支持 UI/Sprite/Mesh 默认后端,冒泡观察者模式 |
| 动画系统 | ⭐⭐ | 通用实体动画、动画遮罩、加法混合、动画事件 |
| 曲线系统 | ⭐⭐ | Curve trait、循环样条、缓动函数、颜色渐变曲线 |
| 反射增强 | ⭐⭐ | 函数反射、唯一反射、远程类型反射 |
| bevy-remote-protocol | ⭐⭐ | 基于 hyper/HTTP 的 JSON-RPC 接口,可远程检查和修改 ECS 世界 |
| 保留渲染世界 | ⭐⭐ | Render World 不再每帧清空,同步代替重建 |
| UI 盒阴影 | ⭐ | BoxShadow 组件 |
| VBAO | ⭐ | 垂直基于环境光遮蔽 |
| 色差 | ⭐ | 后处理效果 |
| 体积雾改进 | ⭐ | 点光源和聚光灯支持 |
| 游戏手柄作为实体 | ⭐ | 手柄输入 ECS 化 |
| Cosmic Text | ⭐ | 改进的文本渲染 |
关键代码示例
// 所需组件: 自动注入依赖
#[derive(Component, Default)]
#[require(Team, Sprite)]
struct Player { name: String }
// Picking: 冒泡观察者
commands.spawn(Text::new("Click Me!")).observe(on_click_print_hello);
fn on_click_print_hello(click: Trigger<Pointer<Click>>) {
println!("{} was clicked!", click.entity());
}
评价
“所霉组件、拾取、远程协议都是编辑器的基石”
Bevy 0.16 速览 (2025-04-25)
重点特性
| 特性 | 重要度 | 说明 |
|---|
| GPU 驱动渲染 | ⭐⭐⭐ | Multi-draw indirect + Bindless,大场景 3x 性能提升 |
| ECS 关系 (Relationships) | ⭐⭐⭐ | #[relationship] / #[relationship_target] 原生支持 |
no_std 支持 | ⭐⭐ | 已在 GBA 掌机上跑通,嵌入式可能 |
| 统一错误处理 | ⭐⭐ | 系统/观察者/命令返回 Result,GLOBAL_ERROR_HANDLER |
| 大气散射 | ⭐⭐ | 程序化大气渲染 |
| 贴花 (Decals) | ⭐ | Forward + Clustered 贴花 |
| 遮挡剔除 | ⭐ | 性能优化 |
| WESL 支持 | ⭐ | WGSL 扩展:imports + 条件编译 |
GPU 驱动渲染兼容性
| OS | API | GPU Transform | Multi-draw & GPU Cull | Bindless |
|---|
| Windows | Vulkan | ✅ | ✅ | ✅ |
| Windows | D3D12 | ✅ | ❌ | ❌ |
| Linux | Vulkan | ✅ | ✅ | ✅ |
| macOS | Metal | ✅ | ❌ | ⚡ |
| Web | WebGPU | ✅ | ❌ | ❌ |
| Web | WebGL2 | ❌ | ❌ | ❌ |
关键代码示例
// ECS 关系
#[derive(Component)]
#[relationship(relationship_target = LikedBy)]
struct Likes(pub Entity);
#[derive(Component, Deref)]
#[relationship_target(relationship = Likes)]
struct LikedBy(Vec<Entity>);
// 错误处理
fn my_system() -> Result {
// 自动传递给 GLOBAL_ERROR_HANDLER
}
GLOBAL_ERROR_HANDLER.set(warn).expect("only once");
评价
“大场景 3x 性能提升,GBA 上跑 Bevy 很酷”
Bevy 0.17 速览 (2025-10-01)
重点特性
| 特性 | 重要度 | 说明 |
|---|
| Bevy Solari (光追) | ⭐⭐⭐ | 实时光线追踪全局光照,ReSTIR DI/GI |
| 热重载 (Hotpatching) | ⭐⭐⭐ | 实时更新 Rust 系统代码,无需重编译 |
| 虚拟几何 BVH | ⭐⭐⭐ | 1150 亿三角形 3.5ms,8x 复杂度仅增 30% GPU 时间 |
| DLSS 支持 | ⭐⭐ | AI 超采样 + 降噪 |
| UI 渐变系统 | ⭐⭐ | 线性/锥形/径向渐变 |
| 专用 UI 变换 (UiTransform) | ⭐⭐ | 替代通用 Transform |
| Bevy Feathers | ⭐⭐ | 专业 UI 组件库(编辑器用) |
| 无头组件 | ⭐ | 纯逻辑 + 完全样式控制 |
| 自动反射注册 | ⭐ | #[derive(Reflect)] 自动注册 |
| 帧时间图表 | ⭐ | FpsOverlayPlugin 实时性能监控 |
| Web 资源加载 | ⭐ | 直接从网络加载 |
| 瓦片地图 | ⭐ | 分块渲染 |
| 光照纹理 (Light Cookies) | ⭐ | 调制光照强度 |
| Text2d 增强 | ⭐ | 阴影 + 背景色 |
| ViewportNode | ⭐ | 相机输出渲染到 UI 节点 |
震撼性能数据
- 130,000 条龙 × 870,000 三角形 = 1150 亿三角形 → 3.5ms
- 1,000,000 条龙 = 9000 亿三角形 → 4.5ms
- 相比 0.16:1,300 实例场景从 2.2ms → 1.3ms(提升 41%)
关键代码示例
// 启用热重载
[features]
hotpatching = ["bevy/hotpatching"]
// UI 渐变
commands.spawn((
Node::default(),
BackgroundGradient::new_linear(
LinearGradient::new(90.0)
.with_stop(Color::RED, 0.0)
.with_stop(Color::YELLOW, 0.5)
.with_stop(Color::GREEN, 1.0)
),
));
// 自动反射
#[derive(Component, Reflect)]
struct Player { /* 自动注册 */ }
升级注意事项
Trigger → On 命名变更
Transform → UiTransform (UI 节点)
- 系统集统一使用
*Systems 后缀
- glTF 坐标系处理变化
评价
“0.17 不仅是更新,是 Bevy 向世界级游戏引擎迈进的坚实一步”
下一步: BSN 场景/节点系统 (0.18)
版本对比总结
| 维度 | 0.15 | 0.16 | 0.17 |
|---|
| 核心突破 | 所霉组件 | GPU驱动渲染 | 光追、热重载 |
| 性能 | 保留渲染世界 | 3x 大场景 | 1150亿三角形 |
| 架构 | Picking | ECS关系 | 虚拟几何BVH |
| 开发体验 | BRP | no_std、错误处理 | 热重载、自动反射 |
| UI | 盒阴影 | - | 渐变、Feathers、UiTransform |
文件位置
/Users/zool/workspace/ZoOL's Valut/Bevy 0.15版速览.md
/Users/zool/workspace/ZoOL's Valut/Bevy 0.16 速览.md
/Users/zool/workspace/ZoOL's Valut/Bevy 0.17:光追照明、热修补系统与性能飞跃.md