test(M00): add checkpoint perceptual comparison
Work-Package: M00-QAR-VISUAL-DIFF-001 Agent: sindo-main-codex Tests: synthetic visual diff, M00 dry-run, coordination and documentation gates Fidelity: automates paired metrics; approved 3.3.5a captures and human approval remain required
This commit is contained in:
+39
-1
@@ -24,6 +24,44 @@
|
||||
- `<checkpoint>__cold_process.png` — первый визит в текущем процессе;
|
||||
- `<checkpoint>__warm_revisit.png` — повторный визит в том же процессе после обхода контрольных точек.
|
||||
|
||||
## Парное визуальное сравнение
|
||||
|
||||
Одобренные снимки оригинального клиента хранятся вне Git. Если каталог с ними доступен локально, единый запуск может сразу сравнить PNG с одинаковыми именами:
|
||||
|
||||
```powershell
|
||||
.\tools\run_render_baseline.ps1 `
|
||||
-ReferenceCheckpointDirectory 'D:\private-fixtures\wow-3.3.5a-checkpoints'
|
||||
```
|
||||
|
||||
Результат записывается в `user://render_baseline/visual_comparison.json`. Другой путь задаётся через `-VisualComparisonReport`. `-DryRun` несовместим с визуальным сравнением, потому что не создаёт PNG.
|
||||
|
||||
Отдельный запуск сравнения:
|
||||
|
||||
```powershell
|
||||
godot --headless --path . `
|
||||
--script res://src/tools/compare_render_checkpoints.gd -- `
|
||||
--reference 'D:\private-fixtures\wow-3.3.5a-checkpoints' `
|
||||
--candidate "$env:APPDATA\Godot\app_userdata\OpenWC\render_baseline" `
|
||||
--output user://render_baseline/visual_comparison.json
|
||||
```
|
||||
|
||||
Сравнение переводит sRGB в linear color space, вычисляет взвешенную ошибку яркости/цвета для каждого пикселя, среднюю ошибку кадра и долю пикселей выше локального порога. Нормативные defaults находятся в `comparison_budgets` manifest: mean error `0.015`, changed-pixel ratio `0.01`, pixel error threshold `0.04`. Любое превышение, несовпадение размеров, отсутствие пары или пустой reference-каталог возвращает ненулевой exit code.
|
||||
|
||||
Автоматический pass не является доказательством parity: animation phase, weather, camera alignment и intentional gaps требуют human approval. Для проверки алгоритма без proprietary данных используется:
|
||||
|
||||
```powershell
|
||||
godot --headless --path . --script res://src/tools/compare_render_checkpoints.gd -- --self-test
|
||||
```
|
||||
|
||||
```mermaid
|
||||
flowchart LR
|
||||
R[Private approved reference PNGs] --> C[Checkpoint comparator]
|
||||
N[New baseline PNGs] --> C
|
||||
M[Manifest tolerance defaults] --> C
|
||||
C --> J[JSON metrics and pass/fail]
|
||||
J --> H[Human fidelity approval]
|
||||
```
|
||||
|
||||
`cold_process` не означает очищенный Windows filesystem cache. Поле `cache_state` и полный inventory обязаны интерпретироваться вместе с результатом. Удаление или принудительная пересборка cache не входит в baseline-команду. Для отдельного запуска после контролируемой очистки безопасного локального cache следует передать осмысленную метку, например `-CacheState rebuilt-clean`; proprietary source assets команда не изменяет.
|
||||
|
||||
## Контрольные точки и детерминизм
|
||||
@@ -38,7 +76,7 @@
|
||||
- синтетический native-animation probe `GryphonRoost01.m2`;
|
||||
- тот же Elwynn overview в 19:00 для sky transition.
|
||||
|
||||
Зафиксированы camera/target/player position, viewport, FOV, quality preset и время мира. Для temporal shader/animation кадров SHA-256 служит идентификатором артефакта, но не pass-критерием: будущая автоматическая визуальная проверка должна использовать perceptual diff и согласованный tolerance. Синтетический animation probe существует только внутри capture tool и не меняет runtime streaming scene.
|
||||
Зафиксированы camera/target/player position, viewport, FOV, quality preset и время мира. Для temporal shader/animation кадров SHA-256 служит идентификатором артефакта, но не самостоятельным pass-критерием: автоматическая визуальная проверка использует perceptual diff и согласованный tolerance. Синтетический animation probe существует только внутри capture tool и не меняет runtime streaming scene.
|
||||
|
||||
## Метрики и budget
|
||||
|
||||
|
||||
Reference in New Issue
Block a user