|
Слой частиц движка: спрайты/плоские квады + окно видимости камеры
Частицы больше не воксели: отдельный 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> |
|---|
|
|
| v2/CLAUDE.md |
|---|
| v2/apps/game/src/ambientParticles.ts |
|---|
| v2/apps/game/src/ash.ts |
|---|
| v2/apps/game/src/main.ts |
|---|
| v2/apps/game/src/particlesWindow.ts 0 → 100644 |
|---|
| v2/apps/game/src/waterShimmer.ts |
|---|
| v2/packages/engine/src/index.ts |
|---|
| v2/packages/engine/src/render/__tests__/particles.test.ts 0 → 100644 |
|---|
| v2/packages/engine/src/render/particles.ts 0 → 100644 |
|---|
| v2/packages/engine/src/render/polyWindow.ts 0 → 100644 |
|---|
| v2/packages/engine/src/render/voxelRenderer.ts |
|---|