foundation: scroll-unwrap-pipeline — wrap meshes to unwrap videos#1037
foundation: scroll-unwrap-pipeline — wrap meshes to unwrap videos#1037giorgioangel wants to merge 1 commit into
Conversation
Production pipeline for textured Herculaneum wrap segments: exact PLY->OBJ conversion (bit-equal round-trip gates), perceptually-gated UV-preserving decimation, carbon-black ink-overlay baking, and self-intersection-free unwrap animations rendered headlessly to 4K (plain / ink / reveal variants, 16:9 + 9:16, per-frame textured OBJs with two-sided ink shells). Core: rolling-contact unwrap kinematics with a closed-form plane-clearance barrier and chart sanitation (injectivity enforcement, junk-tail trim); a per-frame roll-vs-sheet clearance certificate as a hard non-waivable gate; a deformation-gradient fallback ladder with clearance-dominant ranking; strict mesh-IO layer with library quarantine and convention-trap CI fixtures; signature-keyed batch staging so artifacts from different code revisions cannot silently coexist. Specs in docs/ (MESH-IO, UNWRAP-MATH, RENDER-STYLE, QUALITY-GATES). Checks: full pytest suite green in this tree's own environment. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
The latest updates on your projects. Learn more about Vercel for GitHub. 1 Skipped Deployment
|
|
@codex review |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 983bcf308b
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| """True per face iff the texture alpha at the face's UV centroid exceeds alpha_min. | ||
| Meshes without alpha (RGB textures / no texture) are fully visible.""" | ||
| src = Path(src) | ||
| group = group_of_source(src) |
There was a problem hiding this comment.
Preserve the A/B group for decimated animations
In the production path I inspected, scripts/produce.py invokes animate.py with only row["decimated_obj"], so src is an outputs/decimated/... OBJ rather than a file under textured_ply_march or textured_ply_may. Because group_of_source() only recognizes those original PLY parent directories, this line classifies every decimated A/B animation input as group C, and the alpha visibility mask is then sampled with audit["tex_orientation"]["C"] instead of the mesh's true A/B orientation. That makes the M3 visible-face gates and metrics include/exclude the wrong texture regions for normal production runs; pass the group through from the M2/production manifest or store it in metadata instead of inferring it from the decimated path.
Useful? React with 👍 / 👎.
What
foundation/scroll-unwrap-pipeline/— a production pipeline that takes textured Herculaneum wrap segments (binary PLY + ink predictions in the same UV space) to finished unwrap animations:Specs & layout
Binding contracts in
docs/: MESH-IO, UNWRAP-MATH, RENDER-STYLE, QUALITY-GATES (incl. the vision-review JSON interface for the final gate).src/scrollkit(io | decimate | ink | unwrap | metrics | render), stage CLIs +gate_m0..m5underscripts/, synthetic-fixture tests undertests/.Checks
uv sync && uv run pytest): 38/38 — IO convention traps, analytic-cylinder kinematics, render orientation pinning, ink grading.🤖 Generated with Claude Code