feat(engine): слой освещения — ambient multiply + аддитивные источники
...
- render/lightSim.ts — чистая математика (образец particleSim): LightDef/
LightFrame, детерминированное мерцание flickerFactor (сумма синусов,
диапазон [1-amount, 1]), lightFrame, lerpAmbient, dimColor
- render/Lighting.ts — Pixi-адаптер: fullscreen ambient (Texture.WHITE,
blendMode multiply — цвет и есть яркость, фундамент day/night) + пул
аддитивных спрайтов света со ступенчатой пиксельной текстурой свечения
(makeGlowTexture, generateTexture resolution 1 + nearest)
- runtime API: setAmbient(color, fadeSec) с плавным лерпом, upsertLight/
removeLight/hasLight/setLightPos/setLightColor/setLightEnabled, frames()
для снапшота агента
- Renderer: третий корень lightRoot между worldRoot и uiRoot — экранное
пространство: ambient затемняет сцену, источники рисуются поверх, HUD/
fog/fade остаются читаемыми сверху
- Camera.toScreen(wx, wy) — проекция мировой точки с учётом камеры и
тряски для слоёв вне worldRoot (без лага на кадр); apply делегирует
математику в общие хелперы
- тесты: lightSim (мерцание/кадры/лерп/dim), Lighting (ambient fade,
пул, upsert/remove, мерцание, destroy), camera toScreen согласована
с apply в т.ч. при тряске
- доки: render.md (lightRoot, toScreen, раздел «Освещение», порядок
отрисовки), recipes.md (источник света)
Co-Authored-By: Claude Code <noreply@anthropic.com>
root
committed
6 hours ago