This is the checklist view of what main implements. The source-level support
matrix is in capability matrix; the
ordered plan is in README.md.
- Add root CMake to the empty repository
- Add the minimal
usd-geo-corelibrary structure - Add
SpatialBoundsvalidation, expansion, center, and size operations - Add the
GeoReferencecontract for CRS, units, up axis, and origin - Add core unit tests
- Add OpenStrata workspace and
usdGeoCorelibrary manifests - Generate and validate the OpenStrata runtime lockfile
- Build and test the core through
ost - Define library ownership and dependency direction
- Define the file-format support order and entry gates
- Add finite-value validation and explicit local-coordinate transforms
- Add deterministic tile IDs and normalized cache-key inputs
- Create
usdPointCloudCorepoint-attribute and chunk contracts - Create the
UsdGeomPointsauthoring and metadata round-trip library - Add
usdLasLAS 1.2-1.4 header inspection and uncompressed point decoding - OpenUSD FileFormat Plugin PoC (LAS discovery and UsdGeomPoints authoring path)
- LAS reader integration and deterministic conformance fixture
- LAS VLR/EVLR inspection and WKT CRS extraction
- Select laz-perf as the initial LAZ codec and define the chunk reader contract
- Add the laz-perf adapter behind the
usdLazchunk reader contract - Add the LAZ reader conformance fixture and FileFormat Plugin integration
- Record the standing design policy
- Document the exact point format, attribute, VLR, and CRS support matrix
- Document known limitations and plugin usage in the README
- Document the typed diagnostics contract and its migration
- Document LGPL-compliant binary distribution and OpenUSD compatibility
- Endian-safe binary decoding
- Add typed diagnostics to
usdGeoCoreand LAS / LAZ reader APIs - Move the LAS / LAZ FileFormat Plugins onto the typed diagnostics path
- GeoTIFF CRS VLR parsing (structured VLR metadata)
- Extra Bytes descriptors and scalar generic point attributes
- Remaining LAS 1.4 point attributes, including NIR
- Waveform contract and LAS point formats 4, 5, 9, and 10
- Chunked and range-based reader API
- LAS pull-based
PointStreamfactory and bounded chunk delivery - LAZ pull-based
PointStreamfactory and bounded chunk delivery - Metadata-only LAS and LAZ reads
- Record the plugin adapter and file-format argument contracts
- Move
pointcloud-lasontousdlas::LasReader - Add the preliminary
usdgeo::AuthorPointCloudAssetauthoring API - Move the shared authoring tail into
usdgeo::AuthorPointCloudAsset - Normalize file-format arguments and pass read options through the plugins
- Record the OpenUSD 26.08
usdLodtile and LOD contract - Shared LOD contracts (
PointTileId,PointLodItem,PointLodHierarchy) - LOD validation invariants and typed diagnostics
- Deterministic, versioned fixed-stride point sampling and cache-key inputs
-
usdLodauthoring in the authoring library (single non-tiled root) - LOD file-format arguments (compact profiles)
- Spatial tiling and per-tile LOD roots (authoring API)
- Payload packaging (authoring API)
- LAS and LAZ stream connection to tiled payload authoring
- Spatial
tile,tileSize,tileMemoryLimit, andpayloadDirectoryfile-format arguments
- Rename
usd-geo-usdtousd-pointcloud-authoring(usdGeoUsdtousdPointCloudAuthoring) - Rename
plugins/geospatial-lasandplugins/geospatial-laztoplugins/pointcloud-lasandplugins/pointcloud-laz, including bundle metadata, resource paths, and CI paths names,plugInfo.jsontype names, and CI paths - Reorganize
docs/by responsibility and add the documentation index - Promote the library architecture into a binding workspace contract
- Add a
README.mdfor every module underlibs/andplugins/ - Record the rename in migration
This patch release stabilizes the LAS and LAZ implementation released in
v0.2.0. It does not add a new point-cloud format.
- Publish real-dataset processing-time, peak-RSS, spool, and payload output measurements
- Measure payload working sets through the available Storm scene/view and headless render paths
- Complete long-running, cancellation, failure, and interruption cleanup validation for tiled reads
- Add the explicit LAS/LAZ conversion tool as the production path for tiled, payload-backed generation, including deterministic manifest output
- Close release documentation gaps for compatibility, installation, licensing, and large-data operation
- Add regression coverage for each stabilization fix
COPC shipped as local, read-only support using the existing point, streaming,
tiling, diagnostics, and usdLod contracts.
- Add the OpenUSD-independent COPC metadata and hierarchy reader foundation (LAS 1.4 COPC Info VLR and local hierarchy pages)
- Read selected local COPC point-data byte ranges through the shared LAZ chunk decoder
- Add a format-specific COPC reader and thin FileFormat Plugin adapter
- Validate COPC information and hierarchy metadata
- Read required hierarchy nodes and point-data byte ranges selectively
- Map native hierarchy and resolution metadata to the shared tile/LOD model
- Add the COPC pull-based point stream over native hierarchy order
- Add LAS, LAZ, and COPC point-stream equivalence regression coverage
- Verify LAS, LAZ, and COPC equivalence across authored LOD representations
- Keep COPC writing, HTTP range sources, network caching, and new public USD schemas out of the local-read release
- Decode scalar PLY vertex properties through the shared PointStream contract with bounded source reads
- Support ASCII, binary little-endian, and binary big-endian scalar vertex records, including range and filter controls
- Add the thin
pointcloud-plyFileFormat Plugin with explicit CRS arguments and shared authoring - Connect PLY reads to payload-backed fixed-grid tiled authoring
- Add PLY plugin discovery, stage-open, corpus, and tiled integration tests
- Keep faces, mesh authoring, PLY writing, and metadata-only reads out of scope
The completed work is documented in streaming and tiling.
-
PointStreampull interface inusdPointCloudCore -
usdPointCloudTiling: fixed-grid tile keys, configuration, and source-coordinate tile router - Spool schema, thresholds, cleanup, and deterministic iteration order
- Bounded-memory tests and generated large-corpus spill coverage
- Generated-corpus streaming benchmark and documented measurement command
- Full-size real-dataset processing-time, RSS, spool, and payload output measurements
- Payload working-set measurements through the available Storm scene/view and headless render paths
- Failure and interruption cleanup validation across tiled reads
- Explicit conversion tool with atomic publish and deterministic manifest output
- Versioned tile manifests with deterministic tile/LOD ordering, payload paths, bounds, and point counts
The stabilization slice completed a reproducible LAS/LAZ measurement matrix using the checked-in 4,096-point thinned corpora, full-size Shizuoka LAS and derived-LAZ measurements, and regression coverage for recovery when a conversion transaction marker exists without its state file. Full-size interruption recovery is validated by force-terminating the converter after transaction state creation and retrying the same output workspace.
- Extra Bytes descriptor-name normalization contract
- Vector Extra Bytes types
- Bounds and classification filter arguments for LAS and LAZ
- EPSG inference and conflicting-CRS detection
- Declare OST smoke fixtures in both bundle manifests and pass L3/L4
usdcat.readandpython.stage_open - Add the initial
usdGeoCachecontracts for deterministic descriptor keys, USDC layout, cache lookup, and entry invalidation
-
Complete PLY scalar vertex decoding and the thin
pointcloud-plyFileFormat adapter with explicit CRS arguments -
Integrate deterministic USDC cache generation and lookup into the conversion tool through
--cache-root -
Integrate cache lookup into direct FileFormat and authoring paths. The conversion tool owns generation through
--cache-root; LAS, LAZ, COPC, and PLY adapters read committed entries throughUSDGEO_CACHE_ROOT. -
Stage licensing, notice, capability, compatibility, and installation documents into release assets
-
Adopt narrow format-specific dynamic LOD fields after generated assets and cache lookup stabilized (ADR 0003)
-
Add the project-owned random-access byte source contract and move LAS and local COPC reads onto it
-
Add resolver-backed
ArAssetadaptation without introducing OpenUSD or transport dependencies intousdCopc
- Complete the v0.3.x documentation consolidation: concise root README and synchronized workspace, capability, and implementation documents.
- Complete v0.4.0 PLY point-cloud read support with bounded source streaming and tiled authoring follow-up work after the shipped scalar direct-read and cache-lookup slice.
- Complete v0.5.0 COPC random access with an OpenUSD
ArAssetadapter, resolver-dependent HTTP support, and conservative generated-cache identity; the project-owned source interface and local migration are shipped. Resolver-backed cache reuse is disabled when a stable local filesystem identity is unavailable.
The ordered plan and acceptance priorities are in the infrastructure maturity roadmap.
- Define a format- and transport-independent source identity contract
-
`usdgeo::cache::SourceIdentity` accepts a stable identifier and validation token, with optional size and modification metadata; local filesystem identity construction is shared by authoring and the conversion tool - Define machine-readable cache lookup states for missing, incomplete,
hit, and invalid layouts while preserving the
IsCacheHitAPI - Document cache invalidation and compatibility rules in the
usdGeoCachemodule README - Add cache statistics and stable diagnostics.
usdgeo::cacheexposes stable lookup status names and process-local hit, miss, incomplete, and invalid-layout counters throughLookupStatistics. - Harden corrupt-entry and interrupted-publication recovery committed cache roots are opened and payload references are validated before reuse; unreadable roots and invalid or missing payloads are invalidated through the descriptor-derived entry path
- Establish local and resolver-backed cache reuse baselines. The
conversion integration test records the local miss-to-hit path, while
pointcloudCopc_integrationverifies that configuringUSDGEO_CACHE_ROOTdoes not enable reuse for resolver assets without a stable validation token.
- Define deterministic point-budget planning and limits
- Preserve fixed-grid
tileSizeandtileMemoryLimitbehavior - Add tile statistics and planning diagnostics
- Compare LAS, LAZ, COPC, and PLY payload and memory behavior through the reproducible cross-format benchmark report; larger real-world datasets remain dataset-dependent
- Publish a deterministic
tiles.manifestbeside the payload assets with tile ID, LOD level, source bounds, point count, and portable payload path - Invalidate cached entries whose tile manifest is incomplete
- Compare fixed-grid and adaptive tiling on real-world LAS, LAZ, COPC, and PLY inputs with uneven density
-
The final matrix completed for Shizuoka LAS/LAZ, Autzen COPC, and Stanford Bunny PLY with fixed-grid and adaptive rows for every format. - Add a reproducible fixed-grid versus adaptive comparison harness that records corpus identity, normalized settings, tile distributions, RSS, source and spool I/O, payload bytes, and processing time in TSV and JSON
- Record points per tile distribution, payload bytes per tile, total payload bytes, tile count, and tree depth in the reproducible benchmark report for both strategies on the same fixture inputs
- Record peak RSS, spool bytes, source read bytes, and total processing time for both strategies in benchmark output and real-world baselines
- Record
usdviewstartup/open elapsed time and peak process-tree working set for the generated output - Provide a reproducible build-local payload-backed
usdviewfixture recipe from the public-domain USGS 3DEP corpus - Add source bytes read, spool bytes written, spool bytes read, payload bytes written, and effective I/O amplification to the streaming benchmark
- Publish the commands and corpus provenance needed to reproduce each baseline; the comparison harness records the input SHA-256 beside every fixed-grid and adaptive result
- Measure host responsiveness while interacting with the generated output using the documented five-key workload and the reproducible USGS 3DEP 4,096-point payload-backed fixture; the baseline is recorded in the infrastructure maturity roadmap
- Define the
TilePlancontract: tile identity, bounds, point counts, parent and child relationships, source ranges, depth, and planner identity and version - Adapt the existing point-budget planner output into
TilePlanwithout changing its partitioning behavior; the shared tile router accepts the adapted representation - Define how cache identity derives from a tile plan, and treat planner
algorithm changes as a versioned compatibility concern through the
deterministic
TilePlanCacheArguments/StableTilePlanKeycontract and planner identity/version cache inputs - Map COPC native hierarchy nodes and byte ranges onto a tile plan instead of re-deriving the partition
- Verify equivalent authored output from a sequential plan and a COPC-native plan describing the same partition
v0.10.0 - resolver-backed source identity and external resolver interoperability (released 2026-08-23)
The contract is recorded in the resolver-backed source contract; the scope and exit gate are in the infrastructure maturity roadmap.
Phase 1 — identity contract:
- Review the existing
usdgeo::cache::SourceIdentitymodel against the neutralresolvedIdentifier/size/validationTokenrepresentation - Define resolver-backed stability semantics for
Stable,Unstable, andUnavailableidentity, and what each level permits - Add opaque validation-identity support without transport-specific field names entering the cache contract
- Keep serialization and stable cache keys deterministic, and add unit tests
Phase 2 — resolver adapter:
- Centralize
ArResolver/ArAssetidentity extraction in one adapter owned byusdGeoCacheor an adjacent resolver integration layer - Keep the adapter outside LAS, LAZ, COPC, and PLY readers
- Add stable, unstable, and unavailable identity test assets
- Preserve current resolver-backed COPC read behavior
Phase 3 — generated cache reuse:
- Enable generated-cache lookup for stable resolver identities, with
TilePlanidentity and version remaining compatibility inputs - Retain conservative no-reuse behavior for unstable and unavailable identity, and never treat identifier equality as content equality
- Verify that a changed validation token for the same identifier regenerates instead of hitting the old entry
- Verify corrupted and incomplete cache recovery on the resolver-backed path
- Separate source byte-range caching from generated-USDC caching, with an explicit owner for each
The COPC FileFormat reports every generated-cache decision through the typed
COPC009-COPC012 diagnostics while preserving the conservative fallback. The
generated-cache layout separates a generation key from a source identity key, so
a changed validation token is reported as changed rather than as a source never
seen before.
Phase 4 — repository boundary cleanup:
- Relocate
plugins/httpresolverto the explicitly test-onlytests/plugins/httpresolver/path - Remove documentation language implying this repository owns a production HTTP implementation
- Document the external resolver contract and
usd-http-resolverinteroperability guidance as optional runtime composition - Verify the repository builds and tests with no CMake dependency, submodule, vendored HTTP library, or link dependency on a resolver implementation
Phase 5 — diagnostics and secrets:
- Add stable diagnostics for identity unavailable, unstable, stable, and
changed, and for cache reuse disabled, hit, and invalidated.
usdgeo::cache::CacheDecisionpublishes the seven categories; COPC projects them ontoCOPC009-COPC012, each message naming its category - Keep diagnostics free of transport specifics and token contents. Every
decision message is a fixed constant owned by
usdgeo::cache, and a unit test asserts none of them names a transport - Verify no credentials, authorization headers, signed URLs, or tokens are persisted into manifests or cache descriptors. Both cache-path components are 64-bit hashes, and the conversion conformance test asserts that no manifest carries the source path or its validation token
Phase 6 — validation and baselines:
- Pass Tier 1 repository-local resolver contract tests as the CI gate
without any external resolver repository.
kind: workspacecells configure the repository root, whereUSDGEO_BUILD_TESTSdefaults toON, on every host and both lanes - Record Tier 2 integration against an external resolver, a local
reproducible HTTP server, and a COPC fixture, including local/remote
output equivalence. Recorded against
usd-http-resolverv0.4.0and the 81 MB Autzen COPC in the resolver read baseline - Record remote hit ratios and
bytes fetched / source sizebaselines. A metadata open costs 0.001486 of the asset in three requests; a full read costs exactly 1.0 in 277 requests. A generated-cache hit ratio for COPC is covered by the resolver-backed converter miss-to-hit test for stable identity; the external Tier 2 record remains a source-read baseline and does not claim a generated-cache ratio
-
Declare an OST smoke fixture for the
pointcloud-copcbundle. Its component-owned conformance fixture now exercises the L3usdcat.readand L4python.stage_openchecks alongside the other product bundles. -
Publish generated cache entries for local COPC inputs.
usd-pointcloud-convertaccepts.copcand.copc.laz, uses the shared COPC point stream for fixed-grid and adaptive generation, and publishes entries compatible with local COPC FileFormat lookup. Resolver-backed publication is covered below and requires a stable resolver identity. -
Accept resolver-addressable COPC identifiers in
usd-pointcloud-convert, as described in the resolver-backed source contract. Stable resolver identities publish and reuse generated entries; unstable and unavailable identities convert without cache publication.
- Add an opt-in COPC runtime-streaming probe that takes a requested node level, selects deterministic COPC node identities, decodes only those point-data ranges, and reports source bytes read without adding runtime abstractions to the conversion pipeline
- Add a research-only OpenUSD LOD payload composition probe that records
authored payload arcs,
LoadNone, selective payload loading, andLoadAllpoint counts on a deterministic three-LOD fixture - Measure host LOD decisions and renderer loading behavior; these remain host- and render-delegate-dependent research, and payload composition results must not be presented as renderer memory savings
E57, delimited text, and other point-cloud formats follow these infrastructure milestones. A public custom USD schema remains deferred until the documented plain-attribute metadata contract is stable across formats.
The sampling contract uses a versioned fixed-stride selection that preserves source order and applies the same indices to every populated point attribute. Its algorithm, version, and target count are normalized cache-key inputs.
Argument normalization makes the streaming reader's chunk, point-range, and tiled payload controls reachable through the plugin layer and the conversion tool. Bounds and classification filters are normalized at the plugin boundary, and attribute selection is normalized before authoring; see the plugin adapter contract and the file-format argument contract.
Compact lod profiles author a single non-tiled usdLod root through the
shared authoring path for LAS and LAZ. Tiled LAS and LAZ reads now consume
bounded pull-stream chunks, spool points by source-coordinate tile, and author
one payload-backed level per tile. The explicit conversion tool is the
production entry point for long-running generation; static FileFormat tiling
remains available for compatibility, preview, and small inputs. Generated-
corpus bounded-memory measurement, the Shizuoka LAS baseline, and payload
working-set measurements are documented in the streaming and tiling roadmap.
A broader real-world dataset matrix remains open.
The LAS conformance fixture and FileFormat Plugin integration gate passed before LAZ integration. The LAZ reader uses the same point-cloud authoring path and validates chunked decoder output through its own FileFormat Plugin integration fixture. Documented support is tracked in capability matrix, which is updated in the same change as any decoder that widens it.