Files
open-wc/targets/04-renderer-fidelity.md

114 lines
7.0 KiB
Markdown

# M04 — Renderer Fidelity and Graphics Foundation
<!-- OPENWC_TARGET:ACTIVE -->
## Outcome
Довести графическую основу OpenWC до evidence-backed визуальной совместимости с
оригинальным клиентом WoW 3.3.5a build 12340 и создать общий graphics contract
для дальнейшего клиента, Editor preview и отдельного racing-профиля.
Noggit используется как дополнительный ориентир композиции и authoring preview,
но не заменяет оригинальный клиент как fidelity oracle.
Benilla используется как pinned secondary reference для M2 animation/material
architecture, particles/ribbons, WMO portal visibility и temporal test ideas. Его
Vanilla 1.12.1/Bevy behavior не заменяет build-12340 captures и не подтверждает
WotLK parity без отдельного fixture comparison.
## Reference corpus
- [ ] Принять versioned CSV manifest и валидатор оригинальных captures.
- [ ] Импортировать минимум две позиции каждой выбранной локации: `wide` для
неба/тумана/дальности/композиции и `ground` для terrain/material/M2/WMO.
- [ ] Сохранять map/zone/subzone, WoW/server coordinates, orientation, доступные
camera parameters, time, weather, graphics profile, viewport и имя артефакта.
- [ ] Не угадывать отсутствующие camera значения: хранить `Unknown`, landmark и
ограничение сравнения.
- [ ] Хранить proprietary screenshots/video вне Git; в репозитории сохранять
manifest, SHA-256, provenance, metrics, classifications и human approval.
- [ ] Добавить выбранную матрицу dawn/day/dusk/night, weather, shadow и liquid
quality без полного комбинаторного умножения всех локаций.
- [ ] Добавить temporal clips/кадры для water, animation, billboards, particles,
ribbons, weather и spell effect lifecycle.
## Graphics foundation
- [ ] Ввести явный graphics profile contract: `Blizzlike335` и opt-in
`Enhanced/Racing`; улучшения не меняют Blizzlike-путь и не маскируют gaps.
- [ ] Зафиксировать color pipeline: source color space, sampling, gamma,
tonemapping, fog, alpha coverage и deterministic capture output.
- [ ] Заменять approximate constants только после paired original-client
evidence; каждое осознанное расхождение регистрировать по подсистеме.
- [ ] Сохранить `WorldRenderFacade`, streaming budgets, cache versioning и
main-thread GPU finalization boundaries M03.
- [ ] Не начинать полный custom `RenderingDevice` renderer без bounded spike,
profiler evidence и ADR; сначала использовать точные Godot shader passes.
## Required implementation order
- [ ] Environment: точная DBC interpolation, sky/skybox, ambient/directional
light, zone transitions, fog, day/night и weather presentation.
- [ ] Terrain: MCNK topology/normals/holes, MCAL variants/layer animation,
filtering/mips, MCSH/baked shadow data, seams и WDL distant terrain.
- [ ] M2/WMO materials: build-12340 blend/depth/cull flags, alpha test,
multi-texture combiners, vertex colors, emissive/unlit, UV animation,
billboards, WMO indoor/outdoor, portals, local lights и fog semantics.
- [ ] Shadows: воспроизвести оригинальную policy для выбранных graphics settings;
terrain/baked, character/object и dynamic shadows проверять раздельно.
- [ ] Liquids: MH2O/MCLQ/MLIQ geometry, masks/heights/depth, original animated
textures и water/ocean/magma/slime/underwater behavior. Enhanced reflections,
normals и shore blending остаются opt-in.
- [ ] Animation/characters: GPU skinning path, sequences/blending/global
sequences, attachments, geosets, customization, equipment, mounts и vehicles;
CPU deformation оставить только измеренным fallback/diagnostic path.
- [ ] Effects: M2 particles/ribbons, texture animation, weather emitters,
SpellVisual/SpellVisualKit cast/projectile/impact/aura presentation, pooling,
deterministic lifetime и visibility budgets.
- [ ] Racing readiness: renderer/world/character/effects APIs не зависят от WoW
gameplay/network; racing profile меняет только явные graphics capabilities.
## Verification
- Original-client/OpenWC paired captures используют одинаковые viewport, camera
contract, position, time, weather и graphics profile либо явно классифицируют
неизвестное поле.
- Static comparison включает full-frame и semantic regions; geometry/framing,
material, lighting, shadow, liquid, animation/effect gaps не смешиваются.
- Temporal comparison проверяет phase, duration, trajectory, UV motion и emitter
lifetime, а не только один случайный кадр.
- GPU test matrix покрывает Godot Forward+/D3D12/Vulkan, cold/warm load, rapid
traversal, teleport, weather/time transitions и profile switching.
- Обязательны p50/p95/p99, max hitch, draw calls, visible objects, CPU/GPU memory,
shader/cache stability и Node/Resource/RID leak checks.
## Exit criteria
- Reference corpus покрывает обязательные static и temporal классы и проходит
schema/provenance/hash validation.
- Все пункты renderer coverage map имеют evidence-backed статус; `Verified`
допускается только с original-client fixture и human approval.
- Для утверждённой build-12340 capture matrix не остаётся неклассифицированных
визуально различимых gaps; принятые engine/GPU отклонения имеют измеренный
tolerance, rationale и artifact evidence.
- `Blizzlike335` сохраняет оригинальную policy, `Enhanced/Racing` выключаем и не
изменяет default behavior.
- Long traversal не создаёт recurring hitches, cache churn или renderer leaks;
M03 performance budgets остаются зелёными либо изменены только отдельным
evidence-backed решением.
- Character, animation, liquid, shadow и effects contracts пригодны для runtime,
Editor preview и будущего racing fork без зависимости от network/gameplay.
## Evidence
- Date:
- Revision/worktree:
- Original-client build/settings/corpus:
- Commands:
- Static/temporal comparison results:
- Performance and lifetime results:
- Human approval:
- API/module docs and diagrams:
- Changed files:
- Remaining risks: