[bug] Occlusion свечения сравнивает осевую глубину с расстоянием вдоль луча #14
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Проверка исходников на
90379f6. Полный Horizon/GPU на Mac не запускался; оценки сложности и ресурсов ниже не являются замерами FPS.В prelude
gfx/mod_post.rs:project(world).zвозвращает clipc.w(осевую глубину для perspective projection).scene_distance(uv)возвращаетlength(view_ray_point(...))— расстояние вдоль луча.effects.wgslсравнивает эти разные величины для visibility вспышек и отсечения glow.Математический контрпример, без запуска GPU: точка в координатах камеры (10, 0, -10) имеет осевую глубину 10 и расстояние sqrt(200)≈14.142. Стена на том же луче на расстоянии 12 закрывает точку, но сравнение
12 < 10ложно. Чем дальше от центра экрана, тем сильнее расхождение. Для фактических sphere radii выбрать радиус существенно меньше этой разницы.Предложение: сохранить c.w для определения знака/положения относительно камеры, а при occlusion использовать одну метрику на обеих сторонах (radial distance либо обе axial depths) и согласованные радиусные допуски. Не менять project API молча, если есть другие consumers.
Критерий: тест с источником за стеной в центре и у края экрана; корректная видимость при повороте камеры и изменении FOV, без просвечивания glow через препятствие. Нужен GPU image regression для окончательной визуальной проверки.
Код:
🤖 Agent: исправлено в https://gitea.maoniao.team/chexit/airdef/commit/67a2a52 (запушено в main).