TASK 51 slice 2: Blur — background at 1/4 res, 3 separable box passes (~gaussian, radius by strength), mask-blended; person untouched; Remove gains strength = edge feather; mask computed once, rendered per effect (Unit: bg blur)

This commit is contained in:
2026-10-09 10:18:00 -07:00
parent fbeb63ba79
commit 227ee8fca6
5 changed files with 261 additions and 33 deletions
+7 -3
View File
@@ -634,9 +634,13 @@ This replaces the old five-seeder cluster (`Seed{Starting,Brb,Ending,Chat}Backgr
resource; **never throws** — a load/run failure logs once and returns null forever after);
`BackgroundEffectProcessor.Apply(frame, BackgroundEffect)` — `None` = same instance (true
passthrough), `Remove` = copy with alpha = bilinear-upscaled mask × source alpha, RGB untouched,
`IsOpaque = false` (the compositor's straight-alpha blend shows the layers below); `Blur` passes
through until slice 2. No mask / segmenter exception → passthrough + one log line, never a dropped
layer.
`IsOpaque = false` (the compositor's straight-alpha blend shows the layers below), strength =
edge feather (mask band 0.5±(0.05+0.45·s) → alpha); `Blur` (slice 2) = background downscaled 4×
by box average, 3 separable box-blur passes (radius 1→12 small px by strength ≈ gaussian, up to
~48 full px), bilinear-upsampled and blended by the mask — person pixels (mask = 1) are copied
untouched, opacity preserved. The mask is computed once per frame (`TrySegment`) and rendered per
effect (`Render`), so several variants share one inference. No mask / segmenter exception →
passthrough + one log line, never a dropped layer.
- **Not wired yet:** nothing calls the processor — no config, no UI, no `CameraManager` hookup. The
next slices add Blur, the per-webcam `BackgroundEffect` config + persistence, then the single
processing point on the camera path (both preview and compositor consume the processed frame).