|
perf(render): culling тайлов карты, пустые оверлеи света, setDepth без пересортировки
О-2 рендера. На лугах ~900+ спрайтов карты рисовались целиком при ~250 видимых; пустые fullscreen-оверлеи света (ambient/vignette/пульс) рисовались каждый кадр даже днём; ходьба взводила sortDirty каждый тик. - IsometricTileMap.cullToRect: тайловое окно из экранных углов (screenToIso), margin ±1 по X и вверх на высоту самого высокого tall; пересчёт только при сдвиге окна; isTileVisible — для тестов/отладки; вызов из сцены (updateCameraFollow). null — вернуть всё. - Lighting: ambient.visible=false при белом тинте, vignette/pulseAmb — при нулевой альфе (днём минус 2-3 fullscreen-квада). - IsoDepthLayer.setDepth/setDepthRect: ранний выход при неизменном zIndex (пиксельная сортировка детей не перезапускается каждый тик ходьбы). - agent.mjs perf: возврат 0 (объект отчёта ломал process.exit). Perf (swiftshader headless, до → после): fps бой 3-6 → 7-8, покой 5-6 → 5-7 (rasterizer swiftshader глушит выигрыш — он раскроется на целевом iGPU); heap в пределах шума (28-31 МБ). Скриншот смоука не изменился, тайлы у краёв камеры на месте. Co-Authored-By: Claude Code <noreply@anthropic.com> |
|---|
|
|
| apps/game/src/scenes/LocationScene.ts |
|---|
| apps/game/tools/agent.mjs |
|---|
| docs/engine/maps.md |
|---|
| packages/engine/src/map/IsometricTileMap.ts |
|---|
| packages/engine/src/map/__tests__/isometricMap.test.ts |
|---|
| packages/engine/src/render/IsoDepthLayer.ts |
|---|
| packages/engine/src/render/Lighting.ts |
|---|