Skip to content

Epic 147E: bounded COPC to 3D Tiles exporter - #104

Merged
rsasaki0109 merged 1 commit into
mainfrom
agent/epic147-tiles3d-copc
Aug 6, 2026
Merged

rsasaki0109 merged 1 commit into
mainfrom
agent/epic147-tiles3d-copc

Conversation

@rsasaki0109

Copy link
Copy Markdown
Owner

Summary

Extends the Epic 147 3D Tiles work with a bounded COPC → 3D Tiles exporter. A COPC file's octree hierarchy is walked one node at a time and written as tileset.json + one .pnts tile per node — the whole cloud is never materialized.

Deliverables

  • spatialrust-io CopcNodeReader (147E): opens a COPC file once, loads only hierarchy metadata, exposes nodes in deterministic (level, x, y, z) order, and reads one PointCloud per node on demand.
  • spatialrust-interchange export_copc_tileset (feature tiles3d-copc): mirrors the COPC octree into a tileset.json, writes one pnts tile per node with a per-tile RTC_CENTER, bounds the hierarchy with max_level, and returns a byte/point/tile receipt.
  • Facade feature interchange-tiles3d-copc, tiles3d_copc_export example, and facade E2E test.

Contract

  • Data stays caller-owned host memory; no hidden host/device copy.
  • Node ordering and tile content are deterministic for the same input.
  • tiles3d-copc is the only interchange feature that pulls spatialrust-io/spatialrust-core; the base tiles3d codec remains dependency-free.

Verification

  • cargo test -p spatialrust-interchange --features tiles3d-copc — 22 tests
  • cargo test -p spatialrust --features "interchange-tiles3d-copc io-pcd io-copc" --test tiles3d_smoke
  • clippy -D warnings clean; cargo fmt --all --check clean
  • Manual: 200k-point grid.copc.laz → 9 tiles / 200,000 points in ~2.4 MB pnts, no full-cloud materialization

Add CopcNodeReader to spatialrust-io: opens a COPC file once, loads
only hierarchy metadata, and yields one PointCloud per octree node in
deterministic (level, x, y, z) order. spatialrust-interchange gains
export_copc_tileset behind tiles3d-copc, which mirrors the COPC octree
into tileset.json plus one pnts tile per node with a per-tile
RTC_CENTER, bounded by max_level, without materializing the whole
cloud. Add the tiles3d_copc_export example and facade-level E2E tests.
@rsasaki0109
rsasaki0109 merged commit 307f5b0 into main Aug 6, 2026
101 checks passed
@rsasaki0109
rsasaki0109 deleted the agent/epic147-tiles3d-copc branch August 6, 2026 12:35
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant