Solid Models in USD - #109
Conversation
Add proposals/cad_geometry/README.md establishing why OpenUSD needs a native Brep schema. Companion to the UsdSolid schema proposal.
New bullet under 'Additional use cases by domain': wireframe-from-Brep as a deliberate visualization mode (simplified views, feature emphasis, internal detail) and as an IP protection mechanism (strip surfaces, retain wireframe only). Wire edges are first-class topology entities in the proposed schema, so this mode requires no extra tessellation. Main body: 518 lines (target ≤650). +107 words.
- Drop Omniverse + Xcelerator name-check; the trend stands without singling out vendors. - 'Brep geometry stays in native formats' -> 'exact geometry stays in native formats'. Source geometry upstream of USD isn't always Brep; the point is that nothing beyond tessellated proxies reaches USD.
Edits to prepare the UsdSolid proposal for broader OpenUSD community review. No changes to the schema (Section 3), examples (Section 4), or technical design decisions in Section 2 (aside from typo fixes and a cross-reference in 2.6.4). Changes: - Add status badge, summary, and table of contents - Add Section 1.1 (Problem statement) with concrete industrial pain points - Add Section 1.2 (Why not STEP / black box) incorporating FAQ content - Rename original Section 1 content to Section 1.3 (Proposed approach) - Add Section 1.4 (Glossary) from geometry-wg brep-glossary.md - Fix typos throughout (12 items) - Clean preamble tone for external audience; replace inaccessible Google Docs link; add FAQ cross-reference and missing-images note - Convert HTML geometry table to Markdown - Append editorial appendix (A.1-A.9) with restructuring proposals Co-authors -- please review and align on: 1. Section 1.1-1.2: Does the problem statement and STEP/black-box rebuttal accurately represent the WG's position? These are now the first thing reviewers will read. 2. Section 2.6.4: Now cross-references 1.2 instead of standalone rationale. Confirm this reads correctly in context. 3. Appendix A.8: Plan to incorporate the remaining two FAQ answers into Sections 2.5 and 2.6.1. Agree/disagree? 4. Appendix A.9: We need to summarize the "CAD and BIM use cases" doc inline since the Google Doc link is not public. Who can provide the content? 5. Appendix A.1-A.7: Longer-term restructuring ideas (template alignment, example narration, risks, open questions). Which of these should we prioritize for the next pass? Made-with: Cursor
Clarify in preamble that Brep-to-Mesh connectivity is not a prerequisite for deploying the core Brep schema. Add Steve's concrete suggestion (gprim back-references via API schema) to the open questions section as a candidate follow-up approach. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Incorporates Steve Ghee's feedback that the limitation is not the CAD vendor but the choices made by the person exporting to USD, who may not have full insight into all downstream use cases. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Address PR PixarAnimationStudios#8 review comment: - Fix Weiler thesis link (scorec.rpi.edu 404 → tecgraf.puc-rio.br) - Fix TechSoft PRC spec link (updated path) - Remove brep:type from schema definition and all five .usda examples Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…itorial0-schema small schema updates
…itorial0-examples
…statement - Section 1.1 now references companion problem statement instead of repeating motivation, gap analysis, and STEP/opaque arguments - Section 1.2 (Why not STEP) removed; renumbered 1.3→1.2, 1.4→1.3 - Preamble: condensed Brep↔Mesh scope note, added derive-on-demand context - Removed FAQ document reference (content absorbed into both proposals) - Added TODO annotations at 2.5 and 2.6.1 for FAQ content incorporation
…AQ file - §2.5: add BrepArray-is-not-an-assembly rationale before subsections, note sparse overrides as future work. - §2.6.1: frame the per-geometry-object design choice as use-of-designs (consumption) vs CAD authoring, per FAQ. - Delete proposals/UsdSolid/FAQ/ — all content now lives in the main proposal (here) or in Proposal 1 (STEP / black box rationale).
- Add Risks section (validation, kernel deps, scale, ecosystem, data quality). - Add Open Questions section collecting deferred topics: CAD assemblies, Brep↔Mesh correlation (with Steve Ghee's N:1 back-reference proposal), constraint systems, STEP/PRC/Parasolid migration, sparse overrides. - Fix missing period in '# 3 Schema' header; update TOC.
- Preamble: drop image-verification note (images confirmed in repo); drop dangling 'use cases maintained separately' reference to the private Google Doc (content to be inlined via Proposal 1). - §1.2: normalize Weiler thesis URL (both prefixes were https/http mixed). - §2.6.4: replace broken in-proposal anchor with a pointer to the companion problem statement where STEP/black-box rationale lives. - §5: expand References — Weiler 1986, ISO 14739-1:2014 (PRC), ISO 10303 (STEP), Hertel & Fuchs use-cases (AOUSD internal v0.2).
- §4 intro: reframe as 5 examples (was '4'); group by capability (topology vs. composition/materials); add NURBS-only note and reading tip. - §4.1 Cube: add 'simplest possible manifold solid' framing; explain why 2 regions and 2 shells from a single cube; call out userIds as optional walk-through aids. - §4.2 Non-manifold cubes: frame as 'what changes vs §4.1'; explain why 11 faces not 12; note that edgeuse:thisRadialEntryType first carries non-trivial info here. - §4.3 Cube with void: frame as 'what changes vs §4.1'; walk through region:shellCount = [1, 2, 1]; call out first non-trivial NURBS. - §4.4 BrepArray: frame as 'what changes vs §4.1–4.3'; explain per-Brep vs. topology array semantics; contrast with §4.2's shared topology. - §4.5 Face materials: frame as 'what changes vs §4.4'; explain the Brep→Mesh material carry-through via GeomSubset.
- §0 Preamble: consolidate paragraph structure; name the Brep↔Mesh deferral
explicitly (was 'For example, ...'); inline the problem-statement link
instead of doubling it; fix 'pattern-where' → 'pattern — where'.
- §1.1: merge two short paragraphs into flowing prose; make
'unaffected' explicit rather than passive 'would not be affected'.
- §1.2: eliminate 'We propose' opener and 'we intend to add them soon'
(dangling TODO language); reframe as 'This proposal adopts ...';
inline the Weiler thesis citation as a hyperlink; drop 'a well known
ISO standard' → 'an ISO standard widely used for 3D content'.
- §2 intro: capitalize 'Radial Edge Data Model' consistently; drop
contractions ('don't' → 'do not', 'isn't' → 'is not'); smooth
sentence flow.
- §2.1: fix 'that currently supported' → 'than currently supported';
replace 'We recommend' and 'We also suggest' with impersonal forms;
consolidate comma-separated prose into flowing sentences.
Was rendering as a top-level section instead of under §1.
Explains the prelim prefix convention + skipCodeGeneration = true for readers unfamiliar with the OpenUSD preliminary-schema lifecycle. Cites UsdRenderGaussian as precedent.
All non-blocked editorial work complete. File at 1423 lines (was 1534). Remaining work blocked on Joe/Martin response to PHASE3A-FINDINGS.md and Steve Ghee's use case for Proposal 1.
Strip numbered section prefixes and bold wrapping from all headers.
Restructure to match the standard ## Section / ### Subsection / ####
pattern used by other proposals in the repo (hydra2, materialx-versioning,
usd-validation-framework, semantic_schema, etc.).
Key structural changes:
- §0 Preamble + §1 Purpose and scope → '## Introduction' with subsections
- §1.3 Glossary promoted to '## Glossary' (top-level, matches its weight)
- §2 Overall design concerns → '## Design'
- §3/4/5 → '## Schema' / '## Examples' / '## References'
- All §N.M.K subsections → descriptive ### / #### headers
- TOC regenerated from new headers
- All internal cross-references converted from '§2.7' style to
named anchor links ('[Assemblies](#assemblies)')
- Sentence-cased subsection titles where appropriate
Glossary was ~40 lines of near-duplicate definitions already in Proposal 1's Appendix A. Replace with a cross-reference and keep only schema-specific terms (BrepArray, Wire edge) that P1 does not define. Eliminates drift risk between the two documents.
Five changes to reduce redundancy for readers who arrive from the companion problem statement: 1. Introduction: cut redundant motivation recap (3 paragraphs → 2); merge Problem statement subsection into Introduction opener; remove Brep↔Mesh deferral paragraph (now lives in Open questions). 2. Proposed approach: drop restated 'why Radial Edge' rationale; link back to P1's design principles instead. 3. Design section: add skip-ahead note for readers already familiar with Brep topology from the companion document. 4. Risks: add one-line cross-reference to P1's ecosystem-level risks. 5. Open questions: Brep↔Mesh deferral now points to P1, not to Introduction (which no longer discusses it).
… editorial work Integrates SolidModels-editorial0 (post PR PixarAnimationStudios#12 merge) into the editorial branch. Joe's changes: - Remove all *:userId attributes from schema and examples - Update examples to packed form (brep:extent, face:range, edge:range) - Fix surface control vertex ordering - vector3d[] → point3d[] for vertex positions Re-applied on top of editorial work: - Prelim prefix implementation note - Example narration ('What changes' lead-ins for all 5 examples) - Expanded References section - Cut stale editorial appendix (was still in Joe's base)
Category A (9 typos): - Double period in edgeuse:orientationType.same doc - 'facuseCount' → 'faceuseCount' in shell:pointType doc - 'BrepEdgeCurveNurbAPI' → 'BrepCurve3dNurbAPI' in edge:curveType doc - 'geometrty' → 'geometry' in BrepPointAPI comment - 'geomtery' → 'geometry' in BrepMultiPointAPI comment - 'connetions' → 'connections' in edgeuse:thisRadialEntryType doc - 'analagous' → 'analogous' in BrepCurve3dNurbAPI doc - wireEdge:vertexIndices doc referenced Edge_ii/Edge:Range → WireEdge_ii/WireEdge:Range - wireEdge:vertexIndices doc 'number of Edges' → 'number of WireEdges' Category C (binormal wording): - 'binormal side' → 'positive-normal side' in edgeuse:orientationType doc, consistent with the prose in the Design section
Joe confirmed 'binormal side' is the intended term in edgeuse:orientationType doc string.
TASK.md and PHASE3A-FINDINGS.md were working documents for the editorial cleanup. All items resolved; audit trail posted to issue PixarAnimationStudios#9.
The previous bullet asserted a "NURBS-first MVP" framing that was an interpolation, not WG consensus, and didn't match the companion schema proposal's actual scope. The replacement frames exact geometry as a broad catalog (per PRC ISO 14739-1:2014) where the schema proposal targets the full catalog while staging detailed schema designs incrementally, beginning with NURBS curves and surfaces. Discussed and concurred on dry-run PR PixarAnimationStudios#14 by Chris Hawkins (chris-hawkins-usa) and Joe Umhoefer (umhoefer).
|
Hi Aaron, Can we reconsider deferring the correlation between the BRep and the tessellated mesh? These are the two main concerns: Vendor divergence risk: If we ship without a standardized correlation mechanism, individual CAD vendors might develop their own conventions to bridge the two representations. Once these conventions become widely adopted and assets rely on them, standardizing later becomes a migration issue rather than a design challenge. The cost of getting this right upfront is significantly lower than the cost of reconciling multiple vendor-specific schemes later. Tessellated mesh may not always be present: CAD vendors might choose not to ship a tessellated mesh at all if the correlation path is unclear. If the contract for going BRep - mesh isn’t clearly defined, the safest choice for a new vendor is to ship BRep only and let consumers tessellate. This is arguably a worse outcome than having a dual representation, and it’s the default we’ll end up with if we defer. |
Hi @dgovil — thanks for surfacing this. Responding for whoever raised it: Correlation isn't deferred — it's a separate concern from the Brep schema. The companion problem statement's Coexistence with meshes principle already says Brep and Mesh "should be relatable… but neither should require the other," and the mechanism is "separable from the core Brep schema." This proposal's Open Questions section has a "Brep↔Mesh correlation" entry sketching a candidate from Steve Ghee: an applied schema on the derived gprim that back-references the source Brep — the active follow-on path. Two reasons it sits there:
On the two specific concerns: Vendor divergence. The Ghee sketch signals direction. Vendor-prefixed proposals exploring variations are welcome — AOUSD's vendor → multi-vendor → core pattern (cf. PR #105) converges rather than fragments. Symmetric risk: continuing to block the Brep schema leaves vendor-specific Brep encodings hardening in Brep without companion mesh. The problem statement frames this as a desired direction, not a worse outcome — see "'Derive on demand' is replacing pre-tessellation" and Hero Use Case 2 (consumer-controlled data quality). The schema doesn't preclude shipping both; the question is whether the correlation contract must land in v1, and we don't think so. Real data on real stages is how the community converges on the right mechanism. |
|
Could I suggest moving the schema.usda out of the main doc where it is a bit hard to find (currently in a collapsible section) and have it be a standalone file in the repo that lives alongside the document? |
Per Martin Watt's review on PR PixarAnimationStudios#109: move the schema definition out of the collapsible <details> section in README.md into a sibling schema.usda file so it is easy to find and lives alongside the document. Content is byte-identical to the previously inlined block; README now links to ./schema.usda.
|
Good call, Martin — done. The schema now lives as a standalone |
|
Re: Moving the schema into a sibling Wins
Cost
Future work for consideration
Flagging only; not proposing we act on it here. |
Description of Proposal
Summary
Introduce UsdSolid, a boundary representation (Brep) schema for OpenUSD built on the Radial Edge Data Model. The schema supports manifold and non-manifold solids, sheet bodies, and wireframes, with explicit topological relationships and a packed
UsdSolidBrepArraydesign that limits prim count for large assemblies.This is the technical companion to the Boundary Representation Geometry in OpenUSD — Problem Statement proposal (PR #108); please review that proposal first for use cases and motivation. Both proposals are opened against
main, so this PR's diff includes the P1 problem-statement file as well as the P2 schema files until P1 merges; reviewers may wish to focus onproposals/UsdSolid/here.This proposal is from the AOUSD Geometry Working Group.
Problem statement
OpenUSD has no native representation for mathematically exact solid geometry. The companion problem statement develops the use cases and design considerations in depth. In brief, manufacturing, AECO, robotics, simulation, and digital-twin workflows require exact Brep geometry that mesh and subdivision-surface types cannot express. This proposal provides a candidate schema.
Glossary
The full Brep glossary lives in the companion problem statement's Appendix A; this proposal's Glossary section adds only the schema-specific terms:
UsdSolidBrepArrayprim that holds one or more Breps in a packed, flat representation. Each Brep's topology, geometry, and metadata are concatenated into shared arrays and delineated by per-Brep counts and offsets.wireEdgeis a topologically standalone edge that is not part of any face loop. Wire edges carry the same curve geometry as loop-bounding edges but exist independently as one-dimensional features within a shell.Reference Links
prelimUsdRender...) entering OpenUSD and later promoting.Details
The proposal is organized as Introduction → Glossary → Design → Schema → Examples → References.
Design introduces the Brep data model in three layers — shape, topology and "use", and Brep — and then walks through USD-implementation choices including
UsdSolidBrepArray, instancing, geometry typing, modeling Breps on a UsdStage, and trimming curves. Subsections on Flexible design possibilities and Other implementations considered document the design space the proposal explored before converging on the Radial Edge model and a packed BrepAPI on a typed prim. Assemblies, tolerance, validation, risks, and open questions follow.Schema is a complete
prelimUsdSolidschema definition (prelimUsdSolidprefix andskipCodeGeneration = true, following the OpenUSD convention for WIP schemas; both will be stripped on acceptance, matching the path Gaussian splats took).Examples narrate five
.usdacases covering cube, non-manifold cubes, cube with internal void, BrepArray with multiple Breps, and per-face materials.Design choices worth highlighting for reviewers:
UsdSolidBrepArraytyped prim with a multiple-applyUsdSolidBrepAPIkeeps prim counts tractable for large assemblies. The trade-offs against one-prim-per-Brep and one-prim-per-geometry-object alternatives are documented in the Design section.UsdGeomNurbsCurves/UsdGeomNurbsPatchfor CAD interchange.Risks
From the proposal's Risks subsection:
UsdSolidBrepArraydesign, but composition, layering, and instancing performance remain to be characterized with production datasets.Alternate solutions
The proposal's Other implementations considered subsection documents the alternatives evaluated:
Out of Scope
prelimUsdRenderGaussian→UsdRenderGaussianafter community use).Link to Rendered Proposal
Supporting Materials
The proposal includes six diagrams (
proposals/UsdSolid/images/) illustrating the Radial Edge data model, BrepArray structure, and face-material binding. Five narrated.usdaexamples accompany the schema.Contributing