Приложение 2. Диаграммы
flowchart TB
subgraph L1[Автор уровня]
direction LR
S(( )) --> A1[Снять место в сканере]
A1 --> A2[Выгрузить плотную модель]
end
subgraph L2[3D-художник]
direction LR
B1[Почистить и упростить модель] --> B2[Построить опору для персонажа]
B2 --> B3[Выставить размеры]
end
subgraph L3[Разработчик игры]
direction LR
C1[Импортировать в движок] --> C2{Персонаж проходит уровень?}
C2 -- Да --> E((( )))
end
A2 --> B1
B3 --> C1
C2 -- Нет: брак съёмки --> A1
C2 -- Нет: брак опоры --> B2
classDef manual fill:#fde2e1,stroke:#d9534f,color:#111;
classDef node0 fill:#111,stroke:#111;
class B1,B2,B3,C2 manual
class S,E node0
Рис. П.2.1. Процесс AS-IS: уровень с реального места сегодня
UML-диаграмма активности с дорожками по ролям. Ручные шаги и поздняя проверка отмечены красным. Все три роли может выполнять один человек.
flowchart TB
subgraph L1[Оператор съёмки]
direction LR
S(( )) --> A1[Обойти зону 10–30 секунд]
A3[Отправить съёмку]
end
subgraph L2[Система NVC Maps]
direction LR
B1[Проверить запись на телефоне] --> B2{Запись годится?}
B2 -- Нет --> B3[Показать причину и «Переснять»]
B4[Собрать карту на сервере] --> B5{Условия табл. 2.10 выполнены?}
B5 -- Нет --> B6[Отказ с причиной]
B5 -- Да --> B7[Пакет и отчёт готовы]
end
subgraph L3[Сборщик карты и разработчик игры]
direction LR
C1[Пройти по карте в браузере] --> C2{Персонаж проходит?}
C2 -- Да --> C3[Скачать пакет в движок]
C3 --> E((( )))
end
A1 --> B1
B2 -- Да --> A3
A3 --> B4
B3 --> A1
B6 --> A1
B7 --> C1
C2 -- Нет --> A1
classDef node0 fill:#111,stroke:#111;
class S,E node0
Рис. П.2.2. Процесс TO-BE: уровень с NVC Maps
UML-диаграмма активности с дорожками по ролям. Ручных шагов доводки нет; брак отсекается проверкой записи и отказом сборки.
flowchart LR
Op([Оператор съёмки])
Col([Сборщик карты])
Dev([Разработчик игры])
Team([Команда сервиса])
subgraph NVC[Система NVC Maps]
App[Приложение съёмки]
API[Сервис приёма и заданий]
Worker[Конвейер сборки]
Web[Веб-клиент]
end
ARKit[[ARKit и LiDAR на iPhone]]
Host[[Хостинг: база и хранилище файлов]]
Engine[[Игровые движки: Godot, Unity, Unreal]]
Op --> App
App <--> ARKit
App -->|съёмка| API
Col --> Web
Web -->|статус, отчёт, карта| API
API --> Worker
API <--> Host
Worker <--> Host
Dev -->|скачивает пакет| Web
Dev --> Engine
Team -->|тестовая ссылка| API
Рис. П.2.3. Контекстная диаграмма
flowchart LR Op([Оператор съёмки]) Col([Сборщик карты]) Dev([Разработчик игры]) Team([Команда сервиса]) Op --> U1(Записать зону) Op --> U2(Проверить запись) Op --> U3(Отправить съёмку) Col --> U4(Загрузить съёмку из браузера) Col --> U5(Открыть свои задания) Col --> U6(Смотреть отчёт) Col --> U7(Пройти по карте) Dev --> U8(Скачать пакет) Team --> U9(Выпустить или заменить тестовую ссылку)
Рис. П.2.4. Диаграмма вариантов использования
%%{init: {"themeVariables": {"fontSize": "20px"}, "sequence": {"messageMargin": 22, "boxMargin": 6, "actorMargin": 40, "messageFontSize": 20, "actorFontSize": 20, "noteFontSize": 18, "mirrorActors": false}}}%%
sequenceDiagram
actor Op as Оператор съёмки
participant App as Приложение съёмки
participant API as Сервис приёма
participant W as Конвейер сборки
Op->>App: Записать зону и остановить
App->>App: Проверить запись
alt Запись не годится
App-->>Op: Причина и «Переснять»
else Запись годится
Op->>App: Отправить
App->>API: Съёмка и ключ пользователя
alt Обрыв связи
App-->>Op: Ошибка сети, отправку можно повторить
Op->>App: Отправить ещё раз
App->>API: Та же съёмка
API-->>App: Прежнее задание, вторая сборка не стартует
else Связь есть
API-->>App: Задание «в очереди»
end
API->>W: Задание
W->>API: Статус «готово» или «отказ» с причиной
end
Рис. П.2.5. Системная диаграмма последовательности UC-1 «Снять и отправить участок»
%%{init: {"themeVariables": {"fontSize": "20px"}, "sequence": {"messageMargin": 22, "boxMargin": 6, "actorMargin": 40, "messageFontSize": 20, "actorFontSize": 20, "noteFontSize": 18, "mirrorActors": false}}}%%
sequenceDiagram
actor Col as Сборщик карты
participant App as Приложение съёмки
participant Web as Веб-клиент
participant API as Сервис приёма
participant S as Хранилище
Col->>App: Открыть в браузере
App->>API: Запрос одноразовой ссылки
API-->>App: Ссылка на 10 минут
App->>Web: Открыть ссылку
Web->>API: Обменять ссылку на сессию
alt Ссылка уже открыта или истекла
API-->>Web: «Ссылка уже открыта или истекла»
Web-->>Col: Пустой вход, нужна новая ссылка с телефона
else Ссылка действует
API-->>Web: Список заданий пользователя
Col->>Web: Открыть задание
alt Сборка завершилась отказом
API-->>Web: Статус «отказ» и причина
Web-->>Col: Причина, просмотр и скачивание недоступны
else Сборка готова
Web->>S: Опора и кадр съёмки по короткой ссылке
Col->>Web: Пройти по карте и скачать пакет
end
end
Рис. П.2.6. Системная диаграмма последовательности UC-2 «Проверить карту в браузере»
flowchart TD
S(( )) --> A[Открыть «Сканировать»]
A --> B[Рамка зоны 0,8 × 0,8 м]
B --> C[Обход 10–30 секунд, стоп]
C --> D{"Проверка: 10–30 с, путь ≥ 0,28 м, ракурс ≥ 90°, зона ≤ 0,92 м, разрыв поз ≤ 0,5 с"}
D -- Не пройдена --> E[Причина и «Переснять»]
E --> A
D -- Пройдена --> F[Отправить]
F --> G{Связь есть?}
G -- Обрыв --> H[Отправить ещё раз]
H --> I{Съёмка уже на сервере?}
I -- Да --> J[Вернуть прежнее задание]
I -- Нет --> K[Создать задание]
G -- Да --> K
J --> Q[Задание в очереди]
K --> Q
Q --> Z((( )))
classDef node0 fill:#111,stroke:#111;
class S,Z node0
Рис. П.2.7. Диаграмма активности UC-1 с альтернативными потоками