Erin Catto
@erincatto.bsky.social
I created Box2D. I enjoy all kinds of programming, but specialize in physics and animation. Working on The Legend of California.
Ok, new sokol+box3d integration sample is out: floooh.github.io/sokol-html5/... Had to disable WASM SIMD last minute because of a LLVM/Clang regression in emsdk 6.0.3 (will investigate and write a ticket later). Also comes with a breaking sokol_shape.h update: github.com/floooh/sokol...
Pushing Box3D to the limit. A pyramid with 16290 boxes. Stabilized by contact recycling. www.youtube.com/watch?v=vG4H...
Pushing Box3D to the limit
YouTube video by Erin Catto
youtube.com
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...
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...
box2d.org
Large world support is coming to Box2D v3.2. Uses doubles for body positions but all math is done in relative coordinates using single precision. Around 3% performance loss. www.youtube.com/watch?v=RwQr...
Double precision for larger worlds
YouTube video by Erin Catto
youtube.com
New recording and replay feature added to Box2D. Uses determinism to exactly reproduce the simulation for your game. Debug your game with all details including ray casts and other queries. Deterministic rollback too. box2d.org/posts/2026/0...
Replay
Replay is a new system I developed for Box2D. The main goal is to allow users to send me files I can use to reproduce bugs. Because Box2D is open source, I can rarely run a user’s game or see their co...
box2d.org
I added a native task scheduler people can use in Box2D. It is only 200 lines of C code. enkiTS is great, but having fewer dependencies is good for this project. It lets me run sanitizers more easily and have more control over performance. I'm still using Tracy for profiling.
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...
The Legend of California - First Look (Wishlist Now)
YouTube video by kintsugiyama
youtube.com
Unreal has simple and complex collision. But sometimes a piece of collision is both. I'm now calling this "simplex" collision.
They removed programming from the GDC. I thought games are software.
When your graphics programmer tells you to stop simulating off-screen cloth, show them this video.
A couple barriers to C development are lack of a fast sorting library and a fast hash set and map. I've found these two libraries to be excellent at providing those. They are macro based, but I think the trade-off is worth it. Both work with C99. github.com/svpv/qsort github.com/JacksonAllan...
Pinched wrists on ragdolls are caused by twist bone poses living in the animation data. Twist bones are procedural and computed based on the pose of animated bones, so they should computed as a post process at runtime to fix this. See www.youtube.com/watch?v=Jkv0... by @bobbyanguelov.bsky.social
I love physics based walking simulations. I'm also pleased the author was successful using Box2D (v3.1?) www.youtube.com/watch?v=aBp-...
AI Cat Learning to Run
YouTube video by Pezzza's Work
youtube.com
This video is great for teaching the basics of GJK. However, the approach is flawed for computing distance and only works for determining separation true/false. Unfortunately the author has disabled comments and people keep using this and ending up with broken code. www.youtube.com/watch?v=Qupq...
Implementing GJK - 2006
YouTube video by Casey Muratori
youtube.com
Box2D version 3.1 is released! Blog post: box2d.org/posts/2025/0... Release notes: github.com/erincatto/bo... Documentation: box2d.org/documentation/
Box2D 3.1
Version 3.0 was released about 8 months ago. It was a huge update and it needed some refinement. Version 3.1 addresses most of the bugs and build problems. It also introduces some new features and ref...
box2d.org
Conventional wisdom is that you need a complex and expensive direct solver to handle high mass ratios and long chains. Box2D has an iterative SoftStep solver that uses sub-stepping and soft constraints to handle high mass ratios and long chains.
I’ll be speaking about Box2D optimizations at the #GDC2025. I’ll be diving into the details of implementing fast continuous physics. This presentation has a new format I’ve developed recently. I’m really excited to share it! schedule.gdconf.com/session/opti...
Optimizing Continuous Physics in Box2D | 2025 Schedule | Game Developers Conference (GDC)
Attend 750 sessions for game designers, programmers, artists, producers, audio, business, and marketing professionals over 5 days at GDC.
schedule.gdconf.com
Tangent speed is a new Box2D surface property that lets you easily make conveyor belts or launch ramps like this. youtu.be/WUxqUSk79nE
Launch ramp
YouTube video by Erin Catto
youtu.be
Rolling resistance using a constraint so it works on ramps. www.youtube.com/watch?v=pRe6...
Rolling resistance
YouTube video by Erin Catto
youtube.com
Compile Score is so good. This view lets me find out how vector is getting included, even implicitly. github.com/Viladoman/Co...
I spent a day debugging a Linux server bug for our game. Apparently code like this is undefined behavior and Clang may optimize it to garbage (but not always). struct Vec { float x, y, z; }; Vec myVec; int index = 2; return (&myVec.x)[index]; // UB
The benchmark suite in Box2D has unlocked some easy optimizations. For example, how much should a bounding box be inflated? This is hard to answer without benchmarks. So I tried several values and ran the benchmarks for each one. Result is a 17% gain on this scenario and no regressions elsewhere.