|
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> |
|---|
|
|
| docs/engine/recipes.md |
|---|
| docs/engine/render.md |
|---|
| packages/engine/src/index.ts |
|---|
| packages/engine/src/render/Camera.ts |
|---|
| packages/engine/src/render/Lighting.ts 0 → 100644 |
|---|
| packages/engine/src/render/Renderer.ts |
|---|
| packages/engine/src/render/__tests__/Lighting.test.ts 0 → 100644 |
|---|
| packages/engine/src/render/__tests__/camera.test.ts |
|---|
| packages/engine/src/render/__tests__/lightSim.test.ts 0 → 100644 |
|---|
| packages/engine/src/render/lightSim.ts 0 → 100644 |
|---|