Oh I am glad you are curios.
yes that’s a legitimate question.
In you example the object is the room that are wooed by an aggregate will interact with each object in eh broad phase scene graph, the reason is that an aggregate is just a a tree node of the prophase that happen to intersect its submit pair function.
The broad phase thinks the aggregate is a terminal node, so there are only five collision possibilities
1-Self aggregate collision, this is just a recursive call the submit pairs with the root node of the garage as root objects. This is the only part that is new and different the compound collision.
2- Single node vs single node (we have that already)
3- Single node vs aggregate (this recursive call to submit with the single and the root of the aggregate as arguments), the case is borrowed and edited from compound vs simple collisions
4- Aggregate vs single node (same as above but with the arguments transposed), also borrowed and edited from compound vs simple collisions.
5- Aggregate vs Aggregate node (a call to submit pair using the method the was used in newton 3.12
and lower), also borrowed and edited from compound vs simple collisions.
Say 20 objects in a room are in a aggregate. Character is entering room an picks up one object.
Would that result in distance checks between ALL 20 objects in the room and the character
(If the character is a aggregate ragdoll, that would lead to 20 x 20 checks - quickly loosing the advantage)
The above method will prevent that from eve happens, because this isl fall on case 5,
which is a summit pair bewteen two hierarchical aabb trees, just lei compound vs compound is doing already.
Yes you are current is object get out of the room the bound of the aggregate will grow by a very large size and the will make the aggregate overlap with lmao abet child body turn the tree into a N x N search.
But that violates the criteria for making an aggregate which is that the bound will remain unchanged for long periods of times.
In these cases the client app can do few things.
1-No use aggregate for those cases.
2-Use aggregate and do nothing.
3-Use Aggregate destroys it if the bound grows too large.
4-Use Aggregate and only remove the body the leaves the aggregate
For that there is interface for destroy aggregate and add and remove body, I need to add one for reading the Bounds so the client app can make those checks.
I probably need to make a test demo to show that.