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>
1 parent 4b75cf7 commit 47de05cc49a93457442578dfde0c22556c22d545
@root root authored 3 hours ago
Showing 10 changed files
View
docs/engine/recipes.md
View
docs/engine/render.md
View
packages/engine/src/index.ts
View
packages/engine/src/render/Camera.ts
View
packages/engine/src/render/Lighting.ts 0 → 100644
View
packages/engine/src/render/Renderer.ts
View
packages/engine/src/render/__tests__/Lighting.test.ts 0 → 100644
View
packages/engine/src/render/__tests__/camera.test.ts
View
packages/engine/src/render/__tests__/lightSim.test.ts 0 → 100644
View
packages/engine/src/render/lightSim.ts 0 → 100644