#rigid-bodies #bevy #physics-simulation #physics #2d-3d #xpbd #gamedev

已弃用 bevy_xpbd_2d

已弃用,请使用 avian2d 代替。Bevy 游戏引擎的基于扩展位置动力学(XPBD)的物理引擎

10 个不稳定版本 (4 个破坏性更新)

0.5.0 2024 年 7 月 4 日
0.4.2 2024 年 2 月 21 日
0.3.3 2024 年 1 月 11 日
0.3.2 2023 年 11 月 9 日
0.1.0 2023 年 6 月 19 日

#2332 in 游戏开发

Download history 312/week @ 2024-05-02 296/week @ 2024-05-09 273/week @ 2024-05-16 270/week @ 2024-05-23 344/week @ 2024-05-30 248/week @ 2024-06-06 324/week @ 2024-06-13 315/week @ 2024-06-20 221/week @ 2024-06-27 412/week @ 2024-07-04 268/week @ 2024-07-11 287/week @ 2024-07-18 230/week @ 2024-07-25 235/week @ 2024-08-01 206/week @ 2024-08-08 147/week @ 2024-08-15

每月下载量 875
5 个可信包 中使用

MIT/Apache

1MB
13K SLoC

Bevy XPBD (已弃用,推荐使用 Avian)

MIT/Apache 2.0 ci 2D crates.io 2D docs.rs 3D crates.io 3D docs.rs

⚠️ Bevy XPBD 已弃用,推荐使用其继任者 Avian。Bevy XPBD 将不再进行开发或维护。有关背景信息,请参阅 #346


Bevy XPBD 是一个基于 扩展位置动力学 (XPBD) 的 2D 和 3D 物理引擎,为 Bevy 游戏引擎 设计。


设计

以下是 Bevy XPBD 中使用的一些核心设计原则。

  • 专为 Bevy 制作,适用于 Bevy。 无现有引擎的包装。
  • 提供舒适且熟悉的 API。 舒适性是良好体验的关键。
  • 尽可能利用 ECS。 引擎应该感觉像是 Bevy 的一部分,并且不需要维护一个单独的物理世界。
  • 使用高度模块化的插件架构。 用户应该能够用自己的实现替换引擎的部分。
  • 提供良好的文档。 如果不知道如何使用它,物理引擎就毫无意义。

特性

