Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 7 additions & 8 deletions docs/architecture/RESOLVER_SOURCE.md
Original file line number Diff line number Diff line change
Expand Up @@ -175,14 +175,13 @@ other outcome through the categories in §4.

`usd-pointcloud-convert` remains the production path for deterministic,
long-running payload generation, and it is the only thing that publishes a
generated entry. **Not implemented (`v0.10.0`):** it accepts `.las` and `.laz`
local inputs only. No COPC input, and no resolver-addressable identifier,
reaches it, so no COPC read — local or resolver-backed — has an entry to hit in
a normal workflow. The lookup side is complete and covered; the generation side
for COPC and for resolver-addressable inputs is future work. When it lands it
computes the same resolver-neutral identity, populates and reuses the generated
cache only under stable identity, and may record the normalized identity class
in manifest or debug metadata — never the transport secrets covered in §2.3.
generated entry. It accepts local `.las`, `.laz`, `.copc`, and `.copc.laz`
inputs, plus resolver-addressable COPC identifiers. Resolver inputs are opened
through the active `ArResolver` and the same resolver-neutral identity is used
for cache layout. Generated-cache publication and reuse are enabled only for
`Stable` identity; `Unstable` and `Unavailable` inputs still convert from the
source but do not publish generated entries. Conversion manifests use a fixed
resolver-source label and never persist the identifier or validation token.

### 3.3 Cache ownership boundary — Implemented (`v0.10.0`)

Expand Down
24 changes: 20 additions & 4 deletions docs/guides/BUILDING.md
Original file line number Diff line number Diff line change
Expand Up @@ -74,10 +74,10 @@ A per-bundle `ost plugin build` does not define `USDGEO_BUILD_TESTS`, so the
CTest integration targets are built only by the workspace `ost build`. Run both
when changing a plugin.

The bundles do not all declare OST test fixtures yet, so `ost plugin test` currently
reports the L3 `usdcat.read` and L4 `python.stage_open` checks as skipped. That
gap is tracked in
[implementation status](../roadmap/implementation-status.md).
All four product bundles declare OST smoke fixtures, so `ost plugin test`
exercises the L3 `usdcat.read` and L4 `python.stage_open` checks for LAS, LAZ,
COPC, and PLY. The workspace CTest integration targets remain separate and are
built by `ost build`.

## Explicit tiled conversion

Expand Down Expand Up @@ -119,6 +119,22 @@ An existing committed cache entry is materialized without decoding the source
again. The cache is derived data; the source file and normalized arguments
remain the authority for invalidation.

Resolver-addressable COPC identifiers use the active OpenUSD resolver. The
resolver must be composed at runtime through `PXR_PLUGINPATH_NAME` and must
provide efficient random-access `ArAsset` reads. Generated-cache publication
and reuse require a `Stable` resolver identity; an unstable or unavailable
identity still converts from the source without publishing a generated entry:

