Using CollisionGroups would solve the issue of having to create a bunch of separate rules. Instead of a combinatorial explosion, just set the bones' entity.CollisionInformation.CollisionRules.Group to a shared BonesGroup. Then, specify a rule NoBroadPhaseRule between the BonesGroup and itself, and the BonesGroup and the CollisionRules.DefaultDynamicCollisionGroup. The bones will then only collide with other collision groups, like the CollisionRules.DefaultKinematicCollisionGroup which contains any kinematic object and the static mesh.
These rules can be added using a helper method:
CollisionGroup.DefineCollisionRule(BonesGroup, CollisionRules.DefaultDynamicCollisionGroup, CollisionRule.NoBroadPhase);
CollisionGroup.DefineCollisionRule(BonesGroup, BonesGroup, CollisionRule.NoBroadPhase);
However, this may not even solve the performance issue on the Xbox. The majority of the collisions were likely between the mesh and the bones anyway. To know if it's possible to keep all the physical interactions, more information about the nature of the slowdown is required. Some data collection options:
-The development version can be compiled with the PROFILE compilation symbol to expose per-stage timings.
-Run a full profiler on the game to drill deeper than per-stage timings; check if there's any unexpected hotspot in the code. Spending a long time trying to improve performance on the wrong thing would be silly
A couple of possible general improvements:
-Reduce complexity of any convex hulls used by the bones to see if it helps. If switching to boxes or spheres helps a lot, then the convex hulls were likely too complicated. If the bones are all simple primitives already, this probably won't be a productive avenue.
-Make things go to sleep faster. Use a higher Space.DeactivationManager.VelocityLowerLimit and a lower Space.DeactivationManager.LowVelocityTimeMinimum.
If the simulation ends up just being too large for the Xbox, then trickier methods can be used. Instead of keeping every bone around for a fixed time, maintain a priority queue of bones. As more bones spawn, compare it against some threshold of bones you know the Xbox can run. If it is exceeded, start removing low-priority bones from the space. This stabilizes the performance of the game while keeping the most important stuff around (the stuff you just killed and the bigger pieces).
However, even if it runs fast enough, there might be an issue: if you plan on implementing networking in the future, it is likely that the bones will still need to have their collision rules adjusted (no player-related collisions) to prevent the need to synchronize them across the network.