57 lines
3.4 KiB
Markdown
57 lines
3.4 KiB
Markdown
# M11-04 Status
|
|
|
|
status: done
|
|
task: Explainable image-error metrics between the Web realtime viewport and a Blender 5.2 reference
|
|
updated: 2026-08-17 America/New_York
|
|
|
|
## Scope
|
|
|
|
Schema 1 `RenderImageComparisonIR` compares equal-size display-referred `SRGB8`/
|
|
`STRAIGHT` RGBA frames. The report records mean absolute error, root mean squared
|
|
error, P95 channel error, maximum channel error, bad-pixel ratio, reference-background
|
|
foreground intersection-over-union and alpha coverage delta. Each release check keeps
|
|
its measured value, threshold, direction and pass state; a mismatch returns the stable
|
|
`RENDER_REFERENCE_MISMATCH` code. Dimensions, byte lengths, threshold ranges and a
|
|
4,194,304-pixel bound are validated before comparison.
|
|
|
|
The reference is generated by Blender 5.2 Eevee from
|
|
`tests/files/web/m11_render_reference.blend` with a fixed camera, black rough material,
|
|
World color, one-sample TAA and zero dither. The source fixture, generator and PNG are
|
|
SHA-256 bound in `tests/golden/M11-04/manifest.json`. Re-render verification compares
|
|
decoded Blender pixels exactly because PNG container bytes may differ while pixels do
|
|
not.
|
|
|
|
## Evidence
|
|
|
|
- `WEB_TEST_PORT=5552 npm --prefix web run test:render-reference`: unit 3/3,
|
|
Blender reference re-render verification passed, Chromium 3/3. Main-thread and
|
|
Offscreen reports were identical: MAE `2.0433349609375`, RMS `5.448994264342599`,
|
|
P95 `4`, maximum channel error `110`, bad-pixel ratio `0.0047760009765625`,
|
|
foreground IoU `0.9853400565736072`, alpha coverage delta `0`.
|
|
- Thresholds are MAE `4`, RMS `12`, P95 `12`, bad-pixel ratio `0.02`, foreground
|
|
IoU `0.97` and alpha coverage delta `0`. A non-empty red block with the wrong
|
|
composition is rejected as `RENDER_REFERENCE_MISMATCH`.
|
|
- `npm --prefix web run typecheck`, `npm --prefix web run lint`, production build
|
|
(75 modules), `npm --prefix web run test:status-consistency` and `git diff --check`
|
|
passed.
|
|
|
|
## Implementation Hashes
|
|
|
|
- `web/protocol/render-image-comparison.ts`: `4345cc0d02b4482201de34292cbf5198009bf615e69c80cc00bc3e76116efec2`
|
|
- `web/app/src/three-adapter/render-image-comparison.ts`: `ad97fd594d0d964e05d4da2bffc84a64ef737fef700045c252b5222250f1ffc7`
|
|
- `web/protocol/error.ts`: `e8ea483466b16debaf803ff1640ade07a858a802781e3040d3547028ecb5d19f`
|
|
- `tools/web/generate-m11-render-reference.py`: `118c98c77d98922e72660898bfb65842e11743fc77f4124c9f5088a76cb6a94a`
|
|
- `tools/web/check-render-reference.mjs`: `ead3500f054e98c2db4cd6596c983586a622e929bc8a587e9fbd38d94a7df7d1`
|
|
- `web/tests/unit/render-image-comparison.test.mjs`: `f9800745760b85700e80abc5e389f44d7f7ea3b9e41e1002f4e5449bcb620f67`
|
|
- `web/tests/e2e/render-reference.spec.ts`: `349c7da0dfd60baec80139cced52079312bd5e892a42f000ba0b4f55c6a4a61d`
|
|
- `tests/files/web/m11_render_reference.blend`: `d2bea55fe4de0b00e73a9241b4d1b0c802c2eb0e6159c0cd48e007b97b9d3963`
|
|
- `tests/golden/M11-04/blender-eevee-reference.png`: `f5c22636a232bcbb0ed0f772418cb12fced18ff72f4999804197e42caa61480a`
|
|
- `tests/golden/M11-04/manifest.json`: `e9551f86f0b9704d7be35c03f07321bec5d2481ffee4208ae766156d9c9a0135`
|
|
- `web/package.json`: `38ba6a722a2e0bc2c91d6edbd2b7df5e3609342e3b7ef2ec9646b9c6ce0d25a6`
|
|
|
|
## Rollback
|
|
|
|
Remove the M11-04 protocol, reference fixture/golden, generator/checker, unit/E2E
|
|
specs and package command; restore M11 to 3/14 and remove the bounded reference slice
|
|
from N-019. Keep M11-01 through M11-03 resource and lighting behavior unchanged.
|