```powershell
$env:PXR_PLUGINPATH_NAME = C:\path\to\resolver\resources
$env:PXR_AR_DEFAULT_RESOLVER = MyResolver
usd-pointcloud-convert `
http://example.invalid/pointcloud.copc `
C:\path\to\output\PointCloud.usda `
--tile-size 128 `
--cache-root C:\path\to\pointcloud-cache
```

Direct LAS, LAZ, and COPC FileFormat reads can use the same cache entries by
setting `USDGEO_CACHE_ROOT` in the host process. A committed hit loads the
cached root before point decoding. The environment variable is storage
Expand Down
8 changes: 4 additions & 4 deletions docs/reference/CAPABILITY_MATRIX.md
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ uses the same reader and authoring contracts for long-running generation.
| Local COPC conversion and generated-cache publication | Supported | `usd-pointcloud-convert` accepts `.copc` and `.copc.laz`, reuses the COPC point stream for fixed-grid or adaptive tiled generation, and publishes entries compatible with local COPC FileFormat cache lookup |
| Resolver-backed COPC reads | Supported | The plugin adapts an `ArAsset` opened through the active `ArResolver` to the project-owned random-access source; remote tiled reads require an absolute local `payloadDirectory`. Transport, authentication, retries, and raw byte caching belong to the resolver |
| Resolver-backed generated-cache lookup | Supported | COPC extracts resolver-neutral identity through the shared adapter and reuses a committed entry only for `Stable` identity. Incomplete and corrupted entries are invalidated, and a changed validation token regenerates rather than hitting the superseded entry. Recorded against an external resolver in the [resolver read baseline](RESOLVER_BASELINE.md); the contract is the [resolver-backed source contract](../architecture/RESOLVER_SOURCE.md) |
| Resolver-backed generated-cache generation | Not supported | The converter publishes local COPC entries but does not yet accept resolver-addressable identifiers, so it cannot publish against resolver-provided identity |
| Resolver-backed generated-cache generation | Supported | `usd-pointcloud-convert` accepts resolver-addressable COPC identifiers, opens them through the active resolver, and publishes/reuses entries only for `Stable` identity; unstable and unavailable identities convert without cache publication |
| Generated-cache decision diagnostics | Supported | `usdgeo::cache::CacheDecision` publishes seven stable, transport-neutral categories; COPC projects them onto `COPC009`-`COPC012` and every message names its category |

## LAS Versions
Expand Down Expand Up @@ -249,9 +249,9 @@ in the [tile and LOD contract](../architecture/LOD.md).
through `USDGEO_CACHE_ROOT`. Reuse requires either a stable local filesystem
identity or a `Stable` resolver identity; `Unstable` and `Unavailable`
identity fails closed and reads from the source. The conversion tool
publishes entries for local LAS, LAZ, and COPC paths, but does not yet accept
resolver-addressable identifiers or publish against resolver-provided
identity.
publishes entries for local LAS, LAZ, and COPC paths plus resolver-addressable
COPC identifiers when the resolver provides a `Stable` identity; unstable
and unavailable resolver identities remain conversion-only.
- No HTTP client, cloud SDK, authentication flow, retry policy, or raw
byte-range cache exists here. Resolver-backed reads consume whatever the
active `ArResolver` provides, and no resolver implementation is a build-time
Expand Down
23 changes: 12 additions & 11 deletions docs/roadmap/implementation-status.md
Original file line number Diff line number Diff line change
Expand Up @@ -380,25 +380,26 @@ Phase 6 — validation and baselines:
- [x] Record remote hit ratios and `bytes fetched / source size` baselines. 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
not measurable end to end, because `usd-pointcloud-convert` publishes
entries for `.las` and `.laz` local inputs only and no COPC read has an
entry to hit; the reuse decision itself is Tier 1 covered
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

#### Open after `v0.10.0`

- [ ] Declare an OST smoke fixture for the `pointcloud-copc` bundle. It is the
only product bundle without one, so its L3 `usdcat.read` and L4
`python.stage_open` checks skip and its bundle cells verify discovery
only.
- [x] Declare an OST smoke fixture for the `pointcloud-copc` bundle. Its
component-owned conformance fixture now exercises the L3 `usdcat.read`
and L4 `python.stage_open` checks alongside the other product bundles.

- [x] Publish generated cache entries for local COPC inputs.
`usd-pointcloud-convert` accepts `.copc` and `.copc.laz`, uses the shared
COPC point stream for fixed-grid and adaptive generation, and publishes
entries compatible with local COPC FileFormat lookup. Remote publication
remains blocked on resolver-addressable converter inputs below.
- [ ] Accept resolver-addressable identifiers in `usd-pointcloud-convert`, as
described in the
entries compatible with local COPC FileFormat lookup. Resolver-backed
publication is covered below and requires a stable resolver identity.
- [x] Accept resolver-addressable COPC identifiers in
`usd-pointcloud-convert`, as described in the
[resolver-backed source contract](../architecture/RESOLVER_SOURCE.md).
Stable resolver identities publish and reuse generated entries; unstable
and unavailable identities convert without cache publication.

#### Research - runtime streaming (no release gate)

Expand Down
15 changes: 8 additions & 7 deletions docs/roadmap/infrastructure-maturity.md
Original file line number Diff line number Diff line change
Expand Up @@ -486,13 +486,14 @@ isolated under `tests/`, and recorded remote baselines including
`bytes fetched / source size` against the released `usd-http-resolver`
`v0.4.0`.

One thing the gate asked for is recorded as absent rather than as met: a
generated-cache *hit ratio* for a remote source. The converter now publishes
entries for local `.copc` and `.copc.laz` inputs, but it does not yet accept a
resolver-addressable identifier or publish against resolver-provided identity.
The lookup side, local COPC publication, reuse rules, and every decision
diagnostic are complete and covered; resolver-addressable conversion is the
remaining step that makes the remote ratio measurable.
The converter now accepts resolver-addressable COPC identifiers and publishes
entries against resolver-provided identity when it is `Stable`. Tier 1 covers
the resolver-backed miss-to-hit path and verifies that resolver identifiers and
validation tokens do not enter conversion manifests. `Unstable` and
`Unavailable` identities remain conversion-only, so a remote cache hit ratio is
measurable only for resolvers that provide stable validation metadata; the Tier
2 baseline currently records resolver read selectivity rather than a generated
cache ratio.

### Research - Runtime Streaming

Expand Down
12 changes: 12 additions & 0 deletions plugins/pointcloud-copc/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -127,6 +127,18 @@ if(USDGEO_BUILD_TESTS)
usdgeo_configure_openusd_test_runtime(pointcloudCopc_integration)
set_property(TEST pointcloudCopc_integration APPEND PROPERTY
ENVIRONMENT "PXR_AR_DEFAULT_RESOLVER=HttpResolver")
if(TARGET usd-pointcloud-convert)
add_dependencies(usd-pointcloud-convert HttpResolver)
add_test(NAME usdPointCloudConvert_resolver_copc
COMMAND ${CMAKE_COMMAND}
-Dconverter=$<TARGET_FILE:usd-pointcloud-convert>
-Dfixture=${CMAKE_CURRENT_BINARY_DIR}/resolver-conformance.copc
-Dfixture_generator=$<TARGET_FILE:usdCopc_tests>
-Dtest_root=${CMAKE_CURRENT_BINARY_DIR}/resolver-conversion
-Dresolver_plugin_path=${CMAKE_CURRENT_SOURCE_DIR}/../../tests/plugins/httpresolver/plugin/resources/httpresolver
-P ${CMAKE_CURRENT_SOURCE_DIR}/../../tools/usd-pointcloud-convert/test_resolver_conversion.cmake)
usdgeo_configure_openusd_test_runtime(usdPointCloudConvert_resolver_copc)
endif()
endif()

openstrata_configure_plugin(
Expand Down
8 changes: 4 additions & 4 deletions plugins/pointcloud-copc/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -31,10 +31,10 @@ absolute local `payloadDirectory`.

Generated-USDC cache lookup is enabled for a stable local filesystem identity
and for a `Stable` resolver identity. `Unstable` and `Unavailable` identity
fails closed: the read proceeds from the source and says why. Nothing here
publishes an entry; `usd-pointcloud-convert` publishes entries for local
`.copc` and `.copc.laz` inputs. Resolver-backed publication remains unavailable
until the converter accepts resolver-addressable identifiers.
fails closed: the read proceeds from the source and says why. This plugin does
not publish entries; `usd-pointcloud-convert` publishes entries for local
`.copc` and `.copc.laz` inputs and resolver-addressable COPC identifiers when
the resolver supplies a `Stable` identity.

Every cache decision is reported through four codes that project the stable
categories `usdgeo::cache` publishes, each message naming its exact category:
Expand Down
3 changes: 3 additions & 0 deletions plugins/pointcloud-copc/openstrata.plugin.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -11,3 +11,6 @@ requires:
capabilities: [usd-stage-read]
usd:
plug_info: plugin/resources/pointcloud-copc/plugInfo.json
tests:
smoke:
- tests/fixtures/conformance.copc
Binary file not shown.
Loading
Loading