Skip to content

Bake measured point RGB and reject cloud-occluded photo texels - #63

Open
boazeggs wants to merge 74 commits into
OpenAEC-Foundation:mainfrom
boazeggs:codex/measured-point-textures
Open

boazeggs wants to merge 74 commits into
OpenAEC-Foundation:mainfrom
boazeggs:codex/measured-point-textures

Conversation

@boazeggs

@boazeggs boazeggs commented Nov 6, 2026

Copy link
Copy Markdown
Contributor

Point-colour texturing previously interpolated the reconstructed mesh's stored vertex RGB, and photo visibility only considered the reconstructed faces. This could retain stale colours and project a photograph through foreground measurements omitted from the mesh.

Resample original cloud RGB with a bounded spatial index, distance weights, local surface normals and robust colour rejection. Respect the layer's colour/deletion snapshot. Unsupported areas remain explicitly unobserved instead of inheriting coarse vertex colour. Add bounded source-cloud depth maps to photograph visibility, including foreground outside the reconstructed ROI. API revision 18 reports measured versus vertex fallback, source sample count and sampling limits; the native Properties view shows the sampling limitation.

Closes #13. Refs #32.

This PR builds on #62 at 5423c2859ead73f4f65030ec1a374c0b3a1fdc07, which includes #53 and the earlier integration. The incremental texture commit is 0962214392f806bdf4c95bcafaecce081bfd2276. Merge #53 and #62 first for an incremental review; their review heads remain unchanged. Existing PR heads remain ancestors, so use normal merge commits when approved.

Validation:

  • Entire Rust workspace: 1,480 passed, 0 failed, 12 ignored; workspace/all-target and minimal-core Clippy pass with warnings denied. Rustfmt, Python syntax, locale JSON and diff checks pass.
  • Measured colour ramp stays within three RGB levels. Tests reject an isolated nearest-colour outlier, wrong surface directions, a nearby parallel wall and source-cloud photo occlusion outside the mesh. Atlas pixels repeat deterministically; edited/deleted colours and source identity are tested.
  • Actual native viewer: 903 source points produce 1,800 measured RGB texels and 756 unobserved texels, with no stale red vertex fallback. Repeated PNG bytes match; toggling the measured atlas changes 47,957 viewport pixels. The original fixture remains unchanged.
  • Real Riegl E57: 1,095,702 points and five station images; 43,913 photo texels, no failed decoding, safe cancellation and unchanged original SHA-256.
  • Real BLK2GO E57: 199,186,802 source points, 262,144 bounded samples, 23.63 s bake and 660,152 KiB peak native RSS for reconstruction/baking together. Progress advances, cancellation leaves no files, and the source SHA-256 stays unchanged. OBJ/MTL/PNG reopens and renders in the independent trimesh/pyglet OpenGL viewer, as does the generated colour fixture.

Repeatable probes, hardware/settings and recorded results include the exact limits. Sampling is capped at 262,144 points; without an octree it uses a bounded resident preview. Photo depth maps are at most 512×512, cached for eight images, so empty cells make no visibility claim. The deliberately coarse 5,000-vertex large fixture has 9,432 open edges and many unobserved texels: this validates bounded processing and explicit missing coverage, not reconstruction quality or full SLAM trajectory-photo coverage. Timings are shared-workstation development runs, not controlled performance comparisons. Vendor scans/images are not redistributed.

DutchSailor and others added 30 commits May 22, 2026 09:37
Combines two tracks into one v0.4.0 release:
- Spoor B: replace in-memory pipeline with COPC streaming + CCCoreLib FFI kernel
- Spoor A: full adoption of @openaec/ui design tokens and components

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
First of five plans derived from the v0.4.0 design spec. This plan handles
only the UI rebrand: install @openaec/ui from GitHub, rename --theme-* to
--oaec-* throughout, remove the multi-theme switcher, single dark theme.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Create src/styles/openaec-overrides.css with composite canvas-grid and ribbon-gradient tokens
- Import openaec-overrides.css between components.css and globals.css in main.tsx
- Strip all four multi-theme blocks from globals.css; replace with single [data-theme="light"] block using --oaec-* tokens
- Update @theme block RHS from --theme-* to --oaec-*
- Rename all remaining --theme-* references in utility sections to --oaec-* equivalents
- Replace hardcoded hex brand colours (#1d4ed8, #2563eb, #fff) with --oaec-accent / --oaec-accent-hover / --oaec-accent-text

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Remove the unscoped 'Input controls - Dark theme' block (~63 lines) from
Ribbon.css — .ribbon-input-group, .ribbon-input-label, .ribbon-color-input,
and the unscoped .ribbon-input/.ribbon-input-row rules were dead code
overridden by the scoped .ribbon-transform-inputs block. Clean stale hex
fallbacks from that scoped block (var(--oaec-bg-input, #0f172a) →
var(--oaec-bg-input), etc.). Update ErrorBoundary inline styles in main.tsx
to match the OpenAEC palette (#1a1a2e→#36363E, #ff6b6b/#ffa07a→#f87171,
#4a90d9→#D97706, #888→rgba(250,250,249,0.6)).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…stem

Plan 1 of 5 toward v0.4.0. Replaces multi-theme styling (--theme-*) with
@openaec/ui tokens (--oaec-*), removes the theme switcher UI and state,
adopts the OpenAEC dark palette with orange accent as the single theme.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Adds the missing orange File tab as leftmost ribbon-tab (matches the OpenAEC
standard from open-2d-studio); for v1 it triggers the Import handler. Overrides
five tokens in openaec-overrides.css to match the canonical style-book values
(@openaec/ui v0.1.0 is out of sync upstream): panels darker not lighter, borders
neutral grey not orange-tinted, secondary/muted text as warm neutrals.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…rt/Export/About)

Implements the OpenAEC-standard backstage pattern from open-2d-studio. The
orange File tab in the ribbon now opens a full-viewport overlay with a sidebar
(Open / Import / Export / About) and a main content panel per active view.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
After the Authenticode and OpenPGP signing, sign-updates.sh writes a
minisign .sig beside the Windows setup and each AppImage with the
repository's updater key, and the .sig files go on the release. Once the
release is public, a last job makes latest.json with the release kit of
the installer: it checks every signature against UPDATER_PUBKEY and the
tag against native/Cargo.toml, and attaches latest.json last. The OpenAEC
Installer then checks the signature before a silent update
(OpenAEC-Foundation/OpenAEC-Blueprint#33).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
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.

Texture surfaces using point colours or E57 photographs

3 participants