Sign in

Jondolf

@jondolf.bsky.social
300 followers 39 following 70 posts

University student and software enthusiast, working on Avian Physics for #bevyengine. github.com/avianphysics/avian

PostsRepliesMedia
Jondolf @jondolf.bsky.social · 12/07/2026
Here is the same scene with double-precision. Even though the internals and APIs primarily use f32 values, there are no troubles at all!
060
Jondolf @jondolf.bsky.social · 12/07/2026
Here is a scene at 1e7 meters from the origin along the x-axis using single-precision. You can see the bodies form rows and get stuck in these quantized x-coordinates, as the floating-point step is about one meter at these distances. Behavior is very wonky!
161
Jondolf @jondolf.bsky.social · 12/07/2026
4. Our upcoming SIMD optimizations are much more effective with single-precision numbers (hope to share more about my SIMD efforts soon!) 5. Peck, my upcoming collision detection library, only supports f32
150
Jondolf @jondolf.bsky.social · 12/07/2026
Why, you may ask? 1. Our Scalar and Vector type alias spam in examples has been paining me since the start. People should learn to just use f32, Vec2, Vec3, Quat, etc. 2. Contributors regularly get CI errors due to f32/f64 type mismatches, causing a lot of gray hairs 3. Using f64 so widely is costly
140
Jondolf @jondolf.bsky.social · 12/07/2026
Previously, Avian has supported f64 with a feature flag that changes almost everything to double-precision. This changes with my f64 overhaul. In short: Use f64 only for world-space values that degrade in precision far from the origin. This approach is inspired by Jolt. github.com/avianphysics...
github.com
Minimal Use of `f64` for Large Worlds by Jondolf · Pull Request #1027 · avianphysics/avian
Objective Related to #439. Avian supports both f32 and f64 by using type aliases like Scalar and Vector that choose the appropriate type based on the active feature configuration. When f64 is enabl...
2322
Jondolf @jondolf.bsky.social · 11/07/2026
(thank you malfu for bringing me this important message)
000
Jondolf @jondolf.bsky.social · 11/07/2026
i have received word from a carrier pigeon that you should do today's wordle
120
Jondolf @jondolf.bsky.social · 03/07/2026
The PR has a lot more details and describes all the differences to Box2D. Check it out if you're interested :)
020
Jondolf @jondolf.bsky.social · 03/07/2026
You can also see how sweep-based CCD can reliably handle fast rotational movement (depending on the sweep mode), but has the downside of "time loss". However, enabling additional speculative CCD helps alleviate it.
140
Jondolf @jondolf.bsky.social · 03/07/2026
One difference to Box2D is that we do still support "pure" speculative CCD as an opt-in feature, and also optionally support CCD between two fast-moving dynamic bodies. This allows scenarios like two projectiles reliably hitting each other midair, and bouncing off of each other.
120
Jondolf @jondolf.bsky.social · 03/07/2026
The major improvement over our previous Bepu-style speculative CCD is that you no longer get ghost collisions when moving past objects at a high speed, as the default speculative distance is kept at a very small, fixed value.
130
Jondolf @jondolf.bsky.social · 03/07/2026
An overhauled Box2D-inspired Continuous Collision Detection algorithm has landed in Avian! It uses a form of swept CCD by default for fast-moving bodies. #physics #gamedev #avian #bevy github.com/avianphysics...
github.com
Fast CCD without ghost collisions (Box2D-inspired) by Jondolf · Pull Request #996 · avianphysics/avian
Objective Fixes #990. Currently, Avian relies heavily on Bepu-style speculative collision with an unbounded speculative margin. This has two major problems: This style of speculative collision is ...
1375
Reposted by Jondolf
Erin Catto @erincatto.bsky.social · 01/07/2026
I’m happy to announce the release of a new open source 3D physics engine called Box3D. I’ve been working on this project for a few years now, but it represents over 20 years of experience writing physics engines for games. Read more here: box2d.org/posts/2026/0...
box2d.org
Announcing Box3D
I’m happy to announce the release of Box3D, an open source 3D physics engine. It is now available on GitHub. Box3D repository You can think of Box3D as a fork of Box2D, extended with many features nee...
13782220
Jondolf @jondolf.bsky.social · 20/06/2026
Avian has been updated to Bevy 0.19. Have fun! @bevy.org As always, an announcement post can be found here: joonaa.dev/blog/13/avia...
joonaa.dev
Avian Physics 0.7 - Joona Aalto
Bevy 0.19 support
0405
Reposted by Jondolf
Jorrit Rouwe @jrouwe.bsky.social · 06/04/2026
Jolt Physics just hit 10K GitHub stars! What started in 2014 as a CPU vs GPU ray casting experiment became a full physics engine in 2021. Seeing what you’re building with it is amazing. Thank you!
317316
Jondolf @jondolf.bsky.social · 17/03/2026
Thanks, yeah I fixed that now 😅 they got messed up when I updated some dependencies for the website and there was a small breaking change that I hadn't accounted for
110
Jondolf @jondolf.bsky.social · 16/03/2026
I just released version 0.6 of Avian, an ECS-driven physics engine for @bevy.org. #physics #gamedev v0.6 features move-and-slide, joint motors, and an overhauled broad phase using BVHs, resulting in massively reduced overhead for scenes with a large number of colliders. joonaa.dev/blog/12/avia...
joonaa.dev
Avian Physics 0.6 - Joona Aalto
Move-and-slide, joint motors, and BVH optimization
214026
Reposted by Jondolf
Erin Catto @erincatto.bsky.social · 12/03/2026
This is the game I've been working on the last four years. It is an incredibly ambitious project made by a small team. www.youtube.com/watch?v=7fax...
youtube.com
The Legend of California - First Look (Wishlist Now)
YouTube video by kintsugiyama
44012
Jondolf @jondolf.bsky.social · 12/03/2026
Congrats on the unveiling, looks super interesting! Very excited both for the game and for Box3D 😉
020
Jondolf @jondolf.bsky.social · 02/02/2026
Hah, yeah gizmos are really the main bottleneck here. Beyond 10k colliders I have to disable debug rendering or it just kinda tanks performance in this scene. At one point I tried to implement some custom line drawing stuff, but I didn't spend too much time on that yet
000
Jondolf @jondolf.bsky.social · 02/02/2026
Note that spatial queries such as ray casts and shape casts don't use this yet. Instead, they use a BVH from Parry, which we update and manage quite inefficiently. Reusing the broad phase BVH for spatial queries is next on my list!
050
Jondolf @jondolf.bsky.social · 02/02/2026
Huge thanks to DGriffin91 for implementing incremental leaf insertion and removal, partial rebuilds, improved traversal, and much more for OBVHS to make it suitable for physics <3 Go show him and OBVHS some love! github.com/DGriffin91/o...
130
Jondolf @jondolf.bsky.social · 02/02/2026
Note that this doesn't necessarily mean that SAP is inherently slow, our implementation was just extremely basic 😅 though I do think that BVHs are the better choice for a general game physics engine. Plus, I designed it so that you can swap it out with your own broad phase algorithm if you'd like!
140
Jondolf @jondolf.bsky.social · 02/02/2026
The performance impact is massive for scenes with a large number of colliders. Previously, 40k static colliders in 2D could easily cost nearly 10 ms of the frame budget, while it is now under 1 ms. Dynamic scenes also perform a lot better than before.
Performance before (SAP) and after (BVH) for a scene with 40k static colliders.
260
Jondolf @jondolf.bsky.social · 02/02/2026
Avian's broad phase collision detection has finally been overhauled to use Bounding Volume Hierarchies from the OBVHS crate! Previously, basic sweep and prune was used. This is a stress test with colliders in a grid moving randomly, rendering the resulting BVH. #bevy PR: github.com/avianphysics...
3425
Jondolf @jondolf.bsky.social · 01/02/2026
Thanks again to pierre-l for such great work on implementing a large and complex feature like this!
120
Jondolf @jondolf.bsky.social · 01/02/2026
Note that the implementation may end up being rewritten if/when we finally switch our XPBD joint solver to something else. But joint motors have been a common request, and the API will likely remain the same even if we change the internals, so I decided that it's worth shipping them already :)
120
Jondolf @jondolf.bsky.social · 01/02/2026
pierre-l on GitHub implemented them in #913 for revolute and prismatic joints, supporting both velocity control and position control. Three motor models are included: ⁨ForceBased, ⁨AccelerationBased, and ⁨SpringDamper. Spherical joints don't have motors yet, but will be supported in the future.
110
Jondolf @jondolf.bsky.social · 01/02/2026
Initial support for joint motors has finally landed on Avian's main branch! #bevy #physics #simulation github.com/avianphysics/avian/pull/913
16810
Jondolf @jondolf.bsky.social · 17/01/2026
A separate Avian 0.6 feature release with new functionality and improvements will be published when it is ready, hopefully in time for Bevy Jam #7 🤞 There are some cool things coming in that one ;)
060
Jondolf @jondolf.bsky.social · 17/01/2026
I just released version 0.5 of Avian, an ECS-driven physics engine for @bevy.org. This is the first update under our new release process, where we publish Bevy version updates separately from feature releases. As always, an announcement post can be found here: joonaa.dev/blog/11/avia...
joonaa.dev
Avian Physics 0.5 - Joona Aalto
Bevy 0.18 support
214319
Jondolf @jondolf.bsky.social · 15/01/2026
A quick blog post on some recent changes and improvements to Avian's development, including new release and migration guide processes, a GitHub organization, and a dedicated Avian Dev Discord server. Also a brief update on plans for the 0.5 and 0.6 releases 😉 joonaa.dev/blog/10/evol...
2476
Jondolf @jondolf.bsky.social · 26/11/2025
For reference, Rapier's KCC only considers one plane at a time (but does more iterations) and doesn't do depenetration. It performs fine with basic sliding, but *really* struggles with even mildly complicated geometry. Very jittery in multi-plane cases, and a whole 6 ms against the end of the tube 😬
110
Jondolf @jondolf.bsky.social · 26/11/2025
You can also run this in parallel for many character controllers, so I would expect you to be able to have hundreds or thousands of characters moving around simultaneously in most scenes. I haven't tested this yet though! Would be a cool benchmark.
130
Jondolf @jondolf.bsky.social · 26/11/2025
Depends on geometry. In this scene: no collisions: ~5 us sliding along two flat surfaces: 40-50 us the side of the flight mask's tube: 400-500 us the end of the flight mask's tube: 600-800 us Most collision geometry in games should be fairly low-detail and cheap, unlike the flight mask here.
100
Jondolf @jondolf.bsky.social · 25/11/2025
@janhohenheim.bsky.social and I have been cooking this up over the past couple of weeks, but many others have also taken part. Special thanks to UB for a lot of early experimentation, IQuick143 and unpairedbracket for math help, and vero and several others for testing and feedback <3 you all rock!
040
Jondolf @jondolf.bsky.social · 25/11/2025
Note that this currently just includes a MoveAndSlide system parameter and related utilities. More user-friendly ECS-driven APIs, character controller features, and examples will come later.
120
Jondolf @jondolf.bsky.social · 25/11/2025
Our implementation comes with a robust (somewhat novel?) multi-plane velocity solver and depenetration, to minimize cases where you get stuck or encounter jitteriness. Preliminary results in testbeds and @janhohenheim.bsky.social's Source-inspired KCC bevy_ahoy are looking great!
140
Jondolf @jondolf.bsky.social · 25/11/2025
Avian finally has built-in move and slide, the movement and collision algorithm at the heart of kinematic character controllers! #bevy #gamedev #physics #kcc PR: github.com/avianphysics...
417520
Jondolf @jondolf.bsky.social · 18/10/2025
I have some more ideas for improving our processes, namely adding a contribution guide, collecting some useful learning reasources for physics simulation, and also switching to a more frequent release cadence with smaller, more incremental releases, but I'll have to chew on those some more.
040
Jondolf @jondolf.bsky.social · 18/10/2025
After seeing the old Avian URL for so long, it does look a bit weird now 😅 But I think it's good long-term, just a matter of getting used to it :)
150
Jondolf @jondolf.bsky.social · 18/10/2025
Wait... Was that a different URL I see? Yup! The Avian repository is now under a new Avian Physics organization instead of my personal profile. This is more professional, and more importantly, it lets us give people triage permissions to label or close issues and PRs, among other things.
140
Jondolf @jondolf.bsky.social · 18/10/2025
This has several major benefits: main branch users have migration guides available, the guides are kept up-to-date (and written by the people who made the changes), and I don't have to crunch at the end of each cycle to gather them from scattered PRs and spend ages fixing and updating them.
130
Jondolf @jondolf.bsky.social · 18/10/2025
Avian is getting pretty big nowadays! To mark the start of a new release cycle, I spent some time improving our processes moving forward. Notably, Avian now stores migration guides in-repo, similar to Bevy: github.com/avianphysics...
github.com
Store migration guides in the repository by Jondolf · Pull Request #867 · avianphysics/avian
Objective Closes #742. Until now, we have had the following process: Each PR that has a breaking change is marked with C-Breaking-Change, and gets a ## Migration Guide section At the end of the re...
2374
Jondolf @jondolf.bsky.social · 13/10/2025
I just released version 0.4 of Avian, an ECS-driven physics engine for @bevy.org. This is the biggest release yet, featuring 3x performance(!), overhauled forces and joints, voxel colliders, Bevy 0.17 support, and much more. As always, release notes can be found here: joonaa.dev/blog/09/avia...
joonaa.dev
Avian Physics 0.4 - Joona Aalto
Massive performance improvements, and overhauled forces and joints
28013
Jondolf @jondolf.bsky.social · 27/09/2025
Right now, the persistent nature of the implementation can make rollback networking trickier, so I kept an option to globally disable islands if they're causing problems (or if sleeping isn't needed). In the future, we might want to consider adding a non-persistent version as an alternative as well.
040
Jondolf @jondolf.bsky.social · 27/09/2025
Avian's implementation persists islands across time steps, minimizing island building and splitting overhead. It is primarily based on @erincatto.bsky.social's excellent Simulation Islands article and Box2D. box2d.org/posts/2023/1...
box2d.org
Simulation Islands
Island management is a fundamental low level feature of physics engines and can have a big impact on solver design and performance. This was one of the first problems I decided to work on for Box2D ve...
140
Jondolf @jondolf.bsky.social · 27/09/2025
Previously, Avian only supported much simpler "per-body sleeping" that did not allow stacks of bodies or bodies connected by joints to fall asleep properly. This was always intended as temporary, but at least now we finally have the real thing :)
130
Jondolf @jondolf.bsky.social · 27/09/2025
Today, I finally merged simulation islands for Avian! Islands are graph-like structures where bodies are connected via contacts or joints. They are used for sleeping and waking, which is crucial for reducing CPU overhead for large scenes with many dynamic bodies. github.com/Jondolf/avia...
github.com
Persistent Simulation Islands by Jondolf · Pull Request #809 · Jondolf/avian
Objective Closes #578. Sleeping and waking are crucial for reducing CPU overhead for large game worlds. Up until now, Avian has used basic per-body sleeping that only allows sleeping for dynamic bo...
2243
Jondolf @jondolf.bsky.social · 06/09/2025
Mesh slicing
2474