Jorrit Rouwe Profile
Jorrit Rouwe

@jrouwe

Followers
2,458
Following
145
Media
22
Statuses
226

Lead Game Tech Programmer at Guerrilla Games, creator of the Jolt Physics library. @jrouwe @mastodon .gamedev.place

Joined November 2009
Don't wanna be here? Send us removal request.
Explore trending content on Musk Viewer
@jrouwe
Jorrit Rouwe
11 months
v4.0.0 of Jolt Physics was released. Most important new features: * Added support for soft bodies (still in development). * Support 2D simulations * Support for surface velocity * Support non-power of 2 height fields
8
91
761
@jrouwe
Jorrit Rouwe
1 year
Jolt Physics reached 4k github stars! Thanks to everyone who starred it! (and if you haven't starred it, please do!). Also thanks to Unity for helping speed up Jolt's adoption rate by changing business model.
Tweet media one
10
48
646
@jrouwe
Jorrit Rouwe
1 year
Been working on multi threading soft bodies for Jolt Physics. This 10K vertex cloth + 121 boxes can now be multi threaded and runs in ~2ms (3x faster than before), when you have multiple soft bodies the speed up can be 4x and there's more to come.
9
68
612
@jrouwe
Jorrit Rouwe
1 year
Jolt Physics got soft body physics today! There's still a lot of performance optimizations to be done, but you can start playing around with it!
10
77
474
@jrouwe
Jorrit Rouwe
1 year
Jolt now has official support for 2D physics!
4
35
306
@jrouwe
Jorrit Rouwe
1 year
I just released Jolt Physics v3.0.0. It includes double precision simulation, performance optimizations for large islands and experimental motor cycle support.
4
47
249
@jrouwe
Jorrit Rouwe
2 years
Jolt Physics now supports splitting large islands across multiple CPU cores. This can speed up the simulation of large piles of rigid bodies up to a factor of 4!
Tweet media one
6
38
208
@jrouwe
Jorrit Rouwe
1 year
Jolt Physics now supports setting the surface velocity of a body. Conveyor belts here we come!
3
21
213
@jrouwe
Jorrit Rouwe
1 year
I've added experimental motorcycle support to Jolt Physics. It will probably require a lot of tweaking / hacks to include it in a game. But it's fun to drive around!
1
16
198
@jrouwe
Jorrit Rouwe
2 years
Jolt Physics is now deterministic across platforms! Amazed at how compiling in 'precise' mode makes floating point calculations exactly the same across platforms (Windows vs Linux vs MacOS) and even compilers (MSVC vs clang)! Only trigonometric functions needed fixing.
6
14
152
@jrouwe
Jorrit Rouwe
1 year
Have been playing around with deformable heightfields for Jolt Physics this weekend. Was surprisingly hard given that the whole thing is block compressed and has a hierarchical acceleration structure for fast queries.
2
10
132
@jrouwe
Jorrit Rouwe
1 year
Mihe just created the first release of Godot Jolt, this is so cool to see! Let's hope many games will be made with it! @thatmihe
2
15
71
@jrouwe
Jorrit Rouwe
2 years
A major milestone for Jolt Physics! It can now be compiled with support for double precision positions to support much larger worlds.
0
9
63
@jrouwe
Jorrit Rouwe
10 months
Thanks to @phoenixillusion we now have cars, motorcycles and tanks in JoltPhysics.js (JavaScript). See the demos here:
Tweet media one
2
4
55
@jrouwe
Jorrit Rouwe
1 year
X4 has switched over to Jolt Physics in this update!
@EGOSOFT
EGOSOFT
1 year
Time to head out for your long-awaited reunion with the Boron 🪐 #X4KingdomEnd and X4 Update 6.00 are now available! @Steam ➡️ @GOGcom ➡️ #GameRelease #GameDev #SpaceGames #SandboxGames
12
49
202
1
1
42
@jrouwe
Jorrit Rouwe
9 years
1
11
26
@jrouwe
Jorrit Rouwe
1 year
Thanks for making Jolt part of the potato meme!😁
@Bimbam_tm
Beau Seymour
1 year
You like your potato physics baked in high quality? Go watch my new clip on YouTube!: #Starfield #gamedev #GodotEngine #indiedev #solodev #madeingodot #screenshotsaturday
0
1
32
2
1
39
@jrouwe
Jorrit Rouwe
1 year
@AustinFacey I enjoy making things and I enjoy it even more when other people want to use the things I make. For me it was a no-brainer to give it away for free.
2
0
35
@jrouwe
Jorrit Rouwe
1 year
@reduzio Thanks for the shout out! It has been a lot of fun supporting this project. Soft body is very high up on my todo list!
1
0
26
@jrouwe
Jorrit Rouwe
10 months
@mnenoff The first problem has been fixed:
@thatmihe
Mikael Hermansson
11 months
This is long overdue, but I'm happy to say that we finally have Android and iOS support in Godot Jolt as of version 0.10.0. Android support in particular should be of interest to you #VR people out there. #GodotEngine
3
24
154
2
1
22
@jrouwe
Jorrit Rouwe
1 year
@AlmostMikhail Can you send me that godot scene? I'd like to profile it. Jolt should easily handle 2000 bodies, the video below shows that it has no problems rendering 2000 bodies at 60 fps (this is from the Jolt sample app).
3
0
21
@jrouwe
Jorrit Rouwe
2 years
Missed this one. Cool to see Jolt being used!
@theCGchannel
CG Channel
2 years
Light Tracer Render 2.4 is out The GPU renderer now uses Guerrilla Games' Jolt physics library, making it possible to place objects in a scene and have them settle naturally under gravity More details: #rendering #visualization #gamedev
0
7
20
0
1
19
@jrouwe
Jorrit Rouwe
1 year
@fodinabor @reduzio Announcement of my GDC talk about Jolt:
0
0
17
@jrouwe
Jorrit Rouwe
1 year
@AlmostMikhail The simulation time of those 2000 bodies doesn't exceed 3 ms per frame.
Tweet media one
3
0
13
@jrouwe
Jorrit Rouwe
2 years
@SebAaltonen If you have something working, I'd be interested in taking a look, maybe even supporting it officially. To get around the SIMD issue I could make a SIMD-less version of Vec3/Mat44 etc. Note that I have zero experience with WASM at the moment.
1
0
11
@jrouwe
Jorrit Rouwe
1 year
@HugoLocurcio I haven't done any comparisons. Algorithms in 2D are a lot simpler than in 3D so I would expect an optimized/multithreaded 2D physics engine to beat Jolt in 2D, but Jolt will allow you to mix 2D and 3D or have multiple 2D layers at different depths in a single world.
0
0
9
@jrouwe
Jorrit Rouwe
1 year
@wojtekpil @AlmostMikhail That's my suspicion too, so that's why I would like to profile it🙂
2
0
9
@jrouwe
Jorrit Rouwe
2 years
We've opened up 2 position on the Game Tech team at Guerrilla! Interested in animation programming or interested in working on a framework to collect lots of data from the game?
0
0
8
@jrouwe
Jorrit Rouwe
1 year
@alidjih It's XPBD with tetrahedron volume constraints (the yellow cube bouncing behind the cloth is using that)
1
0
8
@jrouwe
Jorrit Rouwe
1 year
1
0
6
@jrouwe
Jorrit Rouwe
1 year
@SSNTails Easy is a big word, but it is definitely possible. Difficulty is in getting the hat exported with a spring setup, but once that's done it should be easy.
1
0
7
@jrouwe
Jorrit Rouwe
2 years
@erin_catto No it's still cross platform deterministic and I didn't notice a difference in stability either.
0
0
6
@jrouwe
Jorrit Rouwe
2 years
@MichalZiulek No it doesn't change the API
0
0
6
@jrouwe
Jorrit Rouwe
1 year
@ccreikey The positions still have a Z and can be set to any value (and will remain at that position)
0
0
4
@jrouwe
Jorrit Rouwe
2 years
@dimroc AMD vs Intel is working, ARM is not yet the same (still working on it).
1
0
4
@jrouwe
Jorrit Rouwe
1 year
@ZoldenGames Yes, every vertex in it has mass
1
1
3
@jrouwe
Jorrit Rouwe
1 year
@lateasusual_ You could probably use both a wheeled AND tracked vehicle on the same body to make a half track
1
0
2
@jrouwe
Jorrit Rouwe
1 year
@PierreTerdiman Totally agree!
0
0
3
@jrouwe
Jorrit Rouwe
2 years
@SubstrataVr Triangle mesh vs triangle mesh collision detection is quite expensive. Normally you would convert the triangle mesh of the dynamic object into a StaticCompoundShape of ConvexHullShapes using convex decomposition (see e.g. )
0
0
3
@jrouwe
Jorrit Rouwe
1 year
@lateasusual_ Looks good! Are you using 2 vehicle constraints now?
1
0
3
@jrouwe
Jorrit Rouwe
1 year
@phys_ballsocket @SheriefFYI I knew it was wrong on Linux ARM but it seemed to work fine on x86. In any case: the function is only used for profiling, so for normal users of the lib it doesn't matter what the function returns (eg WASM returns 1).
2
0
3
@jrouwe
Jorrit Rouwe
2 years
@dotstdy And it actually turned out that there was an issue with sorting but it did not show up until I started comparing ARM vs x86 :). Thanks for the tip!
0
0
2
@jrouwe
Jorrit Rouwe
2 years
@raiganburns @santagada @reduzio @nvidia Personally I think that there are so many approximations in any physics engine that I doubt that SAT is going to make it much more accurate than EPA, but I'm more than willing to implement SAT to find out.
1
0
3
@jrouwe
Jorrit Rouwe
2 years
@SheriefFYI Fancy tool! I rearranged some code in ObjectStream and got the library to compile 20% faster!
0
0
2
@jrouwe
Jorrit Rouwe
2 years
@3dflashlo Yes, JavaScript version is single threaded currently, although if I read the docs correctly it should be a matter of passing a compiler flag
0
0
2
@jrouwe
Jorrit Rouwe
2 years
@dotstdy Actually it's a lot, it's about 2.5x slower to run it in precise math vs fast math. Luckily it's an option, so if you don't care about cross platform determinism you don't need to turn it on.
0
0
1
@jrouwe
Jorrit Rouwe
2 years
@dotstdy I see I made a big mistake. I compared Debug mode with Release mode. The total difference is only 8% and it comes mainly from the constraint solver which is about 40% slower (logical because it is the most float heavy part) :)
0
0
1
@jrouwe
Jorrit Rouwe
1 year
@AmerKoleci In my tests it was 5-10% slower to use doubles
0
0
2
@jrouwe
Jorrit Rouwe
11 months
@ian_snyder @thatmihe Cool project! I never looked at the Unreal code, but from what I have heard there was a period that it supported PhysX and Chaos through an abstract interface. I think PhysX support got removed together with the abstract interface. If this is true integrating Jolt is difficult.
1
0
1
@jrouwe
Jorrit Rouwe
1 year
@ZoldenGames CPU only for now
0
1
2
@jrouwe
Jorrit Rouwe
1 year
@rrza @chribbe1 They're Euler angles in radians as far as I can see. And as far as contributing goes: Let us know what is not working / what is limiting. The API is defined by Godot so is pretty much a given but it is possible to create custom joints, see e.g.
1
0
2
@jrouwe
Jorrit Rouwe
2 years
@SebAaltonen @anders_breakin For now it always compiles without SIMD so should work in safari too. With a little bit more work we could compile 2 versions.
0
0
1
@jrouwe
Jorrit Rouwe
2 years
@anders_breakin @MichalZiulek I'm currently looking into supporting wasm myself (just starting, no promises yet as I have never worked with it).
1
0
2
@jrouwe
Jorrit Rouwe
3 years
@PierreTerdiman User data on body and shape is now u64
0
0
2
@jrouwe
Jorrit Rouwe
2 years
@SebAaltonen Nice! If you need any help integrating then don't hesitate to reach out!
0
0
2
@jrouwe
Jorrit Rouwe
11 months
@Timsecond2 Most of it already is, Godot Jolt tracks the master branch of Jolt, so it gets updated every week or so while I only release a new official version infrequently.
0
0
2
@jrouwe
Jorrit Rouwe
3 years
@PierreTerdiman Just send me the PEEL source code and give me the plugin code you have so far (PhysX plugin would be nice as an example but not needed). I'll finish it up for you.
0
0
2
@jrouwe
Jorrit Rouwe
2 years
@MichalZiulek Looking good! Some small remarks: AssertFailedImpl is unused (you're compiling without JPH_ENABLE_ASSERTS so asserts are not availble). Also I would static_assert all the constants (e.g. JPH_SHAPE_TYPE_CONVEX) as I can't guarantee they will be stable.
2
0
2
@jrouwe
Jorrit Rouwe
1 year
@justinb75631302 @Bimbam_tm Better performance, more stability
1
0
1
@jrouwe
Jorrit Rouwe
10 months
@DavitMasia The only comparison I've seen is:
@ErikSombroek
Erik Sombroek
2 years
Jolt Physics in PlayCanvas! averaging at 130ms frame time with 1770 objects at 600kb filesize! This beast is powering physics in Horizon Forbidden West. Many thanks to @jrouwe for the help. #webgl @playcanvas #javascript #physics #gamedevelopment
1
1
14
1
0
1
@jrouwe
Jorrit Rouwe
1 year
@BattleAxeVR @SergeyMakeev I spend a lot of time answering github questions (and I think I answer them all), which questions are we talking about?
1
0
1
@jrouwe
Jorrit Rouwe
10 months
1
0
1
@jrouwe
Jorrit Rouwe
1 year
1
0
1
@jrouwe
Jorrit Rouwe
11 months
@ccreikey I don't think so. Although XPBD can be used for rigid bodies, it's most popular for soft bodies / cloth.
0
0
0
@jrouwe
Jorrit Rouwe
3 years
@PierreTerdiman Trying to make a unit test to repro this, but I can't make it happen. Can you try changing the code to this? (and if that doesn't work give me inPolygonToClip, inPlaneOrigin and inPlaneNormal).
Tweet media one
1
0
1
@jrouwe
Jorrit Rouwe
2 years
@MichalZiulek Also I'm wondering if something like JPH_BodyCreationSettings_InitDefault() { JPH_BodyCreationSettings cs; ::new (&cs) JPH::BodyCreationSettings; return cs; } would be safer (less repeating of constants from inside Jolt).
0
0
1
@jrouwe
Jorrit Rouwe
1 year
@rrza @chribbe1 Not sure what you're looking at, for me it looks like this. Almost everything is implemented now. Some settings we could not reverse engineer the intention because they are also not working in Godot Physics.
Tweet media one
3
0
1
@jrouwe
Jorrit Rouwe
2 years
@dimroc Sorry, I don't have enough experience with those to give you a good advice.
0
0
1
@jrouwe
Jorrit Rouwe
1 year
@lateasusual_ Yes you can disable stuff on the second constraint. Since you have 2 engines with 2 vehicle constraints, you probably want to set the transmission to manual for the front wheels and set it to neutral always so that all propulsion comes from the tracks.
0
0
1
@jrouwe
Jorrit Rouwe
2 years
@AmerKoleci I don't know (code is the same), perhaps they embed the debug symbols? Try removing -g in CMakeFiles.txt
1
0
1
@jrouwe
Jorrit Rouwe
1 year
@gustafamalada Oh, and thanks for the doc reference. I've updated it.
0
0
1
@jrouwe
Jorrit Rouwe
1 year
@gustafamalada MeshShape vs MeshShape or MeshShape vs HeightFieldShape collisions are not supported, so you can have a kinematic mesh as long as it doesn't collide with any of those shapes. Where did you find this in the documentation? (this used to be true in an older version of the library)
1
0
1
@jrouwe
Jorrit Rouwe
1 year
@gustafamalada The volume of an arbitrary mesh cannot be computed so the mass cannot be calculated so it needs to be provided
1
0
1
@jrouwe
Jorrit Rouwe
1 year
@SubstrataVr @Lo_Rezzed You can make this work by doing a convex decomposition of the torus (make a StaticCompoundShape of torus segments). Make sure that the segments don't overlap because overlapping volumes will mess with the buoyancy calculations.
1
0
1
@jrouwe
Jorrit Rouwe
1 year
@thatmihe @Bimbam_tm But I don't know of any generic solution that would allow the bottom bodies to sleep while the top ones are active.
0
0
1
@jrouwe
Jorrit Rouwe
1 year
@BattleAxeVR @SergeyMakeev You only need to implement these functions: . If you leave DrawText3D empty then it should be quite simple to map them to a vertex buffer and render them.
1
0
1
@jrouwe
Jorrit Rouwe
3 years
@PierreTerdiman raycasts see meshes as double-sided -> see RayCastSettings::mBackFaceMode is there a way to accurately compute memory usage -> already replied in other tweet s there a way to share shapes -> yes, shapes are refcounted you can attach them to as many bodies as you like
2
0
1
@jrouwe
Jorrit Rouwe
1 year
2
0
1
@jrouwe
Jorrit Rouwe
1 year
@thatmihe @Bimbam_tm I'm guessing that if you have some very specific domain knowledge (like knowing they are in a vault and that the bottom of the pile cannot move) that you could mark certain bodies as static until the layers on top of them start accumulating velocity.
1
0
1
@jrouwe
Jorrit Rouwe
2 years
@dotstdy I need to profile still. I just got it all working :)
0
0
0
@jrouwe
Jorrit Rouwe
1 year
@BattleAxeVR @SergeyMakeev What we did is to override the debug renderer to render using our own render engine. That way you can see the physics view and the game view at the same time. I've worked with VD's before but imo nothing beats in game view.
1
0
1
@jrouwe
Jorrit Rouwe
2 years
@andreas_longva I've added some documentation on how it works here: (section Solve Velocity Constraints)
0
0
1
@jrouwe
Jorrit Rouwe
2 years
@SnailMailCorp Yes it is usable with doubles
1
0
1
@jrouwe
Jorrit Rouwe
1 year
@CynicatPro No, it's because of the block compression algorithm and because each block depends on its surrounding blocks (you need triangles to connect to the next block).
1
0
1
@jrouwe
Jorrit Rouwe
2 years
@anders_breakin I'm currently building a version without simd and Jolt can easily run on 1 thread. I was going to try emscripten but as said have 0 experience so don't know what I am going to run into.
0
0
1
@jrouwe
Jorrit Rouwe
1 year
@N_Irvin81 @marcellus00 I have not seen that section, but I'll take a look tomorrow.
0
0
1
@jrouwe
Jorrit Rouwe
2 years
@dimroc I just submitted a fix that should make the simulation deterministic between x86 and ARM too.
1
0
1
@jrouwe
Jorrit Rouwe
1 year
@SandorHQ Godot Jolt is compiled with the latest stable version of Godot, Godot 4.2 is not binary compatible
1
0
1
@jrouwe
Jorrit Rouwe
3 years
@PierreTerdiman Hey, good to see that you're integrating this into PEEL! In both your stress tests everything is basically in a single simulation island. For my use cases this never happens, so I did not spend any time trying to split a simulation island across multiple CPU cores.
1
0
1
@jrouwe
Jorrit Rouwe
10 months
@twgage @phoenixillusion We have tried running it multithreaded, but there appears to be a bug in Safari that prevents it from working (other browsers work). See: and
0
0
1