Measure crop-over-grass z-fighting with --flicker, now atlas can extract BRP cells #307
Labels
No labels
agent
agent:ci
agent:done
agent:failed
agent:needs-input
agent:refined
agent:refining
agent:running
agent:shipped
agent:skip
autonomous
autopilot
driven
local
plan
proposal
qa
qa-gap
research
retro
ship
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
jeroen/cartopolis#307
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Problem
The crop-parcel layer has been drawn by the client since 2026-08-30, but its depth ordering has never been checked.
docs/notes/crop-parcels.md:95-101placesCrophalf a step aboveGrasswith '32 ULP of margin' and then says: "Unverified on real hardware — the--flickerinstrument is what would confirm it, and it needs a host serving/brp/coverage.jsonbefore there is anything to photograph."That depth ordering is the only thing keeping the two layers apart. The OSM ground fills are cut against each other so no ground is drawn twice (
crates/geo/src/vector_tiles.rs~2025-2060, the doc comment ontessellate_surfaces). Crop parcels are not part of that cut:crates/geo/src/crops.rs:193-201(build_crop_meshes) builds them separately withbuild_flat_fills, and they lie directly on top of the OSM grass that farmland is drawn as. If the margin is too small, every field in the country z-fights with the grass under it whenever the camera moves.The blocker is gone.
e3ea134(2026-09-26) added atlas'spipeline/brp.rs, which writesbrp/14/x/y.jsonandbrp/coverage.json. Its commit body records 1145 parcels across 9 cells over a 3 km box north of Groningen, extracted in 1 s.Evidence
docs/notes/crop-parcels.md:99-101: the unverified claim and the instrument that would settle it.crates/geo/src/crops.rs:193-201: crop meshes are built outside the cut that keeps the ground fills from overlapping.crates/geo/src/ground_stack.rs:138,274:GroundLayer::Crophas a clearance of 1, the smallest in the window, shared with Forest and Sand.crates/cartopolis/src/systems/dev/shot_harness.rs:812-817,3686:crop_parcelsis already a--dump-statefield.crates/cartopolis/src/systems/map/osm_buildings.rs:147-150andresources.rs:1635:CARTO_3DBAG_URLpoints the client at a loopback host, so this needs no production deploy.Approach
atlas run brp --bbox <RD box>locally over the 3 km box from e3ea134's commit body (farmland north of Groningen) into a temporary directory, and serve it on loopback withCARTO_3DBAG_URL. Run it twice: once with thebrp/tree present and once without it. Without it the coverage manifest is missing and no crops are drawn, which gives the "off" side of the comparison.--flicker, at 300 m, 1 km and 3 km altitude, pitched about -35°. Use the pinned environment the instrument calls for:--time 12 --clouds 0 --rain 0 --hide-ui. The margin is fixed in depth-buffer ULPs, so a problem at range would show at the higher viewpoints. Shoot on the Deck slot if it is free, otherwise on a VPS slot. Flicker is a geometry question, so lavapipe's output counts here.cartopolis_geo. Either cut the parcels' footprint out of the tile's grass group (the same remove-the-overlap approachtessellate_surfacestakes), or widen the Crop clearance inground_stack. Keep whateverground_stacktests exist passing. Choose one and give the reason in the commit body.docs/notes/crop-parcels.mdwith the measured numbers, the date and the method.Acceptance criteria
crop_parcels > 0, asserted with--expect 'crop_parcels>0'.flicker_pxwith crops on is at mostflicker_pxwith crops off plus 0.1 % of the frame's pixels. The CSV rows for both runs are recorded in the note.cargo test -p cartopolis_geopasses, including a new test that a crop parcel over a grass polygon leaves no grass drawn twice (if the cut approach is taken).docs/notes/crop-parcels.mdno longer says 'Unverified' about the depth ordering. It states the measured result.Verification
Out of scope
/brp/there.scene-smokehas no BRP fixture, and adding one is a separate decision.Direction
Value 6: the result is
flicker_pxandcrop_parcels, both counts. Value 1: it confirms a claim the note itself marks as unmeasured. If a fix turns out to be needed, the preferred one is to delete the overlap rather than widen the tolerance (the ground stack's own rule). Value 4: grass is only removed where a parcel is drawn in its place. It touches no wire protocol, no database schema, nothing judged by eye, no AR, no Android publishing and no host change: the data is served on loopback inside the container.Filed unattended by the steward from
e3ea134695. To reject, close it with a sentence saying why — the next run reads that.Closing on review: superseded by
dbb1a41(2026-09-27), which found the crop/grass blotching on the Deck, removed the overlap withcrops::cut_into_ground, and replaced the note's "Unverified" sentence (docs/notes/crop-parcels.md, "Depth, and why the ladder was not enough").