Skip to content

Document accurate root cause for 17 subtle pixel-diff tests#1705

Merged
bkaradzic-microsoft merged 1 commit into
BabylonJS:masterfrom
bkaradzic-microsoft:weekend/tpc-1599-subtle-pixel-diffs
May 21, 2026
Merged

Document accurate root cause for 17 subtle pixel-diff tests#1705
bkaradzic-microsoft merged 1 commit into
BabylonJS:masterfrom
bkaradzic-microsoft:weekend/tpc-1599-subtle-pixel-diffs

Conversation

@bkaradzic-microsoft
Copy link
Copy Markdown
Contributor

@bkaradzic-microsoft bkaradzic-microsoft commented May 18, 2026

Per-test PIL-composite triage of all 17 subtle pixel-diff tests. None of them are deterministic-cosmetic (no re-bakes possible - all show real visible regressions).

Updates the reason field in Apps/Playground/Scripts/config.json for 17 tests with accurate symptom descriptions, classifying into recurring root-cause clusters:

  • 9 GUI green->red color regressions (idx 160, 174, 175, 196, 197, 370, 402, 566, 587)
  • 4 OpenPBR analytic-lights right-column red rendering (580, 584, 587, 592)
  • 1 instanced billboard foliage red (169)
  • 1 LineEdgesRenderer extra red lines (179)
  • 1 Background blur red splotches (602)
  • 1 Clip planes GUI sliders red (182)
  • 1 Instanced Bones edge-AA (256, borderline)

No source changes, no test re-enables, no PNGs. Metadata-only correction so the issue tracker reflects actionable root causes.

Landing context

This PR is one of 7 splits from the proven CI-green combined preview in draft PR #1702 (see #1702 for the full intended end-state and verified CI run 26044922430).

Note: the original split included an 8th PR (#1709, ES2020+ -> ES2019 syntax-repair polyfill for Chakra). It was closed in favour of investigating @babel/standalone properly (#1711).

Recommended landing order

Tier 1 - parallel-reviewable, no source conflicts:

  1. Fix ExternalTexture_OpenGL throw-stubs to avoid MSVC C4702 under /WX #1703 - ExternalTexture C4702 build fix
  2. Document accurate root cause for post-#1695 pixel-diff fallouts #1704 - config.json reason rewrites (5 entries)
  3. Document accurate root cause for 17 subtle pixel-diff tests #1705 - config.json reason rewrites (17 entries)

Tier 2 - sequential, each touches Apps/Playground/CMakeLists.txt SCRIPTS list + Apps/Playground/Shared/AppContext.cpp LoadScript order; rebase the next branch after the previous merges:

  1. Add File/Blob/FileReader polyfill for Playground (re-enables 19 GLTF tests) #1706 - File/Blob/FileReader polyfill (largest test impact: 19 re-enables)
  2. Add fetch() polyfill over XMLHttpRequest for Playground #1707 - fetch polyfill
  3. Add DOM globals polyfill + native AbortController for Playground #1708 - DOM globals + native AbortController + Android CMake link
  4. Add cubemap auto-expand polyfill for Playground (re-enables 7 PBR tests) #1710 - Cubemap auto-expand polyfill (loaded after babylon.max.js)

Reference policy reminder

Reference PNGs across all 7 PRs come from Babylon.js; never re-baked by BN. Combined diff: 0 PNGs.

Triaged 17 tests previously documented as `Pixel comparison fails` /
`Newly added test crashes` / `Framebuffer creation fails` /
`Test fails locally on Win32 D3D11 sweep`. None of these descriptions match
current behaviour. All 17 reach the renderer and produce pixel diffs (no
crash, no FB-creation failure), but with consistent visible regressions:

- 9 tests (160, 174, 175, 196, 197, 370, 402, 566, 587 partial) show
  GUI controls rendering with red/orange backgrounds where reference
  expects green/white -- a recurring BN GUI color regression.
- 4 tests (580, 584, 587, 592) show OpenPBR analytic-lights spheres
  rendering saturated red where reference shows pink/white subsurface
  scattering or anisotropy -- spirv-cross HLSL emit gap.
- 1 test (169) shows instanced billboard foliage rendering red instead
  of green -- vertex/instance color routing.
- 1 test (179) emits extra red LineEdgesRenderer lines not in reference.
- 1 test (602) Background material blur produces red splotches.
- 1 test (182) has GUI slider handles red instead of green plus minor
  skull edge AA differences.
- 1 test (256) Instanced Bones has deterministic ~3.5% px sub-pixel
  animation/edge-AA delta with structurally-correct render.

These updated reasons help future debuggers triage rather than send them
chasing the misleading `crashes` / `framebuffer creation fails` claims.
Copy link
Copy Markdown
Contributor

@bghgary bghgary left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[Reviewed by Copilot on behalf of @bghgary]

LGTM

@bkaradzic-microsoft bkaradzic-microsoft merged commit f78015a into BabylonJS:master May 21, 2026
57 of 58 checks passed
bkaradzic-microsoft added a commit that referenced this pull request May 21, 2026
Per-test triage of 5 post-#1695 pixel-diff fallouts. Updates the
`reason` field in `Apps/Playground/Scripts/config.json` for 3 entries to
name the real BN rendering regression instead of generic "Pixel
comparison fails":

- idx 363 SSR2 - SSR not rendering wet floor.
- idx 369 Sprites Pixel Perfect - sprite alpha-blending broken.
- idx 395 soft-transparent-shadows - soft-shadow filter precision
degraded.

**No source changes, no test re-enables, no PNGs.** Metadata-only
correction so the issue tracker reflects actionable root causes for
follow-up engineering work.
---

## Landing context

This PR is one of **7 splits** from the proven CI-green combined preview
in **draft PR #1702** (see
[#1702](#1702) for the
full intended end-state and verified CI run
[26044922430](https://github.com/BabylonJS/BabylonNative/actions/runs/26044922430)).

> Note: the original split included an 8th PR (#1709, ES2020+ -> ES2019
syntax-repair polyfill for Chakra). It was closed in favour of
investigating `@babel/standalone` properly (#1711).

### Recommended landing order

**Tier 1 - parallel-reviewable, no source conflicts:**
1. #1703 - ExternalTexture C4702 build fix
2. #1704 - config.json `reason` rewrites (5 entries)
3. #1705 - config.json `reason` rewrites (17 entries)

**Tier 2 - sequential, each touches `Apps/Playground/CMakeLists.txt`
SCRIPTS list + `Apps/Playground/Shared/AppContext.cpp` LoadScript order;
rebase the next branch after the previous merges:**

4. #1706 - File/Blob/FileReader polyfill (largest test impact: 19
re-enables)
5. #1707 - fetch polyfill
6. #1708 - DOM globals + native AbortController + Android CMake link
7. #1710 - Cubemap auto-expand polyfill (loaded after babylon.max.js)

### Reference policy reminder

Reference PNGs across all 7 PRs come from Babylon.js; never re-baked by
BN. Combined diff: **0 PNGs**.
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.

2 participants