以下是 Bevy XPBD 的当前一些特性。

  • 动态、运动学和静态刚体
    • 线性和角速度
    • 外部力、扭矩和冲量
    • 重力和重力缩放
    • 线性和角阻尼
    • 锁定平移和旋转轴
    • 刚体主导
    • 自动休眠以实现自动停用
  • Parry 提供的碰撞检测
    • 具有可配置碰撞层、密度、材质属性等的碰撞体
    • 碰撞事件
    • 访问碰撞实体
    • 使用自定义系统过滤和修改碰撞
    • 手动接触查询和交点测试
  • 约束和关节
    • 创建基于位置的约束的灵活 API
    • 内置几种关节类型:固定、距离、滑动、转动、球形
    • 支持自定义关节和其他约束
  • 空间查询
    • 光线投射、形状投射、点投影和交点测试
    • 针对光线投射和形状投射的人体工程学组件化API
    • 灵活的 SpatialQuery 系统参数
    • 空间查询过滤器
  • 用于碰撞体、AABB、接触、关节、睡眠、轴和空间查询的调试渲染
  • 可配置的调度和高度可定制性
  • 高度模块化的插件架构,可以自由扩展和替换引擎的部分
  • 支持自定义碰撞后端
  • f32/f64 精度(默认为 f32

您可以在docs.rs上的目录中找到更完整的信息以及文档。

文档

使用示例

首先,将 bevy_xpbd_2dbevy_xpbd_3d 添加到您的 Cargo.toml 依赖中

# For 2D applications:
[dependencies]
bevy_xpbd_2d = "0.5"

# For 3D applications:
[dependencies]
bevy_xpbd_3d = "0.5"

# If you want to use the most up-to-date version, you can follow the main branch:
[dependencies]
bevy_xpbd_3d = { git = "https://github.com/Jondolf/bevy_xpbd", branch = "main" }

以下是一个非常简单的示例,其中初始角速度的盒子落在平面上。这是Bevy的3d_scene示例的修改版。

use bevy::prelude::*;
use bevy_xpbd_3d::prelude::*;

fn main() {
    App::new()
        .add_plugins((DefaultPlugins, PhysicsPlugins::default()))
        .add_systems(Startup, setup)
        .run();
}

fn setup(
    mut commands: Commands,
    mut meshes: ResMut<Assets<Mesh>>,
    mut materials: ResMut<Assets<StandardMaterial>>,
) {
    // Plane
    commands.spawn((
        RigidBody::Static,
        Collider::cuboid(8.0, 0.002, 8.0),
        PbrBundle {
            mesh: meshes.add(Plane3d::default().mesh().size(8.0, 8.0)),
            material: materials.add(Color::srgb(0.3, 0.5, 0.3)),
            ..default()
        },
    ));

    // Cube
    commands.spawn((
        RigidBody::Dynamic,
        AngularVelocity(Vec3::new(2.5, 3.4, 1.6)),
        Collider::cuboid(1.0, 1.0, 1.0),
        PbrBundle {
            mesh: meshes.add(Cuboid::default()),
            material: materials.add(Color::srgb(0.8, 0.7, 0.6)),
            transform: Transform::from_xyz(0.0, 4.0, 0.0),
            ..default()
        },
    ));

    // Light
    commands.spawn(PointLightBundle {
        point_light: PointLight {
            intensity: 2_000_000.0,
            shadows_enabled: true,
            ..default()
        },
        transform: Transform::from_xyz(4.0, 8.0, 4.0),
        ..default()
    });

    // Camera
    commands.spawn(Camera3dBundle {
        transform: Transform::from_xyz(-4.0, 6.5, 8.0).looking_at(Vec3::ZERO, Vec3::Y),
        ..default()
    });
}

https://user-images.githubusercontent.com/57632562/230185604-b40441a2-48d8-4566-9b9e-be4825f4877e.mp4

更多示例

您可以在/crates/bevy_xpbd_2d/examples/crates/bevy_xpbd_3d/examples 中找到许多2D和3D示例。

这些示例支持 f32f64 精度,因此代码中包含一些特性依赖的类型,如 ScalarVector。在实际使用中这些并不需要,因此您可以根据您选择的特性直接使用 f32f64 类型。

默认情况下,示例使用 f32。要运行 f64 版本,您需要禁用默认功能并手动选择维度和精度

# Manually specify dimension and precision. `parry-f64` enables collision detection using Parry.
cargo run --example cubes --no-default-features --features "3d f64 parry-f64"

支持的Bevy版本

注意:Bevy XPBD 已弃用,不会支持Bevy的将来版本。相反,建议使用其继任者 Avian

Bevy Bevy XPBD
0.14 0.5
0.13 0.4
0.12 0.3
0.11 0.2
0.10 0.1

未来特性

  • 连续碰撞检测(CCD)
  • 实体级别的碰撞钩子或回调
  • 用于激活碰撞类型(如针对特定刚体类型、传感器或父对象的碰撞)的标志
  • 性能优化(更好的广相、并行求解器...)
  • 关节电机
  • 关节,也称为多体关节
  • 适当的跨平台确定性
  • 软体(布料和可变形固体)
  • 可能还有流体模拟

贡献

如果您遇到任何问题,请随时打开问题或创建拉取请求。对于较大的更改和添加,最好在提交拉取请求之前先打开一个问题或向我寻求反馈。

您还可以在Bevy Discord 服务器上的 bevy_xpbd 线路中寻求帮助或提问,我的用户名是 Jondolf (@jondolfdev)。

致谢

非常感谢整个Bevy社区对令人难以置信的支持!您所有人的贡献、见解和要求都极大地帮助推动了Bevy中物理状态的发展,这也是我不断努力打造最佳引擎的动力。

我还要特别感谢 Johan Helsing,他的灵感为这个项目注入了活力,并在早期阶段给予了我极大的帮助。他的原创 教程系列bevy_xpbd 存在的根本原因,没有他的支持和贡献,这个项目今天可能还远未达到现在的水平。

许可证

Bevy XPBD 是免费和开源的。本仓库中的所有代码都可选以下任一许可证:

由您选择。

依赖项

~20–61MB
~1M SLoC