diff --git a/docs/AIRCRAFT-MODELS.md b/docs/AIRCRAFT-MODELS.md index 952886b..c5aad53 100644 --- a/docs/AIRCRAFT-MODELS.md +++ b/docs/AIRCRAFT-MODELS.md @@ -17,8 +17,18 @@ [Ракурс сверху до](media/aircraft-pass/lancet-instance-before-top.png) · [ракурс сверху после](media/aircraft-pass/lancet-instance-after-top.png). -Временный проверочный мод `tools/model-preview` выставляет модель через игровой `render.set-models` с `glow=false` в открытом воздухе. На этих кадрах видны цвет, крылья и нос; это статичный инстанс, полёт и анимация не проверены. На сегментах крыльев заметны различия яркости, требующие отдельной оценки. +Проверочный мод `tools/model-preview` выставляет модель через игровой `render.set-models` с `glow=false` и HD-освещением в открытом воздухе. На этих кадрах видны цвет, крылья и нос; это статичный инстанс, полёт и анимация не проверены. Различия яркости наклонных сегментов на старых кадрах исправлены в #123. -Остальные снимки выше показывают модели как установленные блоки в изолированных мирах Horizon, offscreen, без звука, при времени 6000 и ясной погоде, со светящейся платформой и одинаковыми координатами камеры. В пакетах одинаковы код и остальные ресурсы; для варианта «до» заменены два JSON модели на версии d410e2c. Оба блока после установки проверены через `block`. Ландшафт и состояние подгрузки различаются; снимки не ретушированы. Непрозрачный установленный блок местами выглядит почти чёрным, поэтому его снимки нельзя использовать для оценки освещения игровых инстансов. Ночное освещение и массовая производительность не проверены; художественная приёмка остаётся открытой. +## Исправление нормалей (#123) + +| До | После | +|---|---| +| ![Осевые нормали](media/aircraft-pass/lancet-instance-normal-before.png) | ![Геометрические нормали](media/aircraft-pass/lancet-instance-normal-fix.png) | + +[Сверху после исправления](media/aircraft-pass/lancet-instance-normal-fix-top.png) · [ночь после исправления](media/aircraft-pass/lancet-instance-normal-fix-night.png). + +Пара «до/после» снята в одном scratch-мире, с одинаковыми координатами камеры, временем и погодой на Apple M5/Metal. Динамический block-model путь теперь вычисляет нормаль из неколлинеарных вершин квада и использует прежний осевой fallback только для вырожденной геометрии. Unit-тест покрывает оба знака наклона 45°, другие углы, осевые и вырожденные квады. Массовая производительность и полёт этой проверкой не измерялись. + +Остальные снимки выше показывают модели как установленные блоки в изолированных мирах Horizon, offscreen, без звука, при времени 6000 и ясной погоде, со светящейся платформой и одинаковыми координатами камеры. В пакетах одинаковы код и остальные ресурсы; для варианта «до» заменены два JSON модели на версии d410e2c. Оба блока после установки проверены через `block`. Ландшафт и состояние подгрузки различаются; снимки не ретушированы. Непрозрачный установленный блок местами выглядит почти чёрным, поэтому его снимки нельзя использовать для оценки освещения игровых инстансов. В исходной серии ночное освещение не проверялось; ночной кадр Lancet после #123 представлен выше. Массовая производительность не проверена; художественная приёмка остаётся открытой. Редактируемые источники — `airdef-mod/source-assets/assets/airdef/models/block/{lancet,kh101}.json`. Для переэкспорта запустите `python3 tools/aircraft_models.py`, затем `python3 tools/gen_models.py` для установки ресурсов и пересчёта габаритов. diff --git a/docs/CONTINUATION-2026-11-04.md b/docs/CONTINUATION-2026-11-04.md index d7b284d..20bd3e8 100644 --- a/docs/CONTINUATION-2026-11-04.md +++ b/docs/CONTINUATION-2026-11-04.md @@ -70,3 +70,12 @@ h264 + AAC, отчёт мода совпадает с `ffprobe nb_frames`, от Подробности и ограничения (очистка временных файлов движком при ошибке энкодера) — [HD-RENDERER](HD-RENDERER.md) (раздел про кинорежиссёра) и [ENGINE](ENGINE.md) (раздел про захват). 10-минутный экспорт и Windows/Linux по-прежнему не проверены. + +## Обновление #123 + +Engine `45b43f00d`: dynamic block models используют геометрическую нормаль квада вместо осевого +`facing`; для вырожденных вершин сохранён прежний fallback. Unit-тест покрывает `±45°`, другие +наклоны, осевые и вырожденные квады. На реальном Lancet-инстансе через `set-models`, `glow=false` +и HD получены парные кадры до/после в одном мире и ракурсе, а также вид сверху и ночью; полосы +осевого освещения устранены. [Кадры и ограничения](AIRCRAFT-MODELS.md). Массовый FPS и полёт не +измерялись. diff --git a/docs/IMPLEMENTATION-STATUS.md b/docs/IMPLEMENTATION-STATUS.md index 7a8dfb8..de06e85 100644 --- a/docs/IMPLEMENTATION-STATUS.md +++ b/docs/IMPLEMENTATION-STATUS.md @@ -8,7 +8,7 @@ для Rust и Python; #102: измеренный fuel, API29 light/source milestones и изоляция камер; #96: массовый deterministic offline capture; #115: authored Lancet/Х-101 и кадры инстансов. Текущий engine pin — API29; старые номера/числа ниже описывают предыдущие этапы. -Новая оставшаяся проблема нормалей модели — #123. +Проблема нормалей модели #123 исправлена в engine `45b43f00d`; парные HD-кадры и ночная проверка Lancet записаны в галерее. | Issue | Реализовано | Что остаётся для полной приёмки | |---|---|---| diff --git a/docs/media/aircraft-pass/lancet-instance-normal-before.png b/docs/media/aircraft-pass/lancet-instance-normal-before.png new file mode 100644 index 0000000..ef5f67c Binary files /dev/null and b/docs/media/aircraft-pass/lancet-instance-normal-before.png differ diff --git a/docs/media/aircraft-pass/lancet-instance-normal-fix-night.png b/docs/media/aircraft-pass/lancet-instance-normal-fix-night.png new file mode 100644 index 0000000..f2f61c8 Binary files /dev/null and b/docs/media/aircraft-pass/lancet-instance-normal-fix-night.png differ diff --git a/docs/media/aircraft-pass/lancet-instance-normal-fix-top.png b/docs/media/aircraft-pass/lancet-instance-normal-fix-top.png new file mode 100644 index 0000000..9dcbb79 Binary files /dev/null and b/docs/media/aircraft-pass/lancet-instance-normal-fix-top.png differ diff --git a/docs/media/aircraft-pass/lancet-instance-normal-fix.png b/docs/media/aircraft-pass/lancet-instance-normal-fix.png new file mode 100644 index 0000000..97dc1f7 Binary files /dev/null and b/docs/media/aircraft-pass/lancet-instance-normal-fix.png differ diff --git a/horizon b/horizon index 57f8b28..45b43f0 160000 --- a/horizon +++ b/horizon @@ -1 +1 @@ -Subproject commit 57f8b2853c4443f7e3ff5701600cbb262b53118f +Subproject commit 45b43f00dffc3e0ae391e48095ddcd61bcf4c612 diff --git a/tools/model-preview/src/lib.rs b/tools/model-preview/src/lib.rs index bbb76b9..8cb5636 100644 --- a/tools/model-preview/src/lib.rs +++ b/tools/model-preview/src/lib.rs @@ -3,6 +3,7 @@ struct Preview; impl Mod for Preview { fn init() -> Result<(Self, Registration), String> { Ok((Self, Registration::new().on_tick())) } fn tick(&mut self, _: u64) { + render::set_lighting(render::Lighting { hd: true, exposure: 1., bloom: 0.55 }); render::set_models(&[render::ModelInstance { id: 1, model: "airdef:lancet".into(), x: 0.5, y: 110.5, z: 0.5, rotation: (0.,0.,0.,1.), scale: 1., glow: false }]); } }