Files
ozone-tech_owl_prime/docs/THREE_D_FEASIBILITY.md
root a700a146a3 fix: final parameter verification and source of truth documentation
- Add exact references to official specification (page/section/line) in INPUT_INFO_ANALYSIS.md
- Fix last hardcoded min dimensions in SceneLabels3D.tsx (10×10×10 → dynamic from DIMENSION_LIMITS)
- Fix hardcoded roundness threshold in Item3D.tsx (0.8 → dynamic from DIMENSION_LIMITS)
- Update THREE_D_FEASIBILITY.md checklist to reflect current parameters (10×10×2, K≥0.7)

Source of truth confirmed:
- Min dimensions: 10×10×2 mm (Постановка_Задача_3_сжато_2.pdf, стр. 2/17, строка 81)
- Roundness threshold: K ≥ 0.7 (Постановка_Задача_3_сжато_2.pdf, стр. 7/17, строка 245)
- Max dimensions: 450×320×320 mm (Постановка_Задача_3_сжато_2.pdf, стр. 2/17, строка 82)
- Conveyor speed: 1.0 м/с (Постановка_Задача_3_сжато_2.pdf, стр. 4/17, строка 188)

Tested: build OK, tests 16/16 passed, Docker OK, domains OK, smoke test OK
2026-07-04 16:12:12 +02:00

2.7 KiB
Raw Blame History

3D Digital Twin Feasibility

Выбранный стек

  • three
  • @react-three/fiber
  • @react-three/drei (OrbitControls, Html labels)
  • Без @react-three/rapier на первом этапе

Почему

  • R3F хорошо ложится на текущий React UI.
  • Простые box/cylinder геометрии достаточны для digital twin.
  • Drei нужен только для камеры и коротких labels.
  • Physics engine в браузере добавляет wasm, непредсказуемость и риск лагов на защите.

Physics engine

Не подключается.

Анимация: keyframe / state-machine interpolation по machineState + elapsedInStateMs.

Архитектура готова к physics позже:

  • позиции товара и actuator вычисляются в itemMotion.ts;
  • статические меши сцены отделены от motion layer;
  • можно заменить motion layer на kinematic/dynamic bodies без смены domain logic.

Риски

Риск Митигация
Bundle size lazy-load 3D, простые геометрии
Нет WebGL 2D SorterScene fallback
Mobile FPS simplified 3D или auto-2D при width < 640
Непредсказуемая физика не используем rapier

Fallback

  1. WebGL unavailable → 2D.
  2. User toggle «2D fallback».
  3. Mobile narrow screen → default 2D (можно вручную включить 3D).

Сообщение: «3D недоступен, включён 2D fallback. Логика симуляции та же.»

Performance budget

  • Без shadows / postprocessing / textures.
  • < ~50 mesh-объектов.
  • FPS overlay в capability check.
  • Target: стабильный interactive FPS на desktop.

Integration point

ProductDemoSection: toggle 3D Digital Twin / 2D fallback. Props из SimulationState: item, machineState, scenario, classification, sensors, actuators, metrics, gate.

Definition of Done

  • Build/test/Docker OK
  • 3D показывает A → conveyor → CV → gate → B/C/D
  • State machine двигает товар предсказуемо
  • ROUTE_TO_* виден цветом и стрелкой
  • 2D fallback работает
  • min dimensions 10×10×2, max 450×320×320, roundness K ≥ 0.7, conveyor 1.00 m/s
  • Нет horizontal scroll

Decision log

Physics (@react-three/rapier) не установлен: для хакатона важнее предсказуемый route, чем dynamic collisions. Motion layer — itemMotion.ts (PHYSICS_ENGINE_ENABLED = false).