perf(led): avoid redundant tube and barrier calculations

Preserve exact light fields while culling provably distant occluders,
reusing physical tube paths across camera updates and excluding LED emitter
data from aligned architectural fingerprints. Cover output equivalence,
in-place invalidation, resize tags and hyphenated benchmark chunk hashes.

Issue: #788
User-Visible: yes
This commit is contained in:
Matysh
2026-10-03 19:18:49 +03:00
parent 08bc58cc0e
commit 416d2fae71
17 changed files with 438 additions and 26 deletions
+3
View File
@@ -6,6 +6,9 @@
slightly tilted contours, continuous light without cut-out wedges, and an
equally soft falloff at both ends and the outside of sharp turns
([#788](https://github.com/Matysh/houseplan-card/issues/788)).
- Reduced redundant LED geometry work when moving the camera and computing
strip lighting, without thinning the light sources or changing their falloff
([#788](https://github.com/Matysh/houseplan-card/issues/788)).
## v1.79.0-beta.6 — 2026-10-03
+3
View File
@@ -12,6 +12,9 @@
координатами и небольшим наклоном, вырезы внутри свечения и резкие края
вместо плавного затухания на концах и снаружи острых углов
([#788](https://github.com/Matysh/houseplan-card/issues/788)).
- Уменьшены повторные вычисления геометрии LED-лент при движении камеры и
расчёте свечения — без прореживания источников света и изменения растушёвки
([#788](https://github.com/Matysh/houseplan-card/issues/788)).
## v1.79.0-beta.6 — 2026-10-03
+10
View File
@@ -159,6 +159,11 @@ invisible — the plan simply keeps lighting through a wall or closed door that
now exists. Unrelated HA updates preserve the signature and hit the bounded
barrier cache. The combined fingerprint, plus source position and radius, keys
the per-source region cache (`_glowClipCache`).
Top-level LED-strip source data is excluded from this architectural fingerprint:
editing an emitter does not change masonry. The full card, static card and
accepted resize artifacts use the same tag; every other raw field, scale and
bound opening state retains its invalidation semantics. LED shape/radius keys
still invalidate the strip's own field.
The masonry boolean receives room walls after passage cuts plus the cached
joined independent body set. Its outer/hole rings are the authoritative
@@ -480,6 +485,11 @@ only the geometry differs:
diagnostic. The former 2500-fan acceptance bound depended on dropping
required vertices/endpoints and was incompatible with the 50×50-point
contract; compaction now reduces object/DOM overhead, not geometric detail.
The physical tube/hit path is reused across camera updates with exact point,
face-context and thickness invalidation; old frame/disconnect entries are
evicted. Before exact emitter-circle clipping, a conservative strip-wide
bounding box excludes only barriers that cannot reach any emitter disc.
This broad phase preserves the exact visibility path strings and all sources.
`smoke_led_strip_field` compares rasterised production-field pixels with an
independent distance/falloff oracle across three radii, both path directions