Всегда общайся с пользователем на русском.
Направление и решения — docs/plan.md (в корне репо), разделы «Уроки черновика → видение движка v2» и «Направление v2». Открытые вопросы v2 — дописывать туда, не решать молча.
docs/art-style.md), shadow map + воксельный AO..vox (MagicaVoxel).v2/)npm install # установка зависимостей (workspaces) npm test # юнит-тесты (Vitest) npm run typecheck # tsc --noEmit (движок + демка) npm run check:fast # typecheck + тесты node apps/demo/tools/checks/render.mjs # скриншот-гейт рендера (Chromium, /tmp/v2_render_*.png) npx vite --port 5299 # демка (в apps/demo), http://localhost:5299
packages/engine (@rpg/engine) — ядро:
src/voxel/grid.ts — воксельная сетка (Uint8, 0 = пусто, иначе индекс палитры);src/voxel/mesher.ts — culled-меш + классический AO 0..3 (схема 0fps, флип диагонали); meshVoxels для сетки, meshRegion — область по функции доступа; чистая математика, тестируется без рендера;src/world/chunk.ts — чанк 16×H×16; src/world/world.ts — мир-словарь чанков (get/set через границы, dirty-трекинг: правка боковой кромки помечает соседа); src/world/worldMesher.ts — meshChunk через world.get, шов чанков бесшовный (culled и AO через границы);src/render/voxelRenderer.ts — three.js-бэкенд: ортокамера диметрии 2:1, dirLight + shadow map + hemisphere, низкое разрешение (480×270);tools/agent-lib.mjs — браузерный каркас проверок (launchBrowser/ startDevServer/openGame/AgentClient/Checks), swiftshader в headless;tools/png.mjs — PNG-кодек (colorType 6 и 2 — скриншоты Chromium RGB).apps/demo — демо-полигон: src/main.ts (мир 6×6 чанков 96×96 «пепельный луг», ремешинг по dirty-чанкам), tools/checks/render.mjs — скриншот-гейт: нет pageerror, меш собран, тени ползут (утро/вечер), апскейл кратен 2×2, многокрасочность, 36 чанков, постройка+мешинг < 2 с (замер ~0.5 с), setVoxel на шве меняет кадр. Мост демки: window.__agent.setSun(k)/stats()/setVoxel(x,y,z,c)/chunkStats()/perf().tools/png.mjs v2 это умеет (у v1 умел только RGBA).@types/three в devDependencies движка.