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 # 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.