PhysxJointAxisAPI#
Per-axis PhysX properties of an articulation joint (armature, maximum joint velocity, static, dynamic and viscous friction), applied as PhysxJointAxisAPI:
Applies to:
PhysicsJointMulti-apply: applied as
PhysxJointAxisAPI:<instance>;<inst>in a column name is the instance. Instances:angular,linear,rotX,rotY,rotZ.Read only when listed in
usd-schemas.
What USD population writes#
All five declared attributes of every applied instance are published at their resolved values. physxJointAxis:
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 |
|---|---|---|---|---|---|---|
|
float32 |
linear/transX..Z: mass; angular/rotX..Z: mass*length^2 |
0.0 |
resolved USD value (authored, else raw fallback) |
0.0 |
The joint-level physxJoint:armature (or 0) survives on this axis. Because 0 is both the schema fallback and a legal authored value and the authored bit is unavailable on ovstage, only a strictly positive per-axis value displaces the seed. |
|
float32 |
linear: length/s; angular/rotX..Z: deg/s (deg_to_rad) |
|
when unauthored: |
|
The joint-level physxJoint:maxJointVelocity, then newton:velocityLimit, then FLT_MAX survive on this axis. A value >= FLT_MAX counts as unauthored. |
|
float32 |
linear: force; angular: torque |
0.0 |
resolved USD value (authored, else raw fallback) |
0.0 |
No static friction on this axis. |
|
float32 |
linear: force; angular: torque |
0.0 |
resolved USD value (authored, else raw fallback) |
0.0 |
No Coulomb friction on this axis. |
|
float32 |
linear: forces/length; angular: torques/deg |
0.0 |
resolved USD value (authored, else raw fallback) |
0.0 |
No viscous friction on this axis. |
Interactions#
PhysxJointAPI: physxJoint:armature and physxJoint:maxJointVelocity are the seeds this API overrides per axis; the joint-level armature is read even when no instance is applied.PhysicsJoint: On a standalone joint every applied instance is removed from the prim with a ‘supported only for joints that are part of an articulation’ warning.
Known divergences#
fragile (consumer)
physxJointAxis:<inst>:armature: Only a strictly positive per-axis armature displaces the joint-level seed, because 0 is both the fallback and a legal authored value and the authored bit is unavailable on ovstage. Consequence: an explicit per-axis armature of 0 cannot override a non-zero physxJoint:armature. Documented and accepted (ADR-0002 invariant 1).
Notes#
Per-joint-type instance matrix: Fixed none; Revolute angular; Prismatic linear (no rotational conversion); Spherical rotX, rotY, rotZ (all three, each with rotational conversions); Distance none; D6 (PhysicsJoint) rotX, rotY, rotZ only, translational axes are never read; Gear, Rack, Custom none.
Articulation axis mapping: angular and rotX -> PxArticulationAxis::eTWIST; rotY -> eSWING1; rotZ -> eSWING2; linear -> eX.
The D6 descriptor’s jointProperties always has exactly three entries (rotX, rotY, rotZ) even when no instance is applied; unapplied entries carry the joint-level seeds.
Unrecognised instance names fall back to a runtime internToken(‘PhysxJointAxisAPI:’ + inst) and are read the same way.