Слой частиц движка: спрайты/плоские квады + окно видимости камеры
Частицы больше не воксели: отдельный 2D-слой поверх мира (THREE.Points
билборды и InstancedBufferGeometry квады в XZ), без освещения и теней.
Окно видимости частиц — точный AABB сляба ортокамеры на слое [y0,y1]
(polyWindow, перебор вершин полиэдра). Пепел/мотыльки/дымка/блики воды
переведены на слой: частицы живут в мировых координатах, окно камеры
заворачивает их с маржой за экран, в марже альфа гаснет — без появления
из воздуха. Окно покрывает весь кадр с перекрытием.

Движок: particles.ts (ParticlePoint/ParticleLayer, createSpriteLayer/
createQuadLayer, addParticles/addFlatParticles), polyWindow.ts,
visibleWindow(y0,y1), 4 теста (симметрия следа, покрытие окна,
сдвиг от высоты, вырожденность). Игра: particlesWindow.ts (маржа,
wrap, edgeAlpha), миграция ash/ambientParticles/waterShimmer,
setAsh пересобирает частицы области.

Грабли: знаки полуплоскостей n·δ≤b; AABB в дельтах — прибавлять target;
окно без кэша (едет за камерой); квады на воде — над гранью y=3;
fresh.update после роста ёмкости; скорости по v1 (px/s ÷ 32).

Co-Authored-By: Claude Code <noreply@anthropic.com>
1 parent 9a7843e commit 5fb5474f0f03f95ef0ddee5ad204fbb78d544bac
@Eugene Sukhodolskiy Eugene Sukhodolskiy authored 12 hours ago
Showing 11 changed files
View
v2/CLAUDE.md
View
v2/apps/game/src/ambientParticles.ts
View
v2/apps/game/src/ash.ts
View
v2/apps/game/src/main.ts
View
v2/apps/game/src/particlesWindow.ts 0 → 100644
View
v2/apps/game/src/waterShimmer.ts
View
v2/packages/engine/src/index.ts
View
v2/packages/engine/src/render/__tests__/particles.test.ts 0 → 100644
View
v2/packages/engine/src/render/particles.ts 0 → 100644
View
v2/packages/engine/src/render/polyWindow.ts 0 → 100644
View
v2/packages/engine/src/render/voxelRenderer.ts