[enhancement] Ремейк прожекторов: направленный свет и прозрачный объёмный пучок вместо beam-блоков #60

Closed
opened 2026-10-29 18:02:09 +00:00 by chexit · 1 comment
Owner

🤖 Filed by Codex, AI-агент Владимира (chexit).

Уточнение по прямому запросу автора проекта, код просмотрен на f443f0a. Автор просит полноценный ремейк прожекторов: видимый пучок света, а не непрозрачная конструкция из светящихся блоков. В воздухе должна читаться прозрачность/объём, на цели и поверхности — реальная направленная подсветка.

Подтверждённая текущая реализация

  • sim/lights.rs::step_lights собирает луч из до 14 увеличивающихся моделей airdef:beam.
  • tools/gen_models.py::beam создаёт вытянутый cuboid, а beam texture — градиент цвета; это модельная геометрия, не интегрируемый световой объём.
  • lib.rs::lights даёт прожектору локальный PointLight в позиции цели, если она отмечена освещённой. Это приближение пятна, не направленный источник от головы прожектора.
  • Признак lit выставляется по попаданию направления в угол 0.08 рад; в этой ветке нет проверки перекрытия луча стеной/горой. Новый визуал и игровая освещённость должны стать согласованными.

Направленный свет

  • Источник в линзе головы прожектора: позиция, направление, длина, внутренний/внешний угол, интенсивность/цвет, плавная граница, затухание. В форке нужен spotlight/cone light либо эквивалентная реализация; цепочка PointLight вдоль луча не является желаемой заменой.
  • Свет освещает поверхность/летящий объект только в конусе и без препятствия между источником и точкой (#43/#42). Пятно на земле/стене соответствует углу падения и направлению, не висит отдельным светящимся шаром в воздухе.
  • CPU-признак освещения для ночной стрельбы использует ту же геометрию/перекрытие и направление головы. Цель за горой не получает бонус, пока прожектор светит в склон.

Видимый луч

  • Объёмное рассеяние внутри конуса, особенно красивое в тумане/дыму (#53): полупрозрачный пучок, через который виден мир; световая сердцевина и мягкая периферия, без кубических сегментов/швов.
  • В чистом воздухе допустим слабый художественный луч, но он не превращается в сплошной белый столб. В плотной среде яркость/видимость и тени согласованы с плотностью; камера может находиться внутри конуса.
  • Корректное depth clipping, окклюзия и композиция с дымом/водой/несколькими лучами. Не продолжать видимый свет за стеной.
  • Голова прожектора плавно сканирует/сопровождает, луч привязан к её фактическому положению; при довороте освещённость не возникает раньше попадания конуса. Источник данных о цели согласовать с устаревающими треками #46, без скрытого чтения истинных координат.
  • Для обычного пресета — лёгкий корректно смешиваемый прозрачный fallback, для HD — полноценный объём/spotlight; off не показывает непрозрачные beam-блоки как имитацию освещения.
  • Те же параметры/события в реплеях #56 и кинорежиме #58. Стабильные ID, per-view culling и bounded GPU-бюджет; не возвращать десятки динамических источников на один прожектор.

Приёмка

Ночь, один прожектор: луч виден полупрозрачным конусом, голова/пятно/освещённая цель совпадают. Поставить стену поперёк: луч и подсветка обрываются, скрытая цель не получает lit. Проверить туман/дым, камеру внутри конуса, несколько прожекторов, доворот, потерю трека, движущуюся цель, off/on/hd и replay/MP4. На массовой сцене измерить GPU-стоимость и отсутствие лишних model draw/point lights.

🤖 Filed by Codex, AI-агент Владимира (chexit). Уточнение по прямому запросу автора проекта, код просмотрен на `f443f0a`. Автор просит полноценный ремейк прожекторов: видимый **пучок света**, а не непрозрачная конструкция из светящихся блоков. В воздухе должна читаться прозрачность/объём, на цели и поверхности — реальная направленная подсветка. ### Подтверждённая текущая реализация - `sim/lights.rs::step_lights` собирает луч из до 14 увеличивающихся моделей `airdef:beam`. - `tools/gen_models.py::beam` создаёт вытянутый cuboid, а beam texture — градиент цвета; это модельная геометрия, не интегрируемый световой объём. - `lib.rs::lights` даёт прожектору локальный **PointLight в позиции цели**, если она отмечена освещённой. Это приближение пятна, не направленный источник от головы прожектора. - Признак `lit` выставляется по попаданию направления в угол 0.08 рад; в этой ветке нет проверки перекрытия луча стеной/горой. Новый визуал и игровая освещённость должны стать согласованными. ### Направленный свет - Источник в линзе головы прожектора: позиция, направление, длина, внутренний/внешний угол, интенсивность/цвет, плавная граница, затухание. В форке нужен spotlight/cone light либо эквивалентная реализация; цепочка PointLight вдоль луча не является желаемой заменой. - Свет освещает поверхность/летящий объект только в конусе и без препятствия между источником и точкой (#43/#42). Пятно на земле/стене соответствует углу падения и направлению, не висит отдельным светящимся шаром в воздухе. - CPU-признак освещения для ночной стрельбы использует ту же геометрию/перекрытие и направление головы. Цель за горой не получает бонус, пока прожектор светит в склон. ### Видимый луч - Объёмное рассеяние внутри конуса, особенно красивое в тумане/дыму (#53): полупрозрачный пучок, через который виден мир; световая сердцевина и мягкая периферия, без кубических сегментов/швов. - В чистом воздухе допустим слабый художественный луч, но он не превращается в сплошной белый столб. В плотной среде яркость/видимость и тени согласованы с плотностью; камера может находиться внутри конуса. - Корректное depth clipping, окклюзия и композиция с дымом/водой/несколькими лучами. Не продолжать видимый свет за стеной. - Голова прожектора плавно сканирует/сопровождает, луч привязан к её фактическому положению; при довороте освещённость не возникает раньше попадания конуса. Источник данных о цели согласовать с устаревающими треками #46, без скрытого чтения истинных координат. - Для обычного пресета — лёгкий корректно смешиваемый прозрачный fallback, для HD — полноценный объём/spotlight; off не показывает непрозрачные beam-блоки как имитацию освещения. - Те же параметры/события в реплеях #56 и кинорежиме #58. Стабильные ID, per-view culling и bounded GPU-бюджет; не возвращать десятки динамических источников на один прожектор. ### Приёмка Ночь, один прожектор: луч виден полупрозрачным конусом, голова/пятно/освещённая цель совпадают. Поставить стену поперёк: луч и подсветка обрываются, скрытая цель не получает lit. Проверить туман/дым, камеру внутри конуса, несколько прожекторов, доворот, потерю трека, движущуюся цель, off/on/hd и replay/MP4. На массовой сцене измерить GPU-стоимость и отсутствие лишних model draw/point lights.
chexit added the area:renderingtype:enhancementpriority:P2area:simulation labels 2026-10-29 18:02:09 +00:00
Author
Owner

🤖 Agent: сделано в https://gitea.maoniao.team/chexit/airdef/commit/76f680e (запушено в main).

🤖 Agent: сделано в https://gitea.maoniao.team/chexit/airdef/commit/76f680e (запушено в main).
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: chexit/airdef#60