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>
7.0 KiB
Аудит визуального реализма
Дата: 2026-07-15
Стек визуализации: Three.js + React Three Fiber + drei (клиентский WebGL)
Решение по стеку: остаёмся на R3F — смена на Babylon/Unity Web не обоснована; текущий стек уже даёт industrial twin и STL.
Легенда: Измерено (код/сборка/тесты) · Оценка (экспертный вывод без GPU-профайлера браузера в этом отчёте).
1. Цель аудита
Отделить:
- Что уже выглядит как оборудование.
- Что всё ещё «игровое» или декоративное.
- Что критично для доверия жюри за первые 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.