Files
orisys-sensor-design/sensors/finger/r01/design.yaml
T
ykcheungab e8d231ec39 改用相机网格生成笔画纹理
统一笔画配置与彩色 patch 的投影网格,替换旧脚本及产物。
已验证 Blender 导出、16 项相关测试、文档与 lint 门禁。
2026-10-06 10:51:56 +08:00

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.