Add manager-owned declarative collision filtering - #7636
Conversation
Greptile SummaryThis PR introduces manager-owned declarative collision filtering and moves replicated-environment isolation into the clone lifecycle.
Confidence Score: 5/5The PR appears safe to merge with no concrete correctness, security, or repository-rule violations identified. The manager barrier, clone-plan propagation, and backend realizations are internally consistent, and the added tests cover the principal policy, lifecycle, isolation, and authored-filter preservation paths. Important Files Changed
Sequence DiagramsequenceDiagram
participant C as Scene or direct caller
participant R as Cloner
participant U as USD contexts
participant M as Physics manager
participant P as Native physics contexts
C->>R: Publish ClonePlan and isolation intent
R->>U: Replicate negative-priority stage rows
U-->>R: Assembled collider topology
R->>M: Apply isolation and declarative policy
M-->>R: Backend-specific filtering realized
R->>P: Replicate priority-zero-or-later rows
P-->>C: Constructed physics model
Reviews (1): Last reviewed commit: "Add manager-owned collision filter polic..." | Re-trigger Greptile |
There was a problem hiding this comment.
Isaac Lab Review Bot
The manager-owned collision-filter policy and clone-lifecycle barrier are coherently integrated across PhysX, Newton, and OvPhysX. One scalability concern remains in the default PhysX environment-isolation path: generated collision groups enumerate every collider instead of retaining compact environment-root membership.
- Design and architecture: The negative-priority stage contexts → manager collision-filter barrier → native physics contexts ordering is coherent, with environment isolation owned by cloning and semantic collider policy owned by PhysicsCfg. No actionable architecture issue was established beyond the PhysX representation-size concern.
- API: The new CollisionFilterCfg, CollisionGroupCfg, ClonePlan.env_template, and isolate_environments surfaces are exported, documented, and accompanied by migration guidance for the deprecated post-cloning filtering workflow. No supported public API break was demonstrated by the candidate findings.
- Implementation: PhysX currently emits explicitOnly generated groups containing one relationship target per collider. For the common isolation-only case, this replaces the previous single expandPrims environment-root target with collider-count-proportional authored data, materially increasing stage size for large replicated scenes. Preserve compact environment-root membership when an effective profile covers the whole environment.
Minor fixes needed. Posted 1 actionable finding inline.
Automated review; human maintainers own approval decisions.
| ) | ||
| expansion_rule.default = Usd.Tokens.explicitOnly | ||
| includes = Sdf.RelationshipSpec(group_spec, "collection:colliders:includes", False) | ||
| for path in profiles[profile]: |
There was a problem hiding this comment.
🟡 Warning · Implementation — Per-collider includes scale environment isolation
Generated groups use explicitOnly with one relationship target per collider path. On the default PhysX path (filter_collisions=True, no collision_filter cfg) each world forms a single profile, so authored targets grow from one env-root expandPrims include per environment to the total collider count across the stage — a large multiplier at thousands of environments. Keep env-root expandPrims includes when a profile covers a whole environment.
There was a problem hiding this comment.
Addressed in a23a984. The isolation-only path now returns through the existing compact _author_collision_groups helper, so it authors one expandPrims environment-root target per environment and never discovers or enumerates colliders. Per-collider explicit membership is retained only when a semantic collider-level policy is configured.
Description
Add backend-neutral, physics-manager-owned collision filtering while making replicated-world isolation a default cloner policy.
Architecture
CloneCfgowns clone strategy, environment template, physics replication, and world isolation.isolate_environments=Trueis the default.ClonePlancarries the resolved clone policy.InteractiveScenepasses its complete cloner configuration into planning; it neither owns nor applies collision filtering.cloner.replicate(plan)establishes one backend-independent assembly barrier: collider topology is assembled, the activePhysicsManagerrealizes collision policy, and native physics state is then built.PhysicsCfg.collision_filterowns collider-granular policy through namedCollisionGroupCfgentries. Prim selectors use whole-path regular-expression matching. Group relationships are symmetric, deny-wins, and support per-group allow-list inversion.This supports non-transitive policies such as robot-object and object-support contact with robot-support disabled. It also supports multiple collider representations on one asset: nut/bolt SDF colliders can contact only each other while their convex colliders remain active against other objects.
Backend realization
Compatibility and migration
InteractiveSceneCfg.filter_collisionsandInteractiveScene.filter_collisions()are removed; filtering is automatic at the physics-manager barrier.CloneCfg.replicate_physicsis canonical. The top-levelInteractiveSceneCfg.replicate_physicsfield remains as a deprecated compatibility alias and is normalized into a copiedCloneCfg.isaaclab.cloner.filter_collisions(), legacy low-level plan arguments, and asset/terraincollision_groupfields remain as deprecated compatibility surfaces.$), while descendant selection is expressed directly with patterns such as.*/colliders/convex.Type of change
Release backport
developScreenshots
Not applicable.
Validation
Native Isaac Sim stepping was not available in this workspace and is left to CI.
Checklist
pre-commitchecks with./isaaclab.sh --formatsource/<pkg>/changelog.d/for every touched packageCONTRIBUTORS.mdor my name already exists there