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 # Expected sensing surface topology for r01 (from shipped 30fps-0703 runtime). # First exports from geometry.blend may differ until topology is locked. expected: sensing_vertices: 1032 sensing_triangles: 1974 frames: sensor: origin_sensor objects: sensing_surface: sensing_surface cam_sensor: cam_sensor origin_sensor: origin_sensor # Headless colored-patch texture generation (`orisys-design texture`). # UV unwrapping is still done in the Blender GUI: the headless run consumes the # UV maps already stored in source_blend and never creates or unwraps one. # One PNG/SVG/PDF set is written per UV map below. All maps and formats share # the settings and patch colours, so they differ only by UV layout. # These are the revision defaults; CLI flags override every value. texture_patch: mesh: sensing_surface camera: cam_sensor uv_outputs: produce: patch_texture_produce.png # hardware production layout compute: patch_texture_compute.png # compute/runtime layout width: 3280 # 1640*2 height: 3200 # 1600*2 nx: 80 ny: 45 color_r: 0.05 edge_sample_grid: 5 seed: 7 # fixed so PNG/SVG/PDF share one reproducible colour set vector: width_mm: 16.4 # editable SVG/PDF production page width height_mm: 16.0 # editable SVG/PDF production page height cross: enabled: true length_px: 40 thickness_px: 3 color: [1.0, 0.0, 0.0, 1.0] # red reference cross # Multi-view production textures (`orisys-design texture-views`). STEP 1 ONLY: each pair # writes its own independent PNG/SVG/PDF. There is no ownership partition, no seam handling # and no merge, so the two layouts may cover the same surface region and that overlap is # deliberately left unresolved. # # The PATTERN is grounded on the sensing camera, not on the production views. `uv_1` and # `uv_2` are two different *parameterisations* of the one surface pattern that # `texture_compute` carries, so the printed marker stays a single pattern across the whole # surface. `cam_uv_1` / `cam_uv_2` are the AUTHORING cameras used in Blender (Project from # View (Bounds)) to create those layouts — they are not pattern sources. Passing cam_sensor # as the projection camera with uv_1 / uv_2 as the interpolated layers is exactly what # patch_projection.build_patch_geometry already supports. # # Rendering settings (page size, grid, palette, seed) come from `texture_patch` above, # because they are decisions about the printed page rather than about a particular layout. # `produce`/`compute` and `orisys-design texture` are untouched. # # Scope note: `uv_1`/`uv_2` are related by roughly a 90 degree rotation with a flip — no # rigid or affine transform maps one onto the other, because each is a different projection # of a curved surface. Resolving the overlap therefore has to happen in surface space and is # a later step; see src/orisys_sensor_design/texture_views.py. texture_patch_views: enabled: true pattern_camera: cam_sensor # same pattern source as `compute` pairs: - id: uv_1 # layout authored from cam_uv_1 uv_map: uv_1 - id: uv_2 # layout authored from cam_uv_2 uv_map: uv_2 # Post-generation printability inspection (`orisys-design inspect`). Advisory # only: it reports a verdict but 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 collections: frames: FRAMES export_compute: EXPORT_COMPUTE assembly: ASSEMBLY design_sim: DESIGN_SIM exclude: EXCLUDE 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.