Advance M8-M11 parity workflows
This commit is contained in:
56
docs/status/M11-04.md
Normal file
56
docs/status/M11-04.md
Normal file
@@ -0,0 +1,56 @@
|
||||
# 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.
|
||||
Reference in New Issue
Block a user