Введение
3D-визуализация — эффективный инструмент для представления решений по проектированию контейнерных терминалов клиентам, заинтересованным сторонам и проектным командам. Однако большая часть результатов проектирования создается в виде 2D-чертежей. Преобразование их в 3D-модель обычно требует значительного времени и специальных знаний в области компьютерной графики. В этой статье представлен метод автоматического создания 3D-модели терминала непосредственно из 2D-чертежа в формате DXF. Программное обеспечение позволяет пользователю классифицировать слои чертежа, как стандартные объекты контейнерного терминала, вычисляет 3D-геометрию для каждого типа объекта и интерактивно отображает результат на сайте с помощью Three.js [1]. Сгенерированную модель можно экспортировать в формат GLTF [2] для использования в презентациях, анимации или дальнейшего редактирования.
Описание алгоритма
Генеральный план контейнерного терминала обычно включает в себя несколько типов объектов: границы терминала, здания, контейнеры, оборудование, железнодорожные пути и транспортные маршруты. В большинстве случаев эти объекты размещаются на разных слоях чертежа. Однако названия слоев могут различаться от чертежа к чертежу. Поэтому первым шагом при создании 3D-модели является классификация слоев: каждый слой классифицируется пользователем как один из возможных стандартных объектов.
Следующий шаг — расчет параметров 3D-геометрии для каждого типа объекта, поскольку для каждого требуется свой подход.
Границы терминала редко имеют прямоугольную форму. Обычно они представляются в виде многоугольника сложной формы. Это означает, что для вычисления конечной поверхности необходимо триангулировать этот многоугольник (рис. 1). Треугольник является фундаментальным поверхностным примитивом в трехмерных рендерерах реального времени, поскольку любую многоугольную поверхность можно разложить на треугольники [3].

Для триангуляции многоугольника применяется алгоритм “ear clipping” [4]. Алгоритм перебирает вершины многоугольника. На каждом шаге группа из трех последовательных вершин проверяется как кандидат на “ухо”: средняя вершина должна быть выпуклой, и никакая другая вершина многоугольника не может лежать внутри образованного треугольника. Если оба условия выполнены, треугольник записывается, а средняя вершина удаляется из многоугольника. Процесс повторяется на уменьшенном многоугольнике до тех пор, пока не останется только один треугольник.
Результатом работы алгоритма является многомерный список вершин многоугольника. Каждый подсписок представляет собой треугольник, который необходимо отобразить на 3D-модели (рис. 2).

Контейнер можно представить в виде параллелепипеда длиной 6,06 м, шириной 2,44 м и высотой 2,6 м, разложенного на треугольники для визуализации. Однако визуализация отдельных контейнеров в масштабе склада требует значительных вычислительных ресурсов. Поэтому программное обеспечение визуализирует штабели контейнеров, а не отдельные контейнеры (рис. 3).

На рис. 4 представлен пример сгенерированной контейнерной площадки.

Архитектура зданий варьируется от проекта к проекту и от организации к организации. Поскольку архитектурный дизайн сильно варьируется, инструмент поддерживает как импорт существующих моделей зданий, так и генерацию простых параллелепипедов. Такого представления может быть достаточно на начальных этапах проекта или для целей маркетинга компании (рис. 5).

Для целей визуализации дороги и транспортные маршруты могут быть представлены в виде полилиний на поверхности. Линии также являются фундаментальным графическим примитивом в 3D-рендерах, изначально поддерживаемым WebGL без необходимости триангуляции [5]. На рис. 6 представлен пример дороги на поверхности.

Оборудование контейнерного терминала имеет множество деталей и сложную логику расчета габаритов. Поэтому для представления оборудования были разработаны специальные модели (рис. 7). Модели загружаются в рендерер Three.js в исходном виде.

Единственное требование для импорта модели — точка вставки оборудования на 2D-чертеже должна совпадать с началом координат соответствующей 3D-модели.
Программный интерфейс
Описанный алгоритм реализован в виде веб-инструмента, доступного на веб-сайте PortDesignLab. Для начала пользователь импортирует файл DXF через интерфейс создания проекта (рис. 8).

Программа анализирует DXF-файл и возвращает список слоев модели и их SVG-представление. При наведении курсора на слой модели пользователь выделяет элементы, связанные с этим слоем. Тип объекта выбирается из списка, расположенного за названием слоя модели (рис. 9).

На следующем шаге возвращается сгенерированная 3D-модель (рис. 10). Модель можно загрузить в формате GLTF.

Заключение
Описанное программное обеспечение значительно сокращает время, необходимое для создания 3D-модели контейнерного терминала из существующего DXF-чертежа. Оно может применяться на ранних этапах проектирования для внутреннего анализа проекта, на этапе концепции для презентаций клиентам и для подготовки имитационных моделей. В отличие от создания 3D-модели с нуля, инструмент не требует специальных знаний в области компьютерной графики — только правильно структурированный DXF-файл в качестве входных данных. Дальнейшие этапы разработки включают: генерацию 2D-поперечных сечений терминала для проектной документации и экспорт файлов в форматы, подходящие для BIM (в частности, IFC), для импорта в BIM-редакторы. Инструмент доступен по адресу: https://portdesigntoolkit.pro/model-generation/.
Ссылки
- Three.js – JavaScript-библиотека для 3D-моделирования. URL: https://threejs.org/
- glTF. Формат доставки 3D-моделей. URL: https://www.khronos.org/gltf/
- Ширли П., Маршнер С. Основы компьютерной графики. AK Peters/CRC Press, 2015.
- Элберли Д. Алгоритм обрезки уха. Триангуляция методом обрезки уха. URL: https://www.geometrictools.com/Documentation/TriangulationByEarClipping.pdf
- Спецификация WebGL 1.0. URL: https://www.khronos.org/registry/webgl/specs/latest/1.0/