Оптимизация рендеринга цифрового двойника мостового крана: 12–58 FPS
Оптимизация рендеринга цифрового двойника мостового крана в реальном времени на периферийных устройствах — глубокая оптимизация производительности для маломощных промышленных компьютеров (i5-8500, встроенная графика, 4 ГБ видеопамяти). Благодаря четырём технологиям — снижению полигональности моделей (с 500 000 до 50 000 полигонов), многоуровневой загрузке LOD, сжатию текстур (с 200 МБ до 45 МБ) и отсечению невидимых объектов (Occlusion Culling) — частота кадров выросла с 12 до 58 fps, что позволяет обеспечить плавный мониторинг крана на 30 fps без модернизации оборудования.
Архитектура цифрового двойника, модель данных AAS, калибровка симуляции — а здесь разберём самый практичный вопрос: как добиться плавной работы цифрового двойника на промышленном компьютере.
3D-сцена цифрового двойника мостового крана запускается не на высокопроизводительной рабочей станции, а на цеховом промышленном компьютере (i5-8500, встроенная графика, 4 ГБ разделяемой видеопамяти). При такой конфигурации плавный рендеринг модели крана на 200 000 полигонов вместе с заводским зданием без оптимизации невозможен. Замеры показывают: до оптимизации — 12 fps, после — 58 fps. Разница в 46 fps — именно то, чему посвящена эта статья.

