5.1 KiB
Plan: Improve Bevel & Emboss MAE (138.99 → target < 20)
Root Cause Analysis
The bevel/emboss MAE is 138.99 (vs drop shadow at 4.95). Three independent issues cause this:
Issue 1: Compositing Base Color Mismatch (CRITICAL)
The tuning script (tune_mae_bevel_emboss_kra_grid.rs:148-155) hardcodes a blue shape (73,73,255):
out[i * 4] = 73;
out[i * 4 + 1] = 73;
out[i * 4 + 2] = 255;
But the KRA ground truth PNGs have black (black_rect_simple.kra) or red (red_rect_simple.kra) shapes. Since Screen/Multiply blending is applied on top of this base color, the wrong base color produces completely wrong composite output.
Issue 2: Linear Height Profile Produces Flat Plateaus (CRITICAL)
The current algorithm in tuned.rs:67 uses a linear distance profile:
(d_in / radius).min(1.0) * radius
For a rectangle, the distance-to-edge gradient is a constant unit vector → the surface normal is constant → N·L produces a flat plateau across each edge. Krita produces a smooth gradient ramp because it uses a non-linear height profile (likely smoothstep or similar).
Issue 3: Insufficient Parameter Grid (MODERATE)
Only 144 combos (4×6×6) tuning just lighting_blur, hl_scale, sh_scale. The algorithm's height profile shape — which is the primary factor — is not tunable at all.
Implementation Steps
Step 1: Fix Tuning Script Base Color (hcie-io/examples/tune_mae_bevel_emboss_kra_grid.rs)
What: Detect the actual shape color from the ground truth PNG instead of hardcoding blue.
How:
- Parse the filename to determine if it's from
blackorredbase set (by checking the symlinked directory, or by sampling the PNG center pixels) - Simpler approach: sample the center pixel of the ground truth image to detect the actual shape color
- Use the detected color as the base for compositing instead of
(73,73,255)
File: hcie-io/examples/tune_mae_bevel_emboss_kra_grid.rs
Step 2: Add Profile-Based Height Curve to generate_bevel_tuned (hcie-fx/src/tuned.rs)
What: Replace the linear height profile with a configurable power-curve profile and add it as a tunable parameter.
How:
- Add a new parameter
profile_exp: f32(the exponent for the height profile) - Height profile:
t = clamp(d_in / radius, 0, 1)→height = t.powf(profile_exp) * radius profile_exp = 1.0→ linear (current behavior)profile_exp = 2.0→ quadratic (steeper falloff from edge)profile_exp = 0.5→ sqrt (softer falloff)- The smoothstep-like profile produces non-constant gradients on flat edges, eliminating the plateau
File: hcie-fx/src/tuned.rs (unlock hcie-fx first)
Step 3: Expand the Grid Search Parameters
What: Add profile_exp to the grid and increase resolution.
How:
profile_exponents:[0.3, 0.5, 0.7, 1.0, 1.5, 2.0, 3.0](7 values)lighting_blurs:[0, 1, 2, 3, 5](5 values)hl_scales:[0.3, 0.5, 0.75, 1.0, 1.5, 2.0](6 values)sh_scales:[0.3, 0.5, 0.75, 1.0, 1.5, 2.0](6 values)- Total: 7 × 5 × 6 × 6 = 1,260 combos × 32 samples = 40,320 evals (still fast)
File: hcie-io/examples/tune_mae_bevel_emboss_kra_grid.rs
Step 4: Expand KRA Generator for More Sample Diversity
What: Add more parameter variations to the KRA generator to create a richer training set.
How:
- Add more
sizevalues:[5.0, 10.0, 20.0, 30.0, 50.0] - Add more
depthvalues:[25.0, 50.0, 75.0, 100.0] - Add more
softenvalues:[0.0, 4.0, 8.0, 16.0] - Keep angles and directions as-is
- Total: 5 × 4 × 4 × 2 × 2 = 320 KRA files per base
File: _tools/generate_bevel_emboss_kra_set.py
Step 5: Re-run Export + Tune
python3 _tools/generate_bevel_emboss_kra_set.py(generate new KRA set)python3 _tools/export_all_kra_to_png.py(export to PNG via Krita)cargo run --release -p hcie-io --example tune_mae_bevel_emboss_kra_grid(tune)- Verify MAE < 20
Step 6: Update emboss.rs Production Code
What: Apply the best tuned parameters from the grid search to the production generate_bevel_emboss function in emboss.rs.
How:
- Read the results from
bevel_emboss_kra_grid_results.txt - Update the hardcoded values in
emboss.rsbetweenBEGIN_TUNING_ZONE/END_TUNING_ZONE - This requires unlocking
hcie-fxtemporarily
File: hcie-fx/src/emboss.rs (unlock hcie-fx first)
Files Modified
| File | Change |
|---|---|
hcie-io/examples/tune_mae_bevel_emboss_kra_grid.rs |
Fix base color, add profile_exp, expand grid |
hcie-fx/src/tuned.rs |
Add profile_exp parameter, implement power-curve height profile |
hcie-fx/src/emboss.rs |
Apply final tuned parameters (BEGIN/END_TUNING_ZONE) |
_tools/generate_bevel_emboss_kra_set.py |
Expand parameter diversity |
Verification
cargo check -p hcie-fx— compilescargo check -p hcie-io --example tune_mae_bevel_emboss_kra_grid— compilespython3 _tools/generate_bevel_emboss_kra_set.py— generates expanded KRA setpython3 _tools/export_all_kra_to_png.py— exports PNGscargo run --release -p hcie-io --example tune_mae_bevel_emboss_kra_grid— runs tuning, MAE target < 20