|
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> |
|---|
|
|
| v2/packages/engine/src/index.ts |
|---|
| v2/packages/engine/src/render/__tests__/sky.test.ts |
|---|
| v2/packages/engine/src/render/sky.ts |
|---|
| v2/packages/engine/src/render/voxelRenderer.ts |
|---|