1000 Rigid Bodies Connected Together with 3000 Constraints Not Utilizing GPU

I am creating a simulation for an HCI/VR concept involving complex mechanical parts (think physical cockpit flight simulators) and am having performance issues, i.e. framerate is slow, with one of the components. As the title and image may suggest, the component behaves like a big rubber ball basically -

The RBs are equally distanced apart, linked, and can be as primitive as cubes but in this image they are I guess sort of extruded octagons, a la MMA cages. Each Constraint is a Generic Spring connecting 6-7 neighbors from the center of each RB, which allows it to expand and contract a bit more than rubber (more like pizza dough). Collision makes it suitable for manipulating with other components both on the exterior and in the hollow center. I have animations of this I could show if it would help in finding a way to get the most out of the system I have currently:

CPU - Intel gen 14th i9 14900HX
GPU - Nvidia RTX 4090 16GB VRAM
RAM - 32GB DDR5 5600Mhz
175W TDP

It’s a 2024 model laptop that runs Windows, however I started building the model for it on another 2022 laptop with an Intel XE GPU running Linux. With all this new power, practically as top of the line of a portable machine a consumer can get their hands on, it’s running in the Armory game engine at not much faster than the preceeding system at about 3 SECONDS PER FRAME. And almost always at 0% GPU UTILIZATION. The Bullet physics engine seems to work slightly differently in Armory compared to Blender’s native animation. I’ve used this GE for only a month, this laptop for only a week. And while I’ve tweaked with the settings and ensured everything is updated, it doesn’t make any sense why it shouldn’t be going up into at least the single-digit ‘frames per second’ rather than seconds per frame. This is both when I press ‘play’ in Blender and after publishing.

This is bearing in mind that while I do have prior coding experience, I am no engineer and haven’t written a single line of code for this, and this is the simplest and best hack I could think of to make the component and control it as per the simulation requirements. I’ve tried a myriad of other methods, and while ideally I’d want to have the spring action behave in one single object, similar to cloth and soft body physics, I’ve run into problems there, with collision detection not detected being one of them.

The reason for this many RBs is for the ease of getting bent in and out of shape. It’s hard to tell in this image, but there is also an RB inside the hollow center which consists of ~1000 faces and bumps against it. I gather this dramatically increases the number of calculations. In another simulation where there are about 1/3 of the number of RBs, laying flat on a plane, it runs a lot smoother and the GPU is helping it along a bit. I’m assuming that there’d be some way for the GE (I’m guessing Krom) to access the GPU and vice versa, but I might ultimately need to port it over somewhere else (UPBGE, Godot, Unreal, etc).

I will try to reach out to the laptop manufacturer, Microsoft, Nvidia, Blender Foundation, Python developers, etc, and am considering contacting Lubos directly, but am consulting here first as Blender’s community forums are themselves quite active.

This is especially critical as there are many more components to add, and for real-time interaction to be presentation-worthy, I’d be happy with like 3 FPS instead of 3 SPF! If I stick to just CGI animation, the operation of it gets lost, not to mention the baking time is long.

Any recommendations would be appreciated. Thanks in advance.

I’m using different engines now (one of the ones mentioned as alternatives in the original post) which harnesses NVIDIA’s Physx Engine - works just fine.