engine: спрайты и свет под перспективу (затухание по глубине, фрустумы)
...
particles.ts: общий блок makeParticlePerspUniforms() (uPxScale/uPersp/
uRefDist — все слои шарят IUniform'ы, рост ёмкости не отрывается);
createSpriteLayer теперь принимает блок вместо per-layer pxScale.
POINT_VERT: gl_PointSize = aSize·uPxScale·mix(1, uRefDist/max(w,1e-4),
uPersp) — в изо uPersp=0 и w=1: прежнее поведение бит-в-бит; калибровка
uPxScale·uRefDist = (H/2)/tan(fov/2) — точка на дистанции viewSize
рисуется в изо-масштабе, переход режимов бесшовный. QUAD_VERT не тронут.
cameraMath.ts: perspVisibleRadius(D, tanHalf, aspect, viewSize) — сечение
пирамиды для теневых фрустумов, кламп снизу ¼ изо-полуширины.
voxelRenderer.ts: applySpriteUniforms() флипает блок в конструкторе и
setCameraMode; visibleRadius() — изо легаси viewSize·max(aspect,1),
перспектива — сечение на глубине видимой земли (farG fogBandLayout под
капом дальностей). setSun/setLightning зовут его. Резкая линия включения
теней у горизонта в перспективе — известный предел (каскады вне скоупа).
index.ts: экспорт makeParticlePerspUniforms. Тесты: perspVisibleRadius,
общий persp-блок переживает рост ёмкости. check:fast 407 тестов, гейт
погоды зелёный (26 чеков).
Co-Authored-By: Claude Code <noreply@anthropic.com>
Eugene Sukhodolskiy
committed
12 hours ago