Снижение полигональности: с 500 000 до 50 000 полигонов
3D-модель мостового крана в цифровом двойнике обычно создаётся из CAD-моделей, экспортированных из конструкторской BOM или STEP-файлов, и нередко насчитывает от 500 000 до 1 000 000 треугольников. Такая точность оправдана для структурной симуляции, но при рендеринге в браузере она становится катастрофой. Снижение полигональности — первая обязательная мера.
| Зона модели | Исходное количество полигонов | После оптимизации полигонов | Процент сокращения полигонов | Метод |
|---|---|---|---|---|
| Главная балка (коробчатого сечения) | 15×10⁴ | 1.5×10⁴ | 90% | Обнаружение и объединение плоскостей |
| Концевая балка/Рама тележки | 10×10⁴ | 1×10⁴ | 90% | ПлоскостьОбнаружениеОбъединение |
| Двигатель/Редуктор | 8×10⁴ | 1.2×10⁴ | 85% | Симметрия с сохранением внешнего вида |
| Канат стальной/Крюк | 5×10⁴ | 0.5×10⁴ | 90% | line render |
| Электрошкаф/Галерея/Ограждение | 12×10⁴ | 0.8×10⁴ | 93% | Замена геометрии текстурами |
| Вся машина (целиком)мостовой кранИтого | 50×10⁴ | 5×10⁴ | 90% | — |
1.1 Стратегия снижения полигональности
Основной принцип снижения полигональности — «приоритет плоскостей»: большие плоские участки модели (стенка главной балки, накладка, боковые поверхности концевой балки) объединяются с помощью плоскостного обнаружения с сохранением контурных рёбер; на криволинейных поверхностях и в зоне сварных швов степень снижения уменьшается во избежание деформации. Рекомендуемый порядок работы: сначала с помощью Planar decimation довести плоские участки до минимального числа полигонов, затем применить Collapse decimation для вторичной оптимизации остальных зон, целевой показатель — не более 50 000 полигонов.
1.2 Рекомендуемые инструменты
- Blender Decimate Modifier: бесплатный, поддерживает Planar decimation и Collapse decimation, степень снижения контролируется точно
- Simplygon: промышленный инструмент автоматического снижения полигональности, поддерживает автоматическую генерацию цепочки LOD, дорогой, но эффективный
- MeshLab: с открытым исходным кодом, подходит для пакетной обработки
1.3 Критический предел снижения
Меньшее количество полигонов — не всегда лучше. При чрезмерном снижении контур модели деформируется, и это сразу заметно. Эмпирическое правило: после снижения визуальное различие между моделью и оригиналом в статическом состоянии должно быть незаметно невооружённым глазом. На практике наложите исходную и упрощённую модели друг на друга, включите полупрозрачное сравнение — отклонение контура менее 1 пикселя считается допустимым.
LOD-оптимизация: многоуровневая детализация для цифрового двойника
LOD (Level of Detail) — самый зрелый метод оптимизации в 3D-рендеринге: вблизи видна детализация, вдали — контур. В сценарии цифрового двойника оператор обычно не рассматривает детали сварных швов конкретного мостового крана — большую часть времени он наблюдает за работой нескольких кранов в обзорном режиме.
2.1 Проектирование уровней LOD
Уровни LOD делятся на 4 ступени в зависимости от дистанции обзора: LOD0 (детальный, 0–50 м), LOD1 (средний, 50–200 м), LOD2 (упрощённый, 200–500 м), LOD3 (дальний план, 500 м+). Количество полигонов и разрешение текстур для каждого уровня приведены ниже:
| LODУровень (иерархии) | Дальность обзора | Исходное количество полигонов | Разрешение текстур | Метод рендеринга |
|---|---|---|---|---|
| LOD0 (детальный, 0–50 м) | 5×10⁴ | 1024×1024 | ПолныйPBR | |
| LOD1(Средняя детализация) | 50~150m | 2×10⁴ | 512×512 | Упрощённый материал |
| LOD2(контур) | 150~300m | 0.5×10⁴ | 256×256 | Цветовые блоки без освещения |
| LOD3 (дальний план, 500 м+) | >300m | Куб+Маркировка | — | CSS2DRenderer |
2.2 Стратегия переключения LOD
Если переключать уровни детализации LOD жёстко (резкая смена модели при достижении порога), визуально возникает эффект «скачка». Рекомендуется использовать компонент LOD из three.js с плавным переходом (fade), либо задать порог переключения в виде анимированного интервала (например, прозрачность плавно меняется в диапазоне 48–52 м). Кроме того, не нужно проверять переключение LOD каждый кадр — достаточно выполнять проверку раз в 200 мс, это снижает нагрузку на CPU.
3. Сжатие текстур
Текстуры — основной источник потребления видеопамяти. Полный набор PBR-материалов (baseColor + roughness + metallic + normal + AO) в несжатом виде 2048×2048 занимает около 200 МБ видеопамяти на один мостовой кран. При одновременном отображении 5 кранов видеопамять переполняется мгновенно.
Рекомендуемые решения:
- ASTC 6×6 — формат сжатия текстур, разработанный ARM. Степень сжатия около 4:1, потеря качества приемлема. Полная поддержка в WebGL2.
- KTX2 + Basis Universal — кроссплатформенное сжатие текстур, распаковка выполняется непосредственно на GPU без участия CPU. В Three.js есть готовый загрузчик.
- Снижение разрешения текстур — для baseColor достаточно 1024×1024, для roughness/metallic — 512×512, для normal — 1024×1024, для AO — 256×256.
После оптимизации потребление видеопамяти на один мостовой кран снижается с 200 МБ до 45 МБ.
4. Отсечение невидимых объектов (Occlusion Culling)
В сцене цифрового двойника как минимум половина объектов не видна с текущего ракурса — стены за спиной, колонны с другой стороны, тележка, скрытая главной балкой. Отправлять все объекты на отрисовку GPU — чистая трата ресурсов.
В Three.js нет встроенного механизма Occlusion Culling, поэтому его нужно реализовать самостоятельно или подключить стороннюю библиотеку:
- Portals — разделение заводского здания на несколько зон/помещений. Объекты внутри зоны отображаются только тогда, когда эта зона видна. Подходит для сцен со стационарной структурой здания.
- Hardware Occlusion Queries — использование WebGL2 (EXT_disjoint_timer_query или Occlusion Query) для проверки видимости объектов. Высокая точность, но задержка в 1 кадр. Подходит для крупных статичных объектов.
- Frustum Culling — включён по умолчанию в Three.js, отображает только объекты внутри пирамиды видимости камеры. Это базовая оптимизация, но её недостаточно — объекты внутри пирамиды видимости всё ещё могут быть скрыты другими объектами.
В реальных проектах рекомендуется подход Portals. Заводское здание делится на несколько зон вдоль направления пролёта. Каждый мостовой кран относится только к своей текущей зоне и соседним. Если оператор находится в зоне A, краны в зонах B и C не отображаются — обновляется только текстовая информация об их состоянии.
5. Оптимизация передачи данных
Рендеринг — это не только работа фронтенда. То, как данные передаются от бэкенда к фронтенду, в каком объёме и с какой скоростью, напрямую влияет на пользовательский опыт.
5.1 Инкрементальное обновление
Данные о состоянии мостового крана обновляются каждые 100 мс, но 95% параметров остаются неизменными от кадра к кадру (например, номинальная нагрузка, пролёт и другие технические параметры никогда не меняются). Полная передача всех данных — это напрасная трата пропускной способности и ресурсов CPU на парсинг.
Решение: бэкенд отправляет только изменённые атрибуты. Каждая передача содержит bitmap-маску, указывающую, какие атрибуты изменились. Фронтенд обновляет только те 3D-объекты, чьи атрибуты изменились. На практике трафик снижается с 50 КБ/с до 8 КБ/с на один кран.
5.2 Сжатие данных
- JSON + gzip: степень сжатия около 6:1.
- JSON + Brotli (нативная поддержка в Chrome/Firefox): степень сжатия около 8:1, распаковка немного медленнее gzip, но приемлемо.
- Protocol Buffers (рекомендуется): бинарная кодировка, объём в 5 раз меньше JSON, скорость парсинга в 10 раз выше. Есть готовая библиотека protobuf.js, интеграция с Three.js безболезненная.
5.3 WebSocket против SSE
- WebSocket — полнодуплексный протокол, минимальная задержка, подходит для потоковой передачи данных в реальном времени.
- SSE (Server-Sent Events) — однонаправленная передача, нативная поддержка в браузере, встроенный механизм переподключения.
- Рекомендуется WebSocket с автоматическим переподключением (интервал heartbeat 15 с). При нестабильной сети на объекте — запасной вариант SSE.
6. Оптимизация потока рендеринга
Ключевая задача оптимизации потока рендеринга — вынести обработку данных из основного потока:
| Оптимизируемый параметр | До оптимизации | После оптимизации | Описание |
|---|---|---|---|
| Обработка данных | Главный поток | WebWorker | Размещение парсинга данныхWorker |
| Анимационный цикл | rAF | rAF(Без изменений) | СокращениеDOMОперация |
| Пул объектов | Частыйnew Object3D | Повторное использование пула | СокращениеGCЗадержка (фриз) |
| CSS2DМаркировка | Обновление всех кадров | Грязный флаг (dirty flag)+Пакетный | Обновление только при изменении данных |
| Объединение геометрии | НезависимыйGeometry | ОбъединениеBufferGeometry | draw call 20020 |
Рекомендации по аппаратной конфигурации
| КонфигурацияКласс | CPU | Память | GPU | Параллелизммостовой кран | Целевая частота кадров |
|---|---|---|---|---|---|
| Начальный уровень(промышленный компьютер) | i5-8500 | 8GB | UHD 630Встроенная графика | 5Вся машина (целиком) | 30fps |
| Стандарт(промышленный компьютер) | i7-10700 | 16GB | GTX 1650 | 15Вся машина (целиком) | 60fps |
| Высокая производительность(сервер) | Xeon+T4 | 32GB | NVIDIA T4(16GB) | 50Вся машина (целиком) | 60fps |
Оптимизация рендеринга на периферии: как добиться 60 FPS на промышленном компьютере
Стандартная конфигурация промышленного компьютера на большинстве заводов находится где-то между «начальным» и «стандартным» уровнем. После полного внедрения описанной выше схемы оптимизации средняя частота кадров при отображении 5 мостовых кранов на встроенной графике i5-8500 выросла с 12 FPS до 58 FPS. Если на объекте всего 1–2 мостовых крана, начальной конфигурации будет вполне достаточно.
Заключение
Оптимизация рендеринга на периферийных устройствах — это не магия, а три ключевых принципа: меньше передавать данных, меньше отрисовывать моделей, активнее задействовать GPU. Снижение пропускной способности на каждый мостовой кран с 50 КБ/с до 8 КБ/с, уменьшение количества полигонов с 500 000 до 50 000 и сокращение потребления памяти с 1,8 ГБ до 480 МБ позволяют добиться 60 FPS цифрового двойника даже на промышленном компьютере.
На этом серия статей о цифровом двойнике временно завершается. Четыре публикации охватили четыре ключевых технических этапа внедрения цифрового двойника мостового крана: архитектуру, модель данных, калибровку симуляции и оптимизацию рендеринга. Если появятся новые технические наработки, продолжим.
Часто задаваемые вопросы
В: Можно ли запустить цифровой двойник на слабом промышленном компьютере?
О: Да. Наша схема оптимизации рендеринга на периферии обеспечивает плавную работу на промышленном компьютере с i5-8500, встроенной графикой и 4 ГБ разделяемой видеопамяти. Ключевые технологии: снижение полигональности модели (с 500 000 до 50 000 полигонов), LOD-загрузка по уровням (переключение на 4 дистанциях), сжатие текстур (ASTC/KTX2, с 200 МБ до 45 МБ) и отсечение невидимых поверхностей (рендеринг только видимой части). Замеры до оптимизации — 12 FPS, после — 58 FPS, что полностью покрывает потребность мониторинга мостового крана на 30 FPS.
В: Не скажется ли снижение с 500 000 до 50 000 полигонов на качестве отображения?
О: Основной принцип — «приоритет плоскостей»: для больших плоских участков (стенка главной балки, накладки) применяется детектирование плоскостей с объединением, сохраняются контурные рёбра, а для криволинейных поверхностей и зон сварных швов степень упрощения снижается. На практике исходная и упрощённая модели накладываются друг на друга в полупрозрачном режиме для сравнения: отклонение контура менее 1 пикселя считается допустимым. При полноэкранном просмотре в браузере разница невооружённым глазом неразличима.
В: Зачем нужна оптимизация рендеринга на периферии для цифрового двойника мостового крана?
О: 3D-сцена цифрового двойника мостового крана работает не на высокопроизводительной рабочей станции, а на промышленном компьютере в цехе — i5-8500, встроенная графика, 4 ГБ разделяемой памяти. Неоптимизированная модель на 500 000 полигонов вместе с заводским зданием даёт лишь 12 FPS на такой конфигурации — настолько низкая плавность, что работать невозможно. Четыре оптимизации — снижение полигональности, LOD-загрузка, сжатие текстур и отсечение невидимых поверхностей — позволяют поднять частоту кадров до 58 FPS без потери визуального качества.