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>
Eugene Sukhodolskiy
committed
16 hours ago