Welcome to the fourth edition of This month in Dimforge! This newsletter provides you with a summary of important updates that occurred within the Dimforge community. This includes in particular updates about the Rapier (physics engine), Salva (fluid simulation), Parry (collision-detection), nalgebra (linear algebra), and Simba (abstract algebra) crates. This fourth edition will contain updates for the months of December 2020 and January 2021.
Announcing Parry 0.1.0
During the past two months we have been working on a new crate. Say hello to Parry:
Parry is a complete remake of our ncollide crate. It is declined in
parry3d-f64, depending on whether you want,
2D or 3D geometry, and
f64 accuracy. Parry is born from the merge of most of the
geometry code we had in Rapier, and some of the geometric code we ported from ncollide.
As of today, Parry is the geometric library used by our Rapier physics engine (and Rapier itself includes much less geometry code than before). It is the crate we will continue to improve in the long-term. The ncollide crate is now in passive maintenance mode.
Parry doesn't have any user-guide right now, but we intend to write one in February. Here is a table comparing the features of ncollide to the features of Parry:
|Contact manifolds computation||✅||✅|
|Approximate Convex Decomposition||VHACD||HACD|
|Mass properties computation||✅||❌|
|All shapes are serializable||✅||❌|
|Generic wrt. the scalar type||❌||✅|
|Procedural mesh generation||❌||✅|
In addition, Parry implements much more efficient algorithms for contact manifold generation, and a more robust 3D convex-hull implementation.
The pipelining features of ncollide like the
CollisionWorld have not been included in Parry
because we are still unsure where we want this to go. We don't want it to just be an inferior
version of the pipelining we already have in Rapier, so we need more time to think
Similar to Parry, we released two new creates for Rapier:
rapier3d-f64. These crates
are for 2D and 3D physics simulation using 64-bit floats.
Thanks to the switch to Parry, the version of 0.5.0 of Rapier comes with a fair amount of new features. Here are some of the most important ones:
QueryPipelineis now able to perform scene-wide shape-casts (aka. sweep tests), point projections, and shape intersection tests. Note that shape-casting is essential for writing a character controller based on kinematic bodies.
- It is now possible to use custom shapes with Rapier.
- It is now possible to use a convex polygon (in 2D) or convex polyhedron (in 3D) as a collider shape.
- It is now possible to use concave shapes after they have been decomposed into convex
parts. A convenient
ColliderBuilder::convex_decompositionis provided to perform an approximate convex decomposition automatically.
- It is now possible to use different rules (average, min, max, multiply) for combining two friction and restitution coefficients.
- It is now possible to scale the gravity applied to each rigid-body. Setting this scale factor to zero will effectively make the rigid-body unaffected by gravity.
You may see the CHANGELOG of Rapier for more details on other changes we made in 0.5.0.
JS bindings 0.3 for Rapier 0.5
Because Rapier 0.5.0 contained so many new features, we updated our JS bindings to expose most of these new features. You may see the CHANGELOG of rapier.js for the details on all changes we made in 0.3.0 to expose these new features.
In addition, we released two new NPM packages for the JS bindings of rapier:
@dimforge/rapier3d-compat. Thanks to Manuel Adameit for making this possible. These
two packages are designed to be easier to integrate into any build system (with or without bundler).
Instead of containing a
.js and a
.wasm file, these
-compat packages only contain one
.js which itself
contains the WASM encoded in Base64.
At the beginning of this year, we announced our 2021 roadmap for Rapier. So far we implemented and released all the features that were announced to be available in February. So we will continue to follow this roadmap with the following objectives for next month:
- Add the support of contact modification in Rapier. This will allow you to easily simulate, e.g., conveyor belts and one-way platforms.
- Add the support for dominance in Rapier. This will make some object (typically the player modeled as a dynamic body) immune to forces applied by a selection of other objects.
These two features should actually be fairly quick to implement considering we already made some modifications to prepare for this future work. Therefore, we have a few more objective for next month:
- Improve the user-guides of Rapier and make a user-guide for Parry.
- Start the SIMD optimization work on Salva.
- Review, and publish a new crate:
nalgebra-sparsefor sparse matrix computation. Currently,
nalgebrahas a limited support of sparse matrices when its
sparsefeature is enabled. Thanks to the huge contribution of Andreas Longva, our sparse matrix support will be completely rewritten and extracted into a new crate.
We would like to thank the whole community and code contributors. In particular, thanks to the code contributors from the past two months1:
- Thanks to users reporting spelling mistakes on the documentation. This is always appreciated.
- Thanks to users joining us on our discord server to provide feedbacks, discuss features, and get assistance!
Finally, thanks to all the former, current and new supporters through GitHub sponsors! This help is greatly appreciated and allows us to continue working on open-source exclusively.
- The list of contributors is automatically generated from the past two months' github commit history. Don't hesitate to let us know if your name should have been mentioned here.↩