Skip to content

feat(engine): scene-level post-processing effects#62

Merged
LeadcodeDev merged 1 commit into
mainfrom
feat/scene-post-effects
Jul 19, 2026
Merged

feat(engine): scene-level post-processing effects#62
LeadcodeDev merged 1 commit into
mainfrom
feat/scene-post-effects

Conversation

@LeadcodeDev

Copy link
Copy Markdown
Owner

Closes #51 — the last wave-2 workstream.

Goal: grain, vignette, pixelate, progressive blur at scene level — frame-wide effects the per-element FilterFn machinery can't express.

  • Pure-Rust RGBA post-processing (no Skia): seeded splitmix64 grain (deterministic; animated re-seeds per frame), smoothstep vignette, block-average pixelate with partial edges, separable box blur with per-row variable radius (cost documented: ~O(w·h·max_radius), rows above start are pure copies)
  • Applied in declaration order at render_frame_task_scaled — the single point where encode, studio and stills converge; slide transitions get the incoming scene's effects (no pop at the blend→normal boundary); world frames excluded and documented (no single source scene)
  • Scene.effects: [PostEffect] additive; unknown effect types rejected at load; HTML dialect <scene effects='[...]'> with a dedicated transpile error

Tests: 25 new — 15 unit (identity/determinism/alpha preservation/ordering proof), 5 pipeline (rendered corners darker, serde round-trips), 5 HTML. 329 total, all green.

Verify: cargo test --workspace → 329 passed ✓ · cargo fmt --check ✓ · clippy 0 warnings ✓

grain, vignette, pixelate and progressive_blur as pure-Rust RGBA
buffer post-processing (deterministic, zero Skia): splitmix64-seeded
grain (per-frame animated option), smoothstep vignette, partial-edge
block pixelate, variable-radius separable box blur. Applied in
declaration order at the single convergence point
render_frame_task_scaled (covers encode, studio and stills); slide
transitions apply the incoming scene's effects to avoid a pop at the
blend boundary; world frames excluded (no single source scene,
documented). HTML dialect: <scene effects='[...]'> JSON-in-attribute
with dedicated transpile error.
@LeadcodeDev
LeadcodeDev merged commit 1305f21 into main Jul 19, 2026
@LeadcodeDev
LeadcodeDev deleted the feat/scene-post-effects branch July 19, 2026 00:40
LeadcodeDev added a commit that referenced this pull request Jul 19, 2026
Follow-up to #62: derivable Default, div_ceil, redundant casts.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

feat(engine): scene-level post-processing effects

1 participant