Fix rigid_body_writeback performance scaling #325
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Currently, the
RigidBodyWritebackComponents
query used by therigid_body_writeback
system is composed of anEntity
and severalOption<T>
components, with no concrete by-ref / by-mut borrow to prevent it from checking every entity in the world.This causes it to scale poorly in scenes with many entities. Consider an example scene with two RigidBody cubes and 8000 non-physics background meshes:
writeback_rigid_bodies
will check all 8002 objects despite only two of them being relevant, which reduces overall frame rate by ~60FPS in my local testing.This change adds
RapierRigidBodyHandle
to the query as a concrete by-ref borrow, and passes its inner handle directly to the rest of the system rather than looking it up viaentity2body
. This prevents irrelevant entities from being queried, and fixes the aforementioned performance deficit.