Requirements#

Summary#

Levels follow PCBA to USD Input Contract 1.0.2. Fields marked N/A are not authored on fiducial / mechanical placements; their pose and appearance fields are SHOULD.

  • Placement (CG.001) — every placement MUST carry pcba:component:side; electrical parts MUST also carry pcba:component:nominalPosMm (board-local x, y in mm) and pcba:component:nominalRotationDeg (about the board normal Z).

  • Anchor (CG.002) — the asset root MUST sit at a declared pcba:component:anchor; pcba:component:bodyCentroidLocal on the part and pcba:mesh:originOffset on the body mesh make placement deterministic when the mesh origin is off-body.

  • Body height (CG.003) — pcba:component:heightMm MUST be authored and greater than zero; a standard USD extent on the body mesh is recommended.

  • Pins (CG.005–CG.008) — pcba:component:pinCount MUST equal the number of pin prims; pcba:component:pinPitchMm is CONDITIONAL (when meaningful); each pin prim MUST carry pcba:pin:number (unique within the part) and pcba:pin:solderable (bool), with crossSection / terminalType / designator OPTIONAL; pcba:component:pin1PosMm is CONDITIONAL for keyed / orientation-sensitive parts. Boards have no pins: a board site names a pin with pcba:board:componentPinNumber.

  • Polarity & markings (CG.009, CG.010) — pcba:component:polarityType is CONDITIONAL for polarized parts and pcba:component:markings when markings are present; where a pin-1 / polarity marker exists it is standalone geometry (pkg_marking), never baked into a texture.

  • Appearance & material (CG.011, CG.012) — electrical parts MUST carry representative bodyColorNominal, finishNominal, and materialClassNominal; pcba:mesh:matClass MUST be authored on pkg_* / fixture_* meshes and derives from the role on board_*.

  • Press-fit state (CG.018) — press-fit joints are described like any THT joint (barrel + association); solder-defect applicability is determined per pin by pcba:pin:solderable. No executable rule.

Requirements#

Tags

Summary

Compatibility

Validator

❓

Every placed component prim MUST carry pcba:component:side (top | bottom). Electrical parts MUST also carry pcba:component:nominalPosMm (board-local x, y in mm) and pcba:component:nominalRotationDeg (rotation about the board normal Z). For fiducial and mechanical placements the pose fields are SHOULD.This page follows PCBA to USD Input Contract 1.0.2, sections 8 and 8.1.

PlacementChecker

❓

The component asset root MUST sit at a declared anchor named by pcba:component:anchor (body_centroid, pin1, footprint_origin, or mesh_origin). pcba:component:bodyCentroidLocal and pcba:mesh:originOffset together give deterministic placement when the mesh origin is off the body.

AnchorChecker

❓

Every electrical component MUST carry pcba:component:heightMm (the Z extent of the component in millimetres, greater than zero). The body mesh should also carry a standard USD extent, which the board-side geometric cross-checks rely on. Together they provide height and world-bounds ground truth.This page follows PCBA to USD Input Contract 1.0.2, section 8.

BodyHeightChecker

❓

Every electrical component MUST carry pcba:component:pinCount (an integer, greater than zero), and it MUST equal the number of pin prims on the component. It is the contact enumeration the solder simulation relies on.

PinCountChecker

❓

pcba:component:pinPitchMm (a float, in millimetres) gives the centre-to-centre spacing between adjacent contacts. It is required when meaningful and is omitted for 2-terminal passives.

PinPitchChecker

❓

Every pin prim MUST carry pcba:pin:number — a stable id, unique within the component — and pcba:pin:solderable (bool: does this contact form a solder joint?). pcba:pin:crossSection, pcba:pin:terminalType, and pcba:pin:designator are OPTIONAL and validated when authored. The board side never authors pcba:pin:number: a pad or barrel names a pin with pcba:board:componentPinNumber.This page follows PCBA to USD Input Contract 1.0.2, section 10.

PinGeometryChecker

❓

pcba:component:pin1PosMm (a point3f) gives the actual offset of pin 1 from the component anchor. It is required for keyed or orientation-sensitive parts and is the ground truth for pin-1 orientation defects.

Pin1PositionChecker

❓

pcba:component:polarityType (a token) names how a polarized part indicates its polarity. It is required for polarized parts and is the ground truth for reverse-polarity defects. Pin-1 / polarity / marking features MUST be authored as standalone geometry (pkg_marking), never baked into a texture.

PolarityChecker

❓

pcba:component:markings (a string) records the visible marking text on the component. It is required when markings are present and is the ground truth for OCR and wrong-part inspection.

MarkingsChecker

❓

Every component MUST carry a representative nominal appearance: pcba:component:bodyColorNominal (a color3f), pcba:component:finishNominal (a token: matte, gloss, metallic, other), and pcba:component:materialClassNominal (a token: plastic, metal, ceramic, solder, other).

AppearanceChecker

❓

pcba:mesh:matClass (plastic metal ceramic solder mask copper silkscreen other) names a mesh’s material class alongside its bound material. It MUST be authored explicitly on pkg_* and fixture_* meshes, whose material is genuinely ambiguous. On board_* meshes it derives from the role and need not be authored; any authored value must match the derivation.This page follows PCBA to USD Input Contract 1.0.2, section 9.

SurfaceMaterialChecker

❓

A press_fit part is a solderless through-hole part: its holes are plated, its barrels are real and required, and the camera looks down them. Which of its contacts take solder — and therefore which solder-defect classes apply — is determined per pin by pcba:pin:solderable, not by the part-level process class.This page follows PCBA to USD Input Contract 1.0.2, sections 6, 10 and 12.

Not yet implemented