feat: GS-1 centre lines are double-yellow — row 7 closed (13/14)#207
Merged
Conversation
GS-1 has specified a double-yellow centre (roadMark solid solid, yellow) on every arm since the original spec, but shipped the urban template's single broken line: the kernel could model the mark and nothing could author it. junction_center_marks (#203) closes that, so build_gs1.py now paints it and the scene matches its own spec. Rebuilt: 16 roads, 36 objects, 6 signals, 4 dual-yellow centre lines, 0 diagnostics. Row 7 ticks and gap 5a retires with it — junction_lane_arrows takes a per-lane glyph chooser now, so a turn-lane scene can author left/right. GS-1 itself keeps arrowStraight: one lane per direction serves left, straight and right at once, and no single turn glyph is correct for that. Baseline refreshed in place rather than forked to a v0.7.0 row: v0.6.0 is still unreleased and untagged, so that image certifies nothing yet and there is no published copy to preserve. Row 8 stays open on #194 — it needs a wider road profile, not marks. Refs #193, #73
Authoring the yellow centre line was only half of GS-1 row 7. The mesh had no colour channel at all, and scene_builder painted every marking one hardcoded off-white, so a solid-solid yellow centre line reached the .xodr correctly and still rendered white. The first CI baseline of the rebuilt scene showed exactly that. SubMesh carries e_roadMarkColor — normative data, not RGB, so the kernel stays a render-free layer — and the editor maps it to paint. Standard and White resolve to the off-white markings have always used, so nothing that did not ask for a colour changes appearance. This is why #193's premise was incomplete: it said kernel support existed and only authoring was missing. #69 landed the colour in the model and the writer, and the dual-stripe geometry, but never a path to the mesh. Row 7 was blocked by two gaps and the issue knew about one. Refs #193, #69
Downloaded from this branch's own CI artifact (run 29412174160, head b5d1ea1) — macOS has no offscreen GL context, so a baseline never comes from a dev machine. Looked at before committing: the centre lines read double-yellow down every arm and the edge lines stay white, which is what ticks row 7. The first render of the rebuilt scene had correct data and a white centre line; that is what the render fix in this branch closed. The README hero re-shot with it — it frames the same scene, and shipping a hero whose centre lines disagree with the baseline beside it would be its own small lie.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
The held half of #193, unblocked now that #195 is merged and #203 landed the authoring op. Closes GS-1 row 7 and retires gap 5a.
#193's premise was incomplete — row 7 was blocked by two gaps, not one
The issue said:
Half true. #69 landed colour in the data model and the writer, and the dual-stripe geometry. It never landed a path from
RoadMark::colorto the mesh —SubMeshhad no colour field, andscene_builder.cpp:117painted every marking one hardcoded off-white.I found this the only way it can be found: I rebuilt the scene, got
color="yellow"in the.xodrand 0 diagnostics, and the render still came back white. GS-1's spec ticks rows against the committed baseline render — so on the data alone, row 7 was not closeable, and ticking it would have been a lie the baseline itself disproved.The committed baseline in this PR is the proof: centre lines double-yellow down every arm, edge lines still white.
So this PR closes both halves.
1. Authoring —
build_gs1.pycallsjunction_center_marksReloaded from disk: 0 load diagnostics, 0 validator findings.
2. Render — the mesh carries the colour
SubMeshgainsmark_color(the normativee_roadMarkColor, not RGB — the kernel stays render-free), the builder sets it from the mark, and the editor maps it to paint.StandardandWhiteboth resolve to the off-white markings have always used, so nothing that never asked for a colour changes appearance.Score: 12 / 14 → 13 / 14
5a closed, but GS-1 still authors straight — deliberately
The chooser means a turn-lane scene can author
arrowLeft/arrowRight. GS-1 doesn't, and shouldn't: one lane per direction serves left, straight and right at once, so no single turn glyph is correct. The normative answer isarrowStraightLeftRight(§13.14.8 Table 117), which doesn't mesh yet. The spec says this in place rather than leaving "straight only" looking like an oversight.The baseline: refreshed in place, not forked
My plan said to fork a
v0.7.0baseline so v0.6.0's stayed frozen as published evidence. That premise was wrong:v0.6.0 was never tagged. Merging #195 landed the close-out; it didn't publish it. So
gs1_baseline_v0.6.0.pngcertifies nothing yet and no one holds a copy a refresh would invalidate. Forking a v0.7.0 row would have frozen a baseline for a release that doesn't exist and permanently recorded GS-1 as 12/14 at M3a when it's 13/14 before the tag cuts.One baseline, refreshed in place — exactly what the golden-scenes README prescribes: "A render that changes for a legitimate reason … refreshes the baseline in the same PR, with a note saying why."
Also: #38 and #73 are still open. #195 said "Refs", not "Closes", so they never auto-closed — M3a isn't formally closed, which is what makes landing row 7 inside it legitimate rather than a retcon.
Baseline downloaded from this branch's own CI artifact (run
29412174160, headb5d1ea1) and looked at before committing. The README hero re-shot with it — same scene; a hero whose centre lines disagreed with the baseline beside it would be its own small lie.Also in this PR
CHANGELOG.md[0.6.0]: the centre-mark/arrow feature and the render colour under Added; today's three fixes (#202split_roadcolour/lines, #205 junction-menu reachability, #144 prop-drag clamp) under Fixed; GS-1 "Known gaps" narrowed to row 8 alone.Checks
ci-macosclean (-Werror); 747/747 ctest green; 14/14 CI.RoadMarks.MarkColorReachesTheSubMesh(colour reaches the mesh; an uncoloured mark staysStandard),MarkPaint.YellowIsDistinctFromTheWhiteDefault,BuildScene.MarkingItemsTakeTheirRoadMarkColor.Refs #193, #73, #69