План: 3D-модели и конфиги крыльев по ТЗ (docs/research/glider_3d_tz.md)

Ветка wings/models3d (от main 5df933e), рабочая копия ~/deltaplan-wings3d, координатор — dp-coordinator. Задачи — в своих копиях ~/deltaplan-wings3d-<задача>, ветки wings3d/<задача>. Журнал — docs/archive/plan/wings-models3d-progress.md, контракты — docs/contracts/wings-models3d.md.

Цель

  1. Обновить 3D-модели 9 существующих крыльев по разделам E1–E9 ТЗ.
  2. Конфиги существующих — сверены и поправлены прошлой работой (docs/research/wings_config_sources.md); здесь — только то, что вытекает из правок 3D (согласованность К1/К2).
  3. Добавить 39 новых крыльев N1–N39: запись glider_params.json, модель glider_<id>.glb, конфиг, перевод названия.

Решения пользователя (не обсуждаются)

  • Точность: достаточно, чтобы с 3 м было похоже; не шлифовать; мелкие визуальные детали — не больше 2 попыток, берётся лучшая.
  • Поляры: приоритет DHV; поляры без данных DHV не менять; абсолютным L/D заявок не верить; combat.best_glide не калибровать.
  • Тип конструкции без цитаты — по году и классу, по умолчанию мачтовое.
  • Совместимость не нужна: форматы конфигов и моделей можно менять.
  • Внешние 3D-ассеты — только с подходящей лицензией (учёт в ASSETS.md). Здесь не нужны: модели строятся параметрическим скриптом.

Решения пользователя на шлюзе 1 (2026-10-01)

  • Поляры новых крыльев — вариант А: пересчёт по нагрузке от базы; расхождение с DHV Vmin — в _doc, относительно базы, без порога 10 % (К4 v2). Варианты Б (тянуть к DHV Vmin) и В (исследование определения Vmin) не делаем.

  • Приняты решения координатора: N19 Spyder — безмачтовое (topless), N28 Litesport — мачтовое (kingpost), N15 MastR — мачтовое с оценкой высоты мачты; К3 v2.

  • Дальше без шлюзов между волнами (если нет развилок): волна 2 (W3-03, W3-04), затем волна 3 (W3-05, W3-06), отчёт после волны 3 — что сделано, коммиты, по скриншоту на крыло (можно склейкой), открытые вопросы. Строки docs/guide/models.md для N1, N24 — в волне 2. В main не вливать.

  • Уточнение (2026-10-01): задача волн 2–3 — добавить много крыльев, корректность — по отзывам игроков; развилки решает координатор сам (журнал: «развилка → решение → почему»), возврат раньше — только при блокировке.

Что уже есть (шаблон)

Параметрический построитель крыла уже есть: tools/blender/build_gliders.py + glider_params.json (К1). Новая модель = новая запись (копия базы + значения из «Что задать») → сборка. Не хватает: машиночитаемой спецификации из ТЗ (К3), скрипта, который из неё пишет запись параметров, конфиг (поляра по К4) и перевод, и списков без жёстко зашитых id (render_all.sh, check_models.gd).

Границы

  • Поляры новых крыльев — подобием от базы того же класса (К4), не по заявкам; L/D базы не меняется.
  • Форма паруса, закрутка, профиль, высота кингпоста — от базы (в паспортах чисел нет).
  • Модуль воздуха, физику полёта, меню (кроме вместимости списка крыльев) не трогаем.
  • Цена: +39 моделей ≈ 0,5–0,7 МБ каждая (+ карты паруса) — сборка вырастет на ≈ 25–35 МБ.

Волна 1 — существующие крылья и шаблон (шлюз после)

W3-01. Существующие крылья по E1–E9 — dp-engineer (Opus).

  • Скоуп: glider_params.json → training (tip_chord_m 0,90 → 1,00), sport (battens_per_side 14 → 11, nose_forward_m 1,30 → 1,35, nose_angle_deg 132 → 128, lower_cover 0,70 → ≈0,9 по К1), combat (battens_per_side 16 → 12), laminar (battens_per_side 13 → 9); E2, E6–E9 — без правок. Пересобрать изменённые модели. Убрать жёсткие списки id из tools/blender/render_all.sh, scenes/models_preview/check_models.gd (брать из configs/wings/*.json), строку kind в render_views.py.
  • Приёмка: test_wing_models_contract зелёный; check_models.gd — ИТОГ: OK; тесты крыльев (test_wings, test_polar, test_mass, test_wing_catalog, test_wing_picker, test_roll, test_stall, test_landing, test_ground) — без новых падений; рендеры «было/стало» (снизу, 3/4, сбоку) для 4 изменённых крыльев в build/screenshots/w3-01/.

W3-02. Шаблон новой модели: спецификация (К3), применяющий скрипт (К1, К2, К4), проба на N1 и N24 — dp-engineer (Opus).

  • Скоуп: make_3d_tz.py дополнительно пишет out/wings3d_spec.json (К3; ТЗ при перегенерации не меняется по числам); новый скрипт tools/research/data/wing_passports/make_new_wings.py <id…> — запись glider_params.json (копия базы + params + своя раскраска), configs/wings/<id>.json (копия базового конфига + config + поляра по К4 + _doc с источниками), строка locale/ui.csv (название «Производитель Модель Размер», ru = en); пробно — N1 icaro_piuma и N24 ww_t2c: модели, конфиги, перевод. Проверить меню выбора крыла при 15–20 крыльях в группе (временно сгенерировать все 39 конфигов, не коммитить): влезает ли список; если нет — прокрутка.
  • Приёмка: спецификация совпадает с таблицами ТЗ (скрипт сверки или тест); для N1/N24 — test_wing_models_contract и тесты крыльев зелёные, check_models.gd OK, площадь в плане ±2 %, reference.best_glide = базе, сваливание поляры против DHV Vmin — числа в отчёте; рендеры N1/N24 (снизу, 3/4, сбоку) и скриншот меню выбора крыла — в build/screenshots/w3-02/.

Шлюз 1: скриншоты «было/стало», N1/N24, правило К4 — главной сессии.

Волна 2 — новые P1 (18 крыльев) · Волна 3 — новые P2 (21 крыло)

После шлюза: пачками по 9–10 крыльев на исполнителя (dp-engineer, Sonnet — запуск скрипта, сборка, просмотр; сложности — Opus), до 2 пачек параллельно (общие файлы glider_params.json, locale/ui.csv — правки в разных местах, слияние без конфликтов проверяет координатор).

  • W3-03: N2, N3, N4, N10, N11, N12, N13, N14, N15 · W3-04: N20, N24*, N25, N26, N28, N29, N31, N32 (*N24 уже в W3-02).
  • W3-05: N5–N9, N16–N19 · W3-06: N21–N23, N27, N30, N33–N39.
  • Приёмка каждой пачки: контрактный тест и тесты крыльев зелёные, check_models.gd OK, лист рендеров (3/4 и снизу, по крылу) в build/screenshots/<задача>/, особенности вида из «Заметок по виду» — только то, что выражается полями К1 (wheels, faired_uprights, tip_round, keel_pocket_m, short_battens), не больше 2 попыток; строки в таблицу моделей docs/guide/models.md.

Риски

  • Ошибки разбора паспортов (ТЗ помечает): брать опорный размер из «Что задать», при сомнении — в журнал, не гадать.
  • Нагрузка на меню при 48 крыльях — W3-02.
  • Совпадение формы у моделей одного класса (одна база): с 3 м различаются размахом, углом носа, латами и раскраской — этого достаточно по решению пользователя.