feat(render-parity): add deterministic frame comparison tool

- Introduced `render-parity` crate for comparing rendered frames against reference images.
- Added command-line options for specifying manifest and output directory.
- Implemented image comparison metrics: mean absolute difference, maximum absolute difference, and changed pixel ratio.
- Created a configuration file `cases.toml` for defining test cases with global defaults and specific parameters.
- Added functionality to capture frames from `render-demo` and save diff images on discrepancies.
- Updated documentation to include usage instructions and CI model for automated testing.
This commit is contained in:
2026-02-19 05:02:26 +04:00
parent 0e19660eb5
commit 18d4c6cf9f
13 changed files with 1125 additions and 63 deletions

20
parity/README.md Normal file
View File

@@ -0,0 +1,20 @@
# Render Parity Dataset
This folder stores parity-test input for `crates/render-parity`.
- `cases.toml`: list of deterministic render cases.
- `reference/*.png`: baseline frames captured from the original renderer.
Expected workflow:
1. Capture baseline PNG frames from original game/editor for each case.
2. Add entries to `cases.toml`.
3. Run:
```bash
cargo run -p render-parity -- \
--manifest parity/cases.toml \
--output-dir target/render-parity/current
```
On failure, diff images are saved to `target/render-parity/current/diff`.

27
parity/cases.toml Normal file
View File

@@ -0,0 +1,27 @@
[meta]
# Global defaults for all cases.
width = 1280
height = 720
lod = 0
group = 0
angle = 0.0
# Per-pixel change threshold for the "changed pixel ratio" metric.
diff_threshold = 8
# Allowed thresholds (case fails if any limit is exceeded).
max_mean_abs = 2.0
max_changed_ratio = 0.010
# Add one block per model.
#
# [[case]]
# id = "animals_a_l_01"
# archive = "../testdata/Parkan - Iron Strategy/animals.rlb"
# model = "A_L_01.msh"
# reference = "reference/animals_a_l_01.png"
# lod = 0
# group = 0
# angle = 0.0
# max_mean_abs = 2.0
# max_changed_ratio = 0.010

View File