PCB-Assembly Profile USD Authoring Guide#
This document describes how to author a USD asset that conforms to the PCB-Assembly profile:
a populated circuit board assembly (PCBA) — a board with its components placed — represented
in USD so that every component, pin, pad and hole can be discovered by attribute and role.
The profile describes the asset, not a pipeline stage. It applies to any PCB assembly USD
whatever produced it: a CAD or process-preparation exporter, a board-building tool, or a script
that composes an assembly from a board and component packages. The motivating consumer is an AOI
(automated optical inspection) synthetic-data pipeline that renders the board and simulates solder
and component defects, but the rules read only the asset. It composes six features: who the parts
are, where they sit and how their packages are built, what the board itself carries, how the USD
file is organised, what the camera sees, and how the file set is packaged. The four features that
do not concern placed components also form PCB-Board, the board-level subset.
Profile definition#
Profile 0.1.0 implements the PCB to USD input contract v1.0.2.
Wheel 0.1.0a1, the features and the contract have separate version identifiers; the
contract’s document version is not the --version argument.
[PCB-Assembly]
"0.1.0" = {features = [
{"FET_211_STANDARD" = {version = "0.1.0"}}, # "PCB Component Identity"
{"FET_212_STANDARD" = {version = "0.1.0"}}, # "PCB Component Geometry"
{"FET_213_STANDARD" = {version = "0.1.0"}}, # "PCB Board Geometry"
{"FET_214_STANDARD" = {version = "0.1.0"}}, # "PCB USD Core"
{"FET_215_STANDARD" = {version = "0.1.0"}}, # "PCB AOI Appearance"
{"FET_216_STANDARD" = {version = "0.1.0"}}, # "PCB Delivery Package"
]}
The six features together carry all 38 enforced requirements:
Feature |
Codes |
What it governs |
|---|---|---|
|
refdes uniqueness, component type and process class vocabularies, package type, footprint id, part identity, the component registry |
|
|
placement, anchor, body height, pin count, pitch and geometry, pin-1 position |
|
|
board thickness, copper and mask geometry, barrels at through-hole joints, pad numbers, paste association and side, hole geometry, site occupancy and pin↔pad association |
|
|
board root and stage layout, stage conventions (Z-up, millimetres), mesh roles, the |
|
|
polarity, markings, nominal appearance, per-surface material class, material binding, role/material consistency |
|
|
relative self-contained references, package manifest, provenance, file naming |
Feature dependencies: FET_212_STANDARD depends on FET_211_STANDARD (components are discovered
through their identity attributes); FET_215_STANDARD depends on FET_212_STANDARD and
FET_214_STANDARD. The others stand alone.
There is no standalone component profile. The contract puts a component’s identity and placement on the instance in the board file, not on the shared package prototype, so a prototype file alone carries geometry but no identity and cannot be validated as a component by itself.
What a conformant asset looks like#
One self-contained USD asset — a single logical board, normally several files (board, component prototypes, optionally a panel) linked by relative references/payloads, with no external dependencies.
Discovery is by attribute and role, never by prim name or hierarchy position. The board root is found by its
pcba:board:*attributes (it may but need not be the default prim); every geometryMeshcarries apcba:mesh:roletoken from a fixed vocabulary (board_pad,board_barrel,pkg_body,pkg_lead, …); components carrypcba:component:*identity and placement; pins carrypcba:pin:*.Stage conventions:
upAxis = Z,metersPerUnit = 0.001(millimetres), board in the XY plane with Z as its normal, no compensating root transform.Associations are authored board-side: each occupied pad or barrel names the component terminal that lands on it (
pcba:board:refdes+pcba:board:componentPinNumber), and the pad must sit at the pin it names. A through-hole joint is three prims — top ring, solder-side ring, barrel — all carrying the same association.Prototype-and-reference composition: repeated parts reference a shared prototype (
instanceable = true); package-level data lives on the prototype, placement on the instance.
Known-missing fields#
A MUST field whose upstream data is not available yet MAY be omitted, provided the prim carries
pcba:prov:<attr> = "not_yet_available" (or "source_data_required" where sourcing was attempted
and failed). The PCB rules emit these as INFO declared gaps, separately from
WARNING advisories and failures. A waiver records unavailable data; it does not
establish that the missing information is safe for a downstream consumer to ignore.
Reporting limitation: simready-validate filters INFO and WARNING
issues out of its returned profile results. Its PASS cannot establish that no
declared gaps or advisories remain. To retain all three buckets, use the contract’s
reference validator, which reports failures, declared gaps and warnings separately.
Validate#
simready-validate --profile PCB-Assembly --version 0.1.0 board.usda -v
Build/install prerequisites and the verified tier-aware validator prerelease are
documented in the PCB tier’s repository README.md. Older 2026.4.x validators do
not discover tier content. Select the profile explicitly as above unless the
asset carries customLayerData.SimReady_Metadata.validation profile metadata;
pcba:* attributes alone do not select it.
The minimal metadata fixture has no blocking failures. Any advisory findings are
visible only through a reporter that retains them. The same board authored as a
class master placed twice on a panel exercises abstract-master discovery; it is
not proof of every panel composition pattern or render/runtime readiness.
Relationship to SimReady core#
The profile shares core’s upAxis = Z convention (UN.006) but its millimetre stage
(metersPerUnit = 0.001) differs from core’s UN.007 (metersPerUnit = 1.0), so it does not
include core’s Minimal Placeable Visual feature (FET_001_STANDARD). Which core requirements the
profile adopts directly is an open design question.