engine: SkyLayer — шейдерная небесная сфера (setSky/skyInfo)
createSkyLayer(scene, radius): SphereGeometry BackSide с шейдером —
градиент зенит→горизонт по локальному направлению (сфера центрируется
на камере в render(); varying — нормализованная локальная позиция,
fp16-безопасно), звёзды по хэшу cube-face ячеек (мерцание, гаснут
starBrightness'ом днём/в облачность), до SKY_BODY_MAX тел: диск с
мягким краем, ореол exp(−ang/glow), фаза луны — терминатор через
нормаль псевдо-сферы. Статичный дизер против бандинга; в конце
colorspace_fragment — конверсия следует за текущим RT (обе ветки
SRGB проверены скриншотами fog on/off).

VoxelRenderer: setSky(opts|null) — ленивое создание слоя (null —
бит-в-бит прежний фон, замок гейтов), skyInfo() — снапшот для моста;
цвета неба/звёзды рендер ведёт сам от nightK/cloudK (skySyncColors в
конце applyCloud — та же палитра, что у фона). dispose освобождает
geometry+material. Экспорт в index.ts.

+5 headless-тестов фабрики (меш/сцена без WebGL). Итого 428.
Визуальная приёмка: день/сумерки/ночь в first/third, диск солнца,
изо — неба не видно (как задумано).

Co-Authored-By: Claude Code <noreply@anthropic.com>
1 parent c837bb5 commit 65e1edcef4fed70005c107f88d1c817c763dabd2
@Eugene Sukhodolskiy Eugene Sukhodolskiy authored 15 hours ago
Showing 4 changed files
View
v2/packages/engine/src/index.ts
View
v2/packages/engine/src/render/__tests__/sky.test.ts
View
v2/packages/engine/src/render/sky.ts
View
v2/packages/engine/src/render/voxelRenderer.ts