# M04 — Renderer Fidelity and Graphics Foundation ## 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: