Skip to content

feat(physics): Refactor physics plugin with extensive enhancements and new features #440

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 8 commits into from
Aug 13, 2024

Conversation

ID-Emmett
Copy link
Contributor

概要

此PR重构了Orillusion的物理插件,加入了大量新功能,以提供更强大和全面的物理系统。

主要更改

  1. 刚体组件:

    • 添加了许多新的属性和方法,以扩展功能。
    • 支持图形对象直接控制刚体变换。详见 issue #328
    • 支持碰撞事件。
  2. 软体组件:

    • 实现了布料模拟,并提供了多种自定义选项。
  3. 约束组件:

    • 增加了当前版本中所有Ammo.js约束(包括所有重载)的支持,包括但不限于 btGeneric6DofSpringConstraint, btConeTwistConstraintbtHingeConstraint
  4. 调试物理渲染:

    • 引入了一个新功能,用于实时可视化物理实体和约束,有助于调试和开发。
  5. 工具类:

    • 提供了一组用于常见物理操作和计算的工具类。
  6. 碰撞事件:

    • 利用 ContactProcessedCallback 监听碰撞事件。只需为刚体注册碰撞回调,即可在碰撞时触发。且对全局碰撞事件进行了高效过滤优化。
  7. 碰撞形状:

    • 封装了十余种碰撞形状,包括复杂形状如高度场、凸包和三角网格等。
    • 形状配置简化,大部分情况下只需提供 3D 对象即可构建匹配的碰撞体。
  8. 碰撞组件:

    • 刚体不再依赖原先的 ColliderComponent,但已作兼容。
  9. 物理系统更新函数:

    • 修改 update 函数中 stepSimulation 的 timeStep 参数,默认值改为 Time.delta / 1000,以秒为单位传递时间步长。此更改避免了物理模拟速度依赖帧率,确保了更一致的物理行为。此更改直接影响到所有先前使用本插件的项目。
  10. 示例:

  • 更新了现有示例并新增了多个示例,以展示物理插件的新功能。

影响

这些更改较为广泛,可能会影响使用先前版本物理插件的现有项目。建议在项目中进行全面测试,并根据需要调整配置。

测试

所有新功能和修改均已测试,但可能并不全面。

向后兼容性

尽管已经尽力保持向后兼容性,但某些更改可能需要在现有项目中进行调整。

@lslzl3000
Copy link
Collaborator

Awesome! We will do some tests later.

@lslzl3000
Copy link
Collaborator

lslzl3000 commented Aug 6, 2024

能帮忙总结一下哪些 BREAKINGCHANGES 吗?
比如 物理系统更新函数 算是直接影响旧版本用法的改变,除此之外,还有哪些API的变化?

@lslzl3000
Copy link
Collaborator

lslzl3000 commented Aug 6, 2024

_initedFunctions 的用法弃用了,统一用 _initializationPromise 来处理初始化 callback 49b371c

@ID-Emmett
Copy link
Contributor Author

ID-Emmett commented Aug 6, 2024

能帮忙总结一下哪些 BREAKINGCHANGES 吗? 比如 物理系统更新函数 算是直接影响旧版本用法的改变,除此之外,还有哪些API的变化?

除了 Physics.update() 函数的变更外,还有两处更改:

  1. Rigidbody.update() :出于性能考虑,现在仅对激活状态的刚体进行变换同步,如果刚体为非激活状态且未开启新增的 enablePhysicsTransformSync 功能(默认关闭),那么修改3D对象的位置、旋转、缩放后,将不会更新物理刚体,导致图形与物理变换不同步。在旧版本中对于添加 Rigidbody Component 的对象是无法手动修改其位置和旋转的。

  2. Rigidbody.btRigidbodyInitedbtRigidbodyInited 属性已更名为 btBodyInited

关于 Physics.update() 的调整,这对物理模拟有较大影响。为确保准确性,timeStep 已正确调整为秒单位(Time.delta / 1000)。这一更改确保了物理模拟的速率不会因帧率变化而改变,但也可能导致物理模拟的更新频率降低,尤其在大尺度物体的情况下,物体每帧的位移可能变小,从而导致视觉上看起来速度变慢。

建议提供相关说明和指导,帮助开发者在模拟中考虑物体尺寸对视觉效果的影响。可以通过调整物体的尺寸、初速度、力或加速度,或调整摄像机视角来优化运动表现。

@lslzl3000 lslzl3000 merged commit 7c18db5 into Orillusion:dev Aug 13, 2024
1 check passed
@lslzl3000 lslzl3000 mentioned this pull request Aug 28, 2024
lslzl3000 added a commit that referenced this pull request Aug 31, 2024
## [0.8.3](v0.8.2...v0.8.3) (2024-08-28)

### Bug Fixes

* fix frameRate and camera resize ([c4b8626](c4b8626))
* fix InstanceDraw destroy error ([4529594](4529594))
* **GUI:** add option to receive post effects ([#426](#426)) ([af74bb1](af74bb1))
* **inputsystem:** capture pointer on pointerdown ([#432](#432)) ([cc90b82](cc90b82))
* **shadow:** fix acceptShadow ([4d6a838](4d6a838))
* **transform:** fix lookAt at vertical angle ([#431](#431)) ([1922f18](1922f18))


### Features

* add GridObject ([#436](#436)) ([a939ce6](a939ce6))
* **geometry:** add extra geometry package, extrude geometry and text geometry ([#442](#442)) ([069e6d4](069e6d4))
* **graphic:** move graphic3D to @orillusion/graphic ([#427](#427)) ([a1d1b2a](a1d1b2a))
* **physics:** add RopeSoftBody, rigidbody dragger, and enhance collisionShapeUtil ([#448](#448)) ([452d730](452d730))
* **physics:** Refactor physics plugin with extensive enhancements and new features ([#440](#440)) ([7c18db5](7c18db5))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants