Project Chrono for games

Skip to first unread message

Markus S

Dec 27, 2021, 7:53:47 AM12/27/21
to ProjectChrono


I'm looking to develop a vehicle simulation and saw chrono which looked really promising. However after playing with some demos and implementing a basic example into my engine showed, that it doesn't take much to make chrono struggle . If I have 100 simple cubes falling onto a plane, as soon as collision occurs, chrono slows the application down really heavily. Talking about frame times of about 200ms.

Also some demos are performing really poorly once the bodies hit the ground or collide with other bodies.

Did I miss something or is chrono not meant to provide real-time physics?


Dec 27, 2021, 11:24:58 AM12/27/21
to ProjectChrono
actually, Chrono IS meant to provide real-time physics. I can run demo_IRR_bricks.exe on my PC, simulating 150 bricks, at 0.5 RTF (so twice as fast as real time). 
Make sure that you are setting everything right, such as:
- building in Release
- Using non-smooth contact for contact intensive problems (ChSystemNSC)
- Using primitive geometries wherever possible instead of meshes or hulls 
Ideally, sharing your code would greatly help us helping you.

Markus S

Dec 27, 2021, 2:09:38 PM12/27/21
to ProjectChrono

thanks for the quick response!

I tested it now with the release build. Given a scene that only renders 100 cubes with no texture I have:

2200 FPS without letting the ChSystemNSC step - so I guess this is the performance without any physics
2100 FPS with an active ChSystemNSC if the cubes don't collide with anything
550 FPS as soon as the cubes hit the ground and remain on the ground.

Is this what the performance should look like? 

Maybe I should also mention that I'm probably not using OpenMP or Thrust with Chrono. If I understand the docs correctly, that means that Chrono uses Bullet for collisions, so would that mean that the performance would increase by a large amount if I would use Chrono for collisions (with Thrust enabled)?


Alessandro Tasora

Jan 5, 2022, 6:23:31 AMJan 5


your numbers make sense to me. I have similar performances on my laptop.

Note: OpenMP is enabled in CMake by default, why are you disabling it? Also: Thrust is not needed for the core Chrono functionalities.

Alessandro Tasora

You received this message because you are subscribed to the Google Groups "ProjectChrono" group.
To unsubscribe from this group and stop receiving emails from it, send an email to
To view this discussion on the web visit

Radu Serban

Jan 9, 2022, 6:48:34 AMJan 9

A quick clarification: The core Chrono library can use Thrust now that I exposed an alternative parallel collision detection system (if Thrust is not available, that functionality is not included in the build and only the default Bullet collision detection system can be used).


Having said that,

  • you will likely not benefit (from a computational efficiency point of view) from the parallel collision detection anyway for the type of problems you describe.  That collision system is more appropriate for large granular dynamics problems.  (A second reason for implementing it is that, unlike Bullet, it can use more precise analytical narrow phase algorithms for certain pairs of collision shapes)
  • the version of the Bullet collision system currently implemented in Chrono can also take advantage of OpenMP parallelization. Depending on problem size and set up, this may or may not help computational speed (some experimentation will be required). So, keep OpenMP support enabled and then experiment with providing more threads for collision detection; see ChSystem::SetNumThreads.



Reply all
Reply to author
0 new messages