brush-paint-opt: widen lookahead_steps range to 5-10 + apply minor v3 tweaks

Lookahead bound: 2-6 → 5-10. Live debug-viewer test showed
lookahead_steps=7 fixes W's apex (the walker can see across the
~1.5×-brush gap to the second diagonal at the bottom). At
lookahead=3 (current default), horizon = lookahead × step_size ×
brush ≈ 1.2 × brush — short of the unpainted leg past sharp
corners on M/W/A. Range 5-10 lets the optimizer pick a value that
clears these without going so wide it captures unrelated bg.

Also rolling in the trivial winners from the prior 12x8x2 run:
  brush_radius_offset_px:  0.50 → 0.53
  output_rdp_eps:          1.0  → 1.98
Frontend mirror updated to match.
This commit is contained in:
Mitchell Hansen
2026-05-06 22:00:49 -07:00
parent 75edb76681
commit 890d4e9eed
3 changed files with 5 additions and 5 deletions

View File

@@ -38,7 +38,7 @@ export async function loadTestLetter(passIdx, ch, fontMm, dpi, thicknessPx) {
// Default PaintParams must match Rust's `impl Default for PaintParams`. // Default PaintParams must match Rust's `impl Default for PaintParams`.
export const DEFAULT_PAINT_PARAMS = { export const DEFAULT_PAINT_PARAMS = {
brush_radius_factor: 0.88, brush_radius_factor: 0.88,
brush_radius_offset_px: 0.50, brush_radius_offset_px: 0.53,
brush_radius_percentile: 0.93, brush_radius_percentile: 0.93,
step_size_factor: 0.40, step_size_factor: 0.40,
n_directions: 48, n_directions: 48,
@@ -56,7 +56,7 @@ export const DEFAULT_PAINT_PARAMS = {
pen_lift_reach: 3.0, pen_lift_reach: 3.0,
max_steps_per_stroke: 4000, max_steps_per_stroke: 4000,
max_strokes: 12, max_strokes: 12,
output_rdp_eps: 1.0, output_rdp_eps: 1.98,
} }
export async function getPaintDebug(passIdx, hullIdx, params = DEFAULT_PAINT_PARAMS) { export async function getPaintDebug(passIdx, hullIdx, params = DEFAULT_PAINT_PARAMS) {

View File

@@ -153,7 +153,7 @@ impl Default for PaintParams {
// letters miscounted) are NOT respected — known limitation // letters miscounted) are NOT respected — known limitation
// of the soft inner-score the meta search uses. // of the soft inner-score the meta search uses.
brush_radius_factor: 0.88, brush_radius_factor: 0.88,
brush_radius_offset_px: 0.50, brush_radius_offset_px: 0.53,
brush_radius_percentile: 0.93, brush_radius_percentile: 0.93,
step_size_factor: 0.40, step_size_factor: 0.40,
n_directions: 48, n_directions: 48,
@@ -171,7 +171,7 @@ impl Default for PaintParams {
pen_lift_reach: 3.0, pen_lift_reach: 3.0,
max_steps_per_stroke: 4000, max_steps_per_stroke: 4000,
max_strokes: 12, max_strokes: 12,
output_rdp_eps: 1.0, output_rdp_eps: 1.98,
} }
} }
} }

View File

@@ -59,7 +59,7 @@ pub fn default_axes() -> Vec<Axis> {
set: |p, v| p.overpaint_penalty = v, get: |p| p.overpaint_penalty }, set: |p, v| p.overpaint_penalty = v, get: |p| p.overpaint_penalty },
Axis { name: "step_size_factor", lo: 0.20, hi: 0.90, is_int: false, Axis { name: "step_size_factor", lo: 0.20, hi: 0.90, is_int: false,
set: |p, v| p.step_size_factor = v, get: |p| p.step_size_factor }, set: |p, v| p.step_size_factor = v, get: |p| p.step_size_factor },
Axis { name: "lookahead_steps", lo: 2.0, hi: 6.0, is_int: true, Axis { name: "lookahead_steps", lo: 5.0, hi: 10.0, is_int: true,
set: |p, v| p.lookahead_steps = v as usize, get: |p| p.lookahead_steps as f32 }, set: |p, v| p.lookahead_steps = v as usize, get: |p| p.lookahead_steps as f32 },
Axis { name: "n_directions", lo: 8.0, hi: 64.0, is_int: true, Axis { name: "n_directions", lo: 8.0, hi: 64.0, is_int: true,
set: |p, v| p.n_directions = v as usize, get: |p| p.n_directions as f32 }, set: |p, v| p.n_directions = v as usize, get: |p| p.n_directions as f32 },