|
engine: туман в перспективе — реконструкция глубины и след земли
fog.ts: fogBandLayout(mode, viewSize, pitch, eyeH, fov) — iso даёт легаси viewSize·FOG_BAND_START/STEP точно (регрессионный замок изо-кадра), перспектива — стопка на наземном следе фрустума: nearG = eyeH/tan(pitch+ fov/2), farG = eyeH/tan(max(pitch−fov/2, 0.05)) с капом 6·viewSize (PERSP_FOG_FAR_K — у горизонта в 1st person стопка ушла бы в бесконечность). FOG_FRAG: #ifdef PERSP — along из нелинейной глубины буфера (near·far/(far−(far−near)·depth)), halfH = tanHalf·along, halfW = halfH· aspect, разметка юниформами uBandStart/uBandStep; изо-ветка шейдера — прежний код дословно. Дефайн PERSP переключается в render() рядом с SRGB_OUT (needsUpdate при смене режима). voxelRenderer.updateFogUniforms: базис активной камеры (union-ветка) + юниформы разметки; eyeH = высота камеры над target с полом 0.5. Тесты: изо-равенство легаси, стопка внутри [nearG, farG], кап при взгляде в небо. check:fast 404 теста, гейт погоды зелёный. Co-Authored-By: Claude Code <noreply@anthropic.com> |
|---|
|
|
| v2/packages/engine/src/render/__tests__/fog.test.ts |
|---|
| v2/packages/engine/src/render/fog.ts |
|---|
| v2/packages/engine/src/render/voxelRenderer.ts |
|---|