改用相机网格生成笔画纹理

统一笔画配置与彩色 patch 的投影网格,替换旧脚本及产物。
已验证 Blender 导出、16 项相关测试、文档与 lint 门禁。
This commit is contained in:
ykcheungab
2026-10-06 10:51:56 +08:00
parent 35da84ef60
commit e8d231ec39
25 changed files with 405507 additions and 94905 deletions
+8 -20
View File
@@ -88,27 +88,15 @@ texture_patch_views:
print:
base_fill: owned # white ground, already split by the seam
# Random Stroke Pattern (`orisys-design stroke-texture`).
# One mode: a capsule of `width` swept `length`, rotated per cell, sized from the camera
# cell's print-page footprint so a cell the projection stretches gets a proportionally
# larger mark. `--seed` / `--min-cell-pixels` / `--camera-width-fraction` override per run.
# Field reference: the inline comments below. This is an image-space experiment, not a
# print master. The resolved values are written to _stroke_pattern_params.json and
# recorded in the stroke-texture manifest, which is what makes a run reproducible.
# Camera-grid capsule strokes (`orisys-design stroke-texture`). Grid, camera projection,
# UV maps, image size and vector page come from the texture_patch job above.
# Ratios are fractions of each projected cell. Physical minimum width is not enforced.
stroke_pattern:
seed: 7 # per-cell offset and angle; reproducible
min_cell_pixels: 20 # cells smaller than this are skipped
jitter_fraction: 0.66 # mark offset range inside its cell; 0 pins to the centre
angle_span_deg: 180.0 # rotation range; 0 makes every stroke parallel
width_fraction: 0.50 # width = clamp(cell footprint x this, width_min_mm, width_max_mm)
width_min_mm: 0.20
width_max_mm: 0.28
length_ratio: 2.4 # length = ratio x width
coverage_cap: 0.45 # initial placement limit; endpoint growth uses target_coverage
neighbourhood_mm: 0.5 # radius of the local-fill neighbourhood
clearance_mm: 0.03 # minimum edge-to-edge spacing on the vector page
candidate_count: 12 # try alternatives before skipping a cell
target_coverage: 0.50 # extend accepted strokes into free space, without overlap
seed: 7
width_ratio: 0.42
length_ratio: 0.84
orientation_mode: random
proposals: 100000 # used only in optimized mode
# Advisory only: reports a verdict, never blocks generation or changes exit codes.
# Millimetres are measured on the vector page declared above.
+7 -18
View File
@@ -94,25 +94,14 @@ texture_patch_views:
print:
base_fill: owned # white ground, already split by the seam
# Random Stroke Pattern (`orisys-design stroke-texture`).
# One mode: a capsule of `width` swept `length`, rotated per cell, sized from the camera
# cell's print-page footprint so a cell the projection stretches gets a proportionally
# larger mark. `--seed` / `--min-cell-pixels` / `--camera-width-fraction` override per run.
# Field reference: the inline comments below. These defaults are an image-space experiment,
# not a print master: `width_min_mm: 0.11` is below the demonstrated 0.2 mm dot (see
# docs/probe-findings.md). The resolved values are written to _stroke_pattern_params.json and
# recorded in the stroke-texture manifest, which is what makes a run reproducible.
# 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 # per-cell offset and angle; reproducible
min_cell_pixels: 20 # cells smaller than this are skipped
jitter_fraction: 0.66 # mark offset range inside its cell; 0 pins to the centre
angle_span_deg: 180.0 # rotation range; 0 makes every stroke parallel
width_fraction: 0.50 # width = clamp(cell footprint x this, width_min_mm, width_max_mm)
width_min_mm: 0.11
width_max_mm: 0.28
length_ratio: 2.4 # length = ratio x width
coverage_cap: 0.45 # skip a mark that would exceed this local fill
neighbourhood_mm: 0.5 # radius of the local-fill neighbourhood
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.