e8d231ec39
统一笔画配置与彩色 patch 的投影网格,替换旧脚本及产物。 已验证 Blender 导出、16 项相关测试、文档与 lint 门禁。
120 lines
4.8 KiB
YAML
120 lines
4.8 KiB
YAML
sensor: finger
|
|
revision: r01
|
|
status: experimental
|
|
|
|
# Authoring unit in Blender (mm). Export converts using meters_per_source_unit.
|
|
authoring_unit: mm
|
|
meters_per_source_unit: 0.001
|
|
|
|
source_blend: source/geometry.blend
|
|
|
|
frames:
|
|
sensor: origin_sensor
|
|
|
|
objects:
|
|
sensing_surface: sensing_surface
|
|
cam_sensor: cam_sensor
|
|
origin_sensor: origin_sensor
|
|
|
|
# Read on every export; changing `assembly` silently changes what ships.
|
|
collections:
|
|
frames: FRAMES
|
|
export_compute: EXPORT_COMPUTE
|
|
assembly: ASSEMBLY
|
|
design_sim: DESIGN_SIM
|
|
exclude: EXCLUDE
|
|
|
|
# Topology guard. NOT YET WIRED - no code reads these, and the measured topology is
|
|
# 1034/1977. Unverified until connected to the export manifest; see
|
|
# docs/design-parameters.md part 5.
|
|
expected:
|
|
sensing_vertices: 1032
|
|
sensing_triangles: 1974
|
|
|
|
# Camera-space artwork on UV unwraps (`orisys-design texture`).
|
|
# See docs/design-parameters.md part 1.
|
|
texture_patch:
|
|
mesh: sensing_surface
|
|
camera: cam_sensor
|
|
uv_outputs: # ORDER IS OBSERVABLE: becomes the job's outputs[] array
|
|
produce: patch_texture_produce.png
|
|
compute: patch_texture_compute.png
|
|
width: 3280 # raster px; keep == px_per_mm * vector below
|
|
height: 3200
|
|
nx: 80 # 16:9 camera frame, left as-is from the original grid
|
|
ny: 45
|
|
color_r: 0.05
|
|
edge_sample_grid: 5
|
|
seed: 7 # pinned: one reproducible colour set across PNG/SVG/PDF
|
|
vector: # physical page; the `page: fixed` fallback for texture_patch_views
|
|
width_mm: 16.4
|
|
height_mm: 16.0
|
|
cross:
|
|
enabled: true
|
|
length_px: 40
|
|
thickness_px: 3
|
|
color: [1.0, 0.0, 0.0, 1.0]
|
|
|
|
# Projected views with per-triangle ownership (`orisys-design texture-views`).
|
|
# The PATTERN is grounded on cam_sensor, not on the production views: uv_1 and uv_2 are two
|
|
# parameterisations of the one surface pattern `compute` carries, so the printed marker stays
|
|
# a single pattern. `cam_uv_1`/`cam_uv_2` authored those layouts (Project from View (Bounds))
|
|
# and now serve as each pair's REGION camera, deciding what that pair may own.
|
|
# Ownership closes the overlap: both layouts are full-surface, so without a partition printing
|
|
# both would double-ink essentially the whole part.
|
|
# Keys: docs/design-parameters.md section 4. Why: D:\orisys_ws\docs\workflow\multiview-ownership-decision.md
|
|
texture_patch_views:
|
|
enabled: true
|
|
pattern_camera: cam_sensor # the ink source; a pair's `camera` only decides ownership
|
|
page:
|
|
mode: auto # auto = derived per view (projections only); fixed = use vector above
|
|
px_per_mm: 200
|
|
pairs:
|
|
- id: uv_1
|
|
camera: cam_uv_1 # REGION camera, not the pattern source
|
|
uv_map: uv_1
|
|
- id: uv_2
|
|
camera: cam_uv_2
|
|
uv_map: uv_2
|
|
merge:
|
|
mode: authored # honour the seam marked on the mesh
|
|
incidence_limit_deg: 62.0 # calibrated to THIS revision's cameras; re-measure if they move
|
|
max_hole_fraction: 0.02 # enforced: the run fails above this rather than shipping a gap
|
|
min_footprint_mm2: 2.0e-3
|
|
min_triangle_coverage: 0.60
|
|
component_policy: best_coverage # not `pinned`: both views qualify, so let the metric rank
|
|
seam:
|
|
boundary: use_seam # read mesh.edges[].use_seam as a hard graph cut
|
|
pins: [] # {component, view, reason} to override a component's owner
|
|
gap:
|
|
enabled: true # false = hard butt at the seam, no band at all
|
|
apply: post_process # post_process = straight edge | geometry_trim = sawtooth
|
|
treatment: no_print
|
|
alignment_tolerance_mm: 0.1 # per-pass placement accuracy; band total = 2x this
|
|
print:
|
|
base_fill: owned # white ground, already split by the seam
|
|
|
|
# Camera-grid capsule strokes (`orisys-design stroke-texture`). Geometry and output size
|
|
# follow texture_patch. This mode currently accepts single-view jobs only.
|
|
stroke_pattern:
|
|
seed: 7
|
|
width_ratio: 0.42
|
|
length_ratio: 0.84
|
|
orientation_mode: random
|
|
proposals: 100000
|
|
|
|
# Advisory only: reports a verdict, never blocks generation or changes exit codes.
|
|
# Millimetres are measured on the vector page declared above.
|
|
printability:
|
|
printer_dpi: 600 # target UV printer resolution
|
|
min_dots: 2 # printer dots required across the smallest feature
|
|
min_feature_mm: 0.10 # smallest acceptable feature width
|
|
min_edge_mm: 0.05 # shortest acceptable polygon edge
|
|
max_sliver_ratio: 4.0 # longest edge / minimum width
|
|
min_patch_area_mm2: 1.0e-4 # area above which a polygon is a material feature
|
|
|
|
notes: |
|
|
Canonical source is geometry.blend with named collections and objects.
|
|
Compute export uses sensing_surface + cam_sensor relative to origin_sensor.
|
|
Studio observation cameras are derived from mesh bounds; no cam_viz required.
|