This document defines the OpenUSD model pack: the single .usdc file that represents one MDCX product model — or one partner unit such as a chiller, BESS or switchgear — in the CIOS digital twin, in design coordination and in public downloads. The same rules apply to MDCX exports and to supplier deliveries; there is no separate "marketing" USD format.
Status: v1.0 · 2026-09-22 · Supersedes the public draft v0.1 of 2026-08-10 (Y-up, /MDCX/<SKU_ID> root, LOD tiers — all withdrawn). Every public download listed in §11 is byte-identical to the pack the CIOS twin loads.
1. What a model pack is
- One model = one self-contained
.usdcfile (USD binary crate). No sublayers, no external references, no texture files beside it. If a look needs image textures, use plain material colors — the twin is a monitoring view, not a render. - File name =
<ALIAS>.usdc, where<ALIAS>is the short model alias from the product matrix (e.g.L1240C45.usdc). The full SKU ID is for display, not for file names. - The pack is loaded read-only and instantiated many times per site. It shows one unit at true scale — nothing else: no room, floor, sky, people or neighbouring equipment.
- A component manifest (spreadsheet or PDF) accompanies every supplier delivery: one row per named component and per sensor marker, mapped to the physical part or datasheet measuring point.
2. Identity binding
| Alias | SKU ID | Pack file |
|---|---|---|
| L1240C45 | L1240C45SUR150 | L1240C45.usdc |
| L1800C45 | L1800C45DR220 | L1800C45.usdc |
| L450C20 | L450C20DR150 | L450C20.usdc |
| I400C45 | I400C45SUT50 | I400C45.usdc |
DC45-1200KW, DLC45-1800KW, DLC20-450KW, AC45) are retired and redirect to the alias files.3. Stage settings (required)
| Setting | Required value |
|---|---|
| Up axis | Z |
| metersPerUnit | 1.0 — model in real-world meters, 1:1 |
| Default prim | /root |
| Root transform | identity — no baked translation, rotation or scale |
| Origin | centre of the unit's footprint, at ground level (geometry rests on z ≥ 0) |
| Orientation | +X = front of the unit (primary service / door side) |
Stage customLayerData must carry four keys:
| Key | Value |
|---|---|
cios:modelpack:model | the file name stem (L1240C45) |
cios:modelpack:version | semantic version, bumped on every re-export |
cios:modelpack:source | authoring tool and version |
cios:modelpack:date | export date, YYYY-MM-DD |
cios:modelpack:origin | footprint-center (required for new packs; legacy-corner marks the two older packs awaiting re-export) |
4. Prim hierarchy (required)
/root Xform, default prim — cios:type, cios:model
├── geo/ all visible geometry
│ ├── rack000/ one group per functional component (§5)
│ │ └── rdhx000/ nesting mirrors physical parentage
│ └── frame/ enclosure, doors, cable dressing, labels
├── sen/ sensor location markers (§6); may be empty
└── _materials materials (Scope)
No meshes directly under /root, and no other direct children of /root.
5. Naming (required)
- Charset: every prim under
geo/andsen/—frame/included — matches[a-z0-9]+: lowercase letters and digits only. No underscores, spaces, capitals, non-ASCII or tool-generated duplicate suffixes (.001,_001). Material and shader prims under_materialsmay use_but must be lowercase. - Functional components use the CIOS type vocabulary plus a 3-digit index from
000(chip-level items use a natural index, e.g.gpu0). Components relevant to container models:racktanknodecdurdhxmanifoldceilairupspdupdcbusbartouatsvalvepumpfanswitch. Supplier units:chillerdrycoolercompressorwatermeterbessbatterycellpcsswitchgearbreakertransformermetergenset. - Dressing (panels, brackets, piping runs, doors) goes inside the owning component's group or under
geo/frame/. Name it by role with the owner as prefix (battery000body,ceilair002label). Two traps: never a vendor product designation as a prim name (EATON_93Li,CRAH3), and never a plain letters-then-digits name (cube019) — it reads as a component and is rejected. - Never invent vocabulary. If a category is missing, flag it in the manifest; MDCX extends the vocabulary through its own controlled process.
6. Attributes and sensor markers
/rootcarriescios:typeandcios:model; each functional component carriescios:type.- Each measuring point (temperature, pressure, flow, level, gas) gets a small locator prim under
sen/, namedmon000,mon001, … — notsensor000, which is a component name and illegal undersen/. Marker meshes follow the same charset (mon026base). - Markers are bound to live telemetry through
cios:relpath, written at intake. Live values (cios:tlm:*,cios:unit:*) are written by the twin at runtime — packs must not pre-bake them, and no othercios:attribute may be invented.
7. Materials and colours
Colours in a pack describe the physical appearance of the unit only; status, temperature and alarm visuals are added by the twin at runtime and are never baked into a pack.
| # | Rule |
|---|---|
| M1 | Shaders: UsdPreviewSurface only, one surface shader per material. |
| M2 | diffuseColor is a plain constant. No texture nodes, no file references. |
| M3 | Every mesh carries primvars:displayColor (constant) equal to its material colour. |
| M4 | opacity = 1.0 on every material. Enclosure transparency is applied by the renderer. |
| M5 | emissiveColor = black on every material. Emissive is reserved for status visuals. |
| M6 | Material and shader names: lowercase [a-z0-9_]+, no .001 / _001 suffixes. |
| M7 | purpose = default on every prim; guide is reserved for the twin's status layer, and no prim may have a state child. |
8. Not allowed
Deliveries are rejected if they contain any of:
- Lights or cameras.
- Animation, time samples, rigs, physics or audio.
- Surroundings — rooms, floors, ground planes, neighbouring units (the unit's own enclosure belongs in
geo/frame/). - External file dependencies, including asset paths such as
./textures/*.png. - Any transform on
/root. - Pre-baked telemetry values or invented
cios:attributes.
9. Size budget
File ≤ 50 MB · ≤ 500 k triangles · ≤ 64 materials · ≤ 5 000 prims. Budgets are warnings, not hard failures; exceeding one needs a written reason. Target detail: recognisable at 2 m, not photorealistic close-up. Decimate CAD tessellation and drop fasteners and hidden internals.
10. Conformance check
Every pack passes an automated check before it is accepted or published: stage settings (§3), hierarchy (§4), naming and vocabulary (§5), attributes and markers (§6), materials (§7), prohibitions (§8) and budgets (§9, warning). A manual self-containment check and a visual review of scale, origin and orientation follow. Before sending a file, open it in NVIDIA USD Composer or any USD viewer and confirm it sits on the ground plane at the origin, faces +X, and measures correctly.
Web presentation is separate from the pack: product pages show a poster first and load web 3D (glTF) only on request. The USD pack is always an explicit download, never fetched on page load.
11. Public downloads
Each download is a .zip containing exactly one <ALIAS>.usdc, byte-identical to the pack used by the CIOS twin.
| File | Maps to | Notes |
|---|---|---|
L1240C45.usdc.zip | L1240C45SUR150 | Liquid Cooling, single loop, with UPS |
L1800C45.usdc.zip | L1800C45DR220 | Liquid Cooling, dual loop |
L450C20.usdc.zip | L450C20DR150 | Liquid Cooling, dual loop, 20 ft |
I400C45.usdc.zip | I400C45SUT50 | Immersion Cooling; also the geometry reference for I400C40ST50 (shared 8-tank core) |
Multi-container arrangements are not model packs; they are built by placing packs in a site layout.
12. Changelog
| Version | Date | Notes |
|---|---|---|
| 1.0 | 2026-09-22 | Adds §7 materials and colours (constant-colour PreviewSurface, displayColor, no textures / opacity / emissive, purpose default). Aligned with the CIOS digital-twin model pack convention: Z-up, footprint-centre origin, +X front, /root hierarchy, lowercase vocabulary naming, cios:modelpack:* metadata, sensor markers, prohibitions and budgets. Downloads replaced by the CIOS packs under alias file names. LOD tiers, /MDCX/<SKU_ID> root and mdcx:* keys withdrawn. |
| 0.1 | 2026-08-10 | Initial public draft (withdrawn). |