Wire live classifyItem into continuous playback, add jam/E-stop cases, presenter controls (seek/speed/hotkeys), quality modes, demo scripts, audit docs, and a verify-only autonomous agent CLI with hard safety limits. Co-authored-by: Cursor <cursoragent@cursor.com>
116 lines
7.0 KiB
Markdown
116 lines
7.0 KiB
Markdown
# Аудит визуального реализма
|
||
|
||
**Дата:** 2026-07-15
|
||
**Стек визуализации:** Three.js + React Three Fiber + drei (клиентский WebGL)
|
||
**Решение по стеку:** **остаёмся на R3F** — смена на Babylon/Unity Web не обоснована; текущий стек уже даёт industrial twin и STL.
|
||
|
||
Легенда: **Измерено** (код/сборка/тесты) · **Оценка** (экспертный вывод без GPU-профайлера браузера в этом отчёте).
|
||
|
||
---
|
||
|
||
## 1. Цель аудита
|
||
|
||
Отделить:
|
||
|
||
1. Что уже выглядит как оборудование.
|
||
2. Что всё ещё «игровое» или декоративное.
|
||
3. Что критично для доверия жюри за первые 10 секунд.
|
||
|
||
---
|
||
|
||
## 2. Текущая визуальная архитектура
|
||
|
||
| Компонент | Continuous `/` | Details `/details` |
|
||
| --------- | -------------- | ------------------ |
|
||
| Scene root | `SorterDigitalTwinContinuous` | `SorterDigitalTwin` |
|
||
| Items | `PhysicalPlaybackItem` / motion domain | `Item3D` + sim state |
|
||
| Conveyor | `Conveyor3D` + network layout | Аналогичные примитивы, другой wiring |
|
||
| Actuators | Gate/pusher анимации | State-driven actuators |
|
||
| Sensors | Overlay + measurement HUD | `SensorRig3D` / panels |
|
||
| Models | STL через `modelAssets` + fallbacks | То же семейство ассетов |
|
||
| Camera | Cinematic / demo camera path | Свободная/инженерная |
|
||
|
||
**Проблема parity:** два twin визуально расходятся — разные акценты освещения/композиции/детализации. Для жюри это снижает ощущение «одной реальной линии».
|
||
|
||
---
|
||
|
||
## 3. Чек-лист визуальных факторов
|
||
|
||
| Фактор | Статус | Комментарий | Тип |
|
||
| ------ | ------ | ----------- | --- |
|
||
| Геометрия / пропорции | Частично OK | Layout в мм через `physicalLayout` | Измерено |
|
||
| Масштаб сцены | OK | Единая физическая раскладка | Измерено |
|
||
| Камера / перспектива | OK на `/` | Cinematic playback | Измерено |
|
||
| Focal length / DoF | Минимально | DoF не форсируется (мешает чтению) | Оценка |
|
||
| Освещение | Среднее | Достаточно для читаемости; не studio HDRI | Оценка |
|
||
| Контактные тени | Ограничено | `shadows: false` в quality presets (perf) | Измерено |
|
||
| AO / post FX | Выкл. в presets | `effectsEnabled: false` | Измерено |
|
||
| Материалы PBR | Базовые | Шероховатость/металл упрощены | Оценка |
|
||
| Текстуры / загрязнения | Слабо | Нет сильного wear layer | Оценка |
|
||
| Края / bevel | Частично | STL + примитивы | Оценка |
|
||
| Движение ленты / ролики | OK с trade-off | Static/sparse rollers в perf-режимах | Измерено (ветка perf) |
|
||
| Приводы / задержки | Симулированы кинематикой | Не servo-physics | Измерено |
|
||
| Motion blur | Нет | Сознательно | Измерено |
|
||
| Anti-aliasing | По режиму | low/medium off; high/demo on | Измерено |
|
||
| Звук / вибрация | Нет | Не реализовано | Измерено |
|
||
| Заполнение накопителей | Упрощено | B receiver timing учтён в истории perf | Измерено (история) |
|
||
| CV overlay | Есть | RULE line + inspection | Измерено |
|
||
| Presentation declutter | Есть | Скрытие панелей в presentation | Измерено |
|
||
|
||
---
|
||
|
||
## 4. Режимы качества
|
||
|
||
Источник: `src/domain/qualityMode.ts` (**Измерено**).
|
||
|
||
| Mode | dprMax | AA | Shadows | maxItems | rollers | target FPS |
|
||
| ---- | -----: | -- | ------- | -------: | ------- | ---------: |
|
||
| low | 1 | нет | нет | 3 | none | 30 |
|
||
| medium | 1.25 | нет | нет | 5 | sparse | 30 |
|
||
| high | 1.5 | да | нет | 6 | full | 60 |
|
||
| demo | 1.5 | да | нет | 6 | full | 60 |
|
||
|
||
Автовыбор: по ширине viewport и опционально по recent FPS; `adaptQuality` понижает режим при просадке.
|
||
|
||
**Целевая демо:** стабильные 60 FPS при возможности, иначе стабильные 30 без рывков (**требование брифа**; фактический FPS на клиенте жюри — **не измерен в этом аудите на всех устройствах**).
|
||
|
||
---
|
||
|
||
## 5. Что выглядит убедительно
|
||
|
||
- Непрерывный путь товара от входа до B/C/D с подписями зон.
|
||
- STL-модели там, где ассет доступен; осознанные fallbacks для тяжёлых STL.
|
||
- Proof HUD и CV overlay связывают картинку с решением.
|
||
- Fault визуально останавливает поток (freeze).
|
||
- Presentation mode убирает engineering chrome.
|
||
|
||
---
|
||
|
||
## 6. Что снижает доверие («игровое»)
|
||
|
||
| Симптом | Почему заметно | Рекомендация |
|
||
| ------- | -------------- | ------------ |
|
||
| Разный вид `/` и `/details` | «Две разные игрушки» | Shared scene kit (Open) |
|
||
| Нет теней/AO | Плоские объекты | Осторожно включить в demo на мощных GPU клиентов |
|
||
| Pseudo-CV bbox | Идеальная геометрия | Оставить RULE + confidence честно |
|
||
| Отсутствие звука | Тихая «сцена» | Опциональный ambient loop (низкий приоритет) |
|
||
| Идеально ровное движение без контактов | Нет micro-collisions | Seeded jitter уже частично компенсирует |
|
||
|
||
---
|
||
|
||
## 7. Критичность для показа
|
||
|
||
| Приоритет | Находка | Действие |
|
||
| --------- | ------- | -------- |
|
||
| P0 | Proof + classification visible | Сделано |
|
||
| P0 | Presentation + hotkeys | Сделано |
|
||
| P1 | Twin visual unify | Open |
|
||
| P2 | Shadows/AO в demo-only | Open, perf-gated |
|
||
| P3 | Sound / wear textures | Backlog |
|
||
|
||
---
|
||
|
||
## 8. Вывод
|
||
|
||
Визуальный стек **достаточен**. Узкое место не «не тот движок», а **согласованность двух сцен** и **сдержанный shading ради FPS**. Для жюри важнее читаемый контур решения, чем ray-traced реализм. Следующий максимум ROI: унификация twin + актуальный production dist.
|