Files
ozone-tech_owl_prime/docs/VISUAL_REALISM_AUDIT.md
Даня Архипов 985f7c327d feat: maximize sorter demo realism and add safe agent MVP
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>
2026-07-15 16:53:35 +00:00

116 lines
7.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Аудит визуального реализма
**Дата:** 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.