fix algining xynova texture to uv printing fixture.

This commit is contained in:
ykcheungab
2026-09-29 16:33:31 +08:00
parent 267334d543
commit 37e3e8400b
33 changed files with 758477 additions and 886701 deletions
+26 -2
View File
@@ -78,6 +78,22 @@ texture_patch:
texture_patch_views:
enabled: true
pattern_camera: cam_sensor # the pattern every layout carries, same source as `compute`
# Per-view page sizing. Measured here: the uv_1/uv_2 layouts are 21.1989 x 23.2003 mm
# (aspect 0.9137) and 21.2001 x 23.2003 mm (aspect 0.9138) — PORTRAIT. `vector:` above says
# 18.5 x 16.4 (aspect 1.1280), which is LANDSCAPE, so the artwork was stretched 23% in the
# wrong direction. `auto` derives the page per view and proves the layout really is a
# bounds-projection from the named camera before using the result.
#
# `px_per_mm: 200` reproduces the existing density exactly (3700/18.5 = 200.0).
#
# `fixed` keeps `texture_patch.vector`, which unwrapped layouts (`produce`, `compute`)
# require — they are not projections.
#
# Overlay note: the scene render is 250x250 while these layouts are 0.9138 aspect, so set the
# render resolution to the emitted raster size and use "Stretch to fill".
page:
mode: auto
px_per_mm: 200
pairs:
- id: uv_1
camera: cam_uv_1 # REGION camera
@@ -87,10 +103,18 @@ texture_patch_views:
uv_map: uv_2
merge:
mode: authored # honour the 45-edge seam marked on the mesh
incidence_limit_deg: 62.0 # measured on this part: hole fraction 0.0002 at 62 deg
# RE-MEASURED 2026-09-29 after the region cameras moved (cam_uv_1 az 318.9 -> 308.3,
# elevation -43.3 -> -24.5, distance 37.6 -> 32.6 mm). Sweep at min_triangle_coverage 0.60:
# 62deg -> hole 0.0480 FAILS max_hole_fraction (a visible bald patch of 29.6 mm^2)
# 65deg -> hole 0.0130 passes, but barely
# 70deg -> hole 0.0001 passes with margin <-- current
# The limit is a property of the camera poses and the surface, so MOVING THE CAMERAS
# INVALIDATES IT. Re-run the sweep after any re-pose. min_triangle_coverage is not binding
# here: relaxing it to 0 changes nothing at 62 or 70 degrees.
incidence_limit_deg: 70.0
min_footprint_mm2: 2.0e-3
min_triangle_coverage: 0.60
max_hole_fraction: 0.02
max_hole_fraction: 0.02 # enforced: the run fails above this rather than shipping a gap
component_policy: best_coverage
seam:
boundary: use_seam
Binary file not shown.
+19
View File
@@ -70,6 +70,25 @@ texture_patch:
texture_patch_views:
enabled: true
pattern_camera: cam_sensor # the pattern every layout carries, same source as `compute`
# Per-view page sizing. A layout authored by Project from View (Bounds) maps [0,1]^2 to the
# image-plane extent of the mesh through ITS camera, so the page is measurable and differs
# per view: measured 17.5116 x 15.9772 mm for uv_1 (aspect 1.0960) and 17.5114 x 15.9820 mm
# for uv_2 (aspect 1.0957). `vector:` above says 16.4 x 16.0 (aspect 1.0250), which stretched
# the artwork by 6.9% along u. `auto` derives it and proves the layout really is a
# bounds-projection from the named camera before using the result.
#
# `px_per_mm: 200` reproduces the existing density exactly (3280/16.4 = 3700/18.5 = 200.0),
# and the page is set from the rounded raster so page and raster always share an aspect.
#
# `fixed` keeps `texture_patch.vector`. Unwrapped layouts (`produce`, `compute`) are not
# projections and must use it — a camera-derived page would be meaningless there.
#
# To overlay a texture on a render from its camera: set the render resolution to the emitted
# raster size and the background image to "Stretch to fill". At any other resolution the
# scene aspect (1280x720 here) will distort the overlay regardless of the page.
page:
mode: auto
px_per_mm: 200
pairs:
- id: uv_1 # layout authored from cam_uv_1
camera: cam_uv_1 # REGION camera: what this pair may own