PhysicsCollisionGroup#

A named set of colliders plus the list of groups it does not collide with. Discovered by prim type, not Xformable, so it carries no transform columns. Membership comes from the colliders collection; a collider may belong to one group only.

What USD population writes#

Published whenever the prim type is PhysicsCollisionGroup. Declared attributes (physics:invertFilteredGroups, physics:mergeGroup) are published at their resolved values; the three relationships only when authored.

Columns#

Raw fallback is the USD schema value. Producer writes is what ovstage population puts in the column for a USD stage. Parser default applies on the consumer when the column is absent, in stage units. diverges means writing the raw fallback literally parses differently from omitting the column (the parser default): USD population may well publish that very value for an unauthored attribute, so the marker is about the column being present, not about its value.

Column

Type

Units

Raw fallback

Producer writes

Parser default

If absent

physics:filteredGroups

uint64 array, RELATIONSHIP_PATH_ID

not written

This group collides with every group (or, with physxScene:invertCollisionGroupFilter on, with none). Targets are other PhysicsCollisionGroup prims, taken verbatim: no deduplication, no validation of the target type.

collection:colliders:includes

uint64 array, RELATIONSHIP_PATH_ID

not written

Empty group. Each include target is expanded through its active descendants after the excluded subtrees are removed; the flat list becomes the group’s members.

collection:colliders:excludes

uint64 array, RELATIONSHIP_PATH_ID

not written

Nothing excluded. Each exclude target and its descendants are removed from the include expansion.

Interactions#

  • PhysicsCollisionAPI: Members are colliders. The consumer inverts the per-group member lists into a collider-to-group map and keeps the FIRST group per collider, warning when a collider is in more than one.

  • PhysxSceneAPI: The filtering sense (filteredGroups lists what NOT to collide with, or what TO collide with) is the scene-level physxScene:invertCollisionGroupFilter, not the per-group attribute.

Known divergences#

  • note (consumer) physics:invertFilteredGroups: Declared by the schema, prefetched by the walker and used as the enumeration probe column, but never read into any descriptor: authoring it has no effect. Only the scene-level physxScene:invertCollisionGroupFilter changes the filtering sense. Not a column of this contract for that reason.

Notes#

  • physics:mergeGroup (string) and physics:mergeGroupName are not read by the consumer on this path; they appear in a unit test only.

  • No verify block: PhysX exposes collision-group filtering only through the filter shader’s PxFilterData, which the runtime encodes privately.