104 lines
15 KiB
Markdown
104 lines
15 KiB
Markdown
---
|
||
id: cad-cg-pipeline
|
||
title: 'Экспорт моделей из САПР'
|
||
---
|
||
|
||
## Основные методы описания трёхмерных объектов
|
||
|
||
### Полигональное моделирование
|
||
Описывает поверхность массивом точек (Mesh). При этом типе моделирования выбирается некий **предел** точек, поэтому невозможно избежать **изломов** криволинейной поверхности, создать **идеальную** ее плавность. Метод применяется для визуализации моделей на мониторе компьютера, что обусловлено эффективностью обработки Mesh с помощью видео-ускорителей. При визуализации полигональных моделей, их поверхность практически не изменяется (некоторое изменение будет в любом случае).
|
||
|
||
### САПР моделирование
|
||
Описывает поверхность математической функцией в случае Конструктивной блочной геометрии (Constructive Solid Geometry, CSG) или Граничным представлением (Boundary representation, BREP). При визуализация САПР моделей происходит автоматическая **тесселяция**, которая дискретизирует поверхность в сетку из треугольников, при этом нужно выбирать баланс между избыточной **ресурсоемкостью** на визуализацию, либо **точностью** визуализации.
|
||
|
||
## Процесс подготовки САПР моделей для экспорта
|
||
|
||
1. Тесселяция САПР модели.
|
||
2. Ретопология результата тесселяции модели.
|
||
3. Физические свойства материала результата ретопологии модели (шейдинг).
|
||
4. Текстурирование физического материала результата шейдинга модели.
|
||
5. Запекание растровых текстур физического материала результата текстурирования модели.
|
||
6. В результате получается **3D ассет** - полигональная модель с материалом + набор текстур.
|
||
|
||
Качественный 3D ассет имеет хороший баланс между точностью геометрии и реcурсоёмкостью. То есть, хочется точность геометрии иметь выше, а ресурсоемкость - ниже.
|
||
|
||
## Алгоритмы тесселяции (meshing)
|
||
Все алгоритмы тесселяции схожи в том, что строят массив точек, иcходя из предела дискретизации, однако отличаются друг от друга по назначению.
|
||
|
||
### Алгоритмы тесселяции для **Визуализации**
|
||
#### Алгоритм триангуляции Делоне с помощью алгоритма Ватсона
|
||
Реализация алгоритма BRepMesh_IncrementalMesh является частью САПР библиотеки Open CASCADE Technology (OCCT). Это инкрементный алгоритм, который разбивает треугольники до тех пор, пока результат тдискретизации не будет удовлетворять критериям отклонения **допуска** отклонения по расстоянию и углу. Результат для допустимой замкнутой оболочки, может считаться твердотельным, поскольку алгоритм учитывает закрытость оболочки.
|
||
Сетка подходит для визуализации, машинного обучения, симуляции машин и механизмов и для многих алгоритмов с контролируемой точностью.
|
||
|
||
Подробнее в статье [OCCT User Guides](https://dev.opencascade.org/doc/overview/html/occt_user_guides__mesh.html)
|
||
|
||
### Алгоритмы тесселяции для **Метода Конечных Элементов** (FEM)
|
||
Применяются для расчёта механики твёрдого деформируемого тела и других исследований, где используются FEM-методы.
|
||
#### Алгоритм Netgen
|
||
Netgen использует несколько параметров, включая максимальный и минимальный размеры элементов, степень детализации сетки, количество шагов оптимизации и т.д. Netgen в основном работает в 3D. В зависимости от заданных параметров он может изготавливать элементы с размерами, адаптированными к локальным кривизнам - большими на участках плоской поверхности и меньшими на гнутых участках. Как только сетка построена для ребер и граней, Netgen выполняет дополнительные итерации для упрощения сетки. Установка этого параметра в 0 отключает упрощение. Netgen в целом медленнее, чем, например, Gmsh, и более чувствителен к качеству входных моделей.
|
||
|
||
Подробнее на сайте проекта [ngsolve.org](https://ngsolve.org/)
|
||
|
||
#### Алгоритм Gmsh
|
||
Gmsh работает в 3D и делает 4 прохода: анализ геометрии, анализ сетки, тесселяция, постобработка. Gmsh использует упомянутую выше OCCT для функций конструктивной геометрии и взаимодействует с дополнительной внешней сеткой и библиотеками адаптации сетки Netgen и Mmg3d для упрощения на этапе постобработки.
|
||
|
||
Подробнее на сайте проекта [gmsh.info](https://gmsh.info/)
|
||
|
||
|
||
## Выбор алгоритма тесселяции
|
||
|
||
Основываясь на упомянутой выше статье [Алгоритмы тесселяции моделей САПР](https://dev.opencascade.org/doc/overview/html/occt_user_guides__mesh.html) для экспорта виртуальные среды, симуляторы и прочих целей визуального характера целесообразно выбирать **Алгоритм триангуляции Делоне с помощью алгоритма Ватсона** в виде его реализации `BRepMesh_IncrementalMesh` из Геометрического ядра OpenCascade.
|
||
|
||
### Обход недостаточной предсказуемости алгоритмов тесселяции при высоких отклонениях
|
||
Для наглядного примера возьмем символ "O" шрифта Arial:
|
||
|
||

|
||
|
||
Доведем ситуацию до абсурда, чтоб было нагляднее, - выставим нулевой уровень тесселяции контура:
|
||
|
||

|
||
|
||
Мы знаем этот символ, он должен быть симметричным, а сейчас мы видим что он симметричен только на высоких уровнях тесселяции. Это происходит вледствие **разного расстояния** и **разной кривизны** между ключевыми точками. И вообщем не возможно добиваться на производственных моделях равномерности расстояния и кривизны между точками. Поэтому мы предлагаем следующий способ - проводить тесселяцию с минимальным допуском отклонения от истинной геометрии САПР модели, в ущерб ресурсоемкости.
|
||
|
||

|
||
|
||
- минусом будет **повышенная ресурсоемкость** на этапе ретопологии (где она и будет снижена)
|
||
+ плюсом будет **предсказуемая точность** полигональной модели 3D ассета.
|
||
|
||
Забегая вперед, посмотрим на следующий пример ретопологии:
|
||
|
||

|
||
|
||
На примере выше видно, что и при таком минимуме способ показывает свою состоятельность. Результат получился симметричнее, так как кривизна левой и правой стороны, если не близка, то очень похожа. То есть результат предсказуемый.
|
||
Для производственного 3D ассета нужно, конечно, выбирать уровень ретопологии с большим количеством полигонов, таким, чтобы обеспечить минимальное отклонение геометрии от САПР модели.
|
||
|
||
**Вывод**. Проводить тесселяцию с минимальным допуском отклонения от истинной геометрии САПР модели, в ущерб ресурсоемкости.
|
||
|
||
## Рекомендации для инженера-конструктора по экспорту САПР моделей
|
||
|
||
Для реализации готовой САПР детали инженеру потребуется переносить модель детали между редакторами моделей. Для хорошей практики при этом предлагается перед экспортом выполнить следующие требования.
|
||
|
||
### Требования к деталям для экспорта
|
||
1. Не содержит несущие соединения или шарниры. Детали между шарнирами (соединениями) считаются как отдельные детали. Самостоятельная, отделенная от родительских и дочерних элементов, деталь является понятным и законченным звеном механизма.
|
||
2. Не может иметь взаимные или самопересекающиеся объемы. Отдельные элементы детали не должны проникать друг в друга. Деталь имеет понятные законченные элементы.
|
||
3. Иметь все наружные элементы и исключить внутренние, которых не видно снаружи. Внутренние элементы не требуются для 3D симулятора и 3D визуализации, и их лучше совсем исключить из процесса экспорта.
|
||
4. Иметь имя латиницей, без спецсимволов и без пробелов и быть в нижнем регистре. Нелатинские символы, спецсимволы и пробелы могут вызвать ошибку поиска объекта (файла) модели. В Windows API имеется особенность - не отличать имена с буквами в верхнем и нижнем регистре, и в этом случае, как говориться, ССЗБ.
|
||
5. Иметь нулевые трансформации
|
||
6. Стоять в точке или плоскости симметрии
|
||
7. Очевидная ось модели должна быть совмещена с одной из осей мира
|
||
8. Стоять в центре мира, в нуле. Допускается выполнять предварительный экспорт модели в STEP для запекания истории и обнуления трансформаций. Отцентрированная модель в 0-й позиции обеспечивает, как минимум, единообразие каталога моделей и, как максимум, возможность ее предсказуемой автоматизированной сборки с другими моделями. В этом случае будет точно известно где появится модель. Модели, не размещенные в начале координат, могут сливаться со сценой, и их будет трудно (или невозможно) найти в зависимости от их импортированного положения.
|
||
|
||
### Подготовка соединения
|
||
Для построения цельного механизма в 3D симуляторе требуется задать соединение(я):
|
||
1. Задать **позицию** крепления или **ось** (точку) вращения шарнира **дочерней** детали
|
||
2. Задать степени свободы дочерней детали
|
||
3. Назвать полученный служебный объект используя имя целевой детали как суффикс
|
||
|
||
### Порядок экспорта
|
||
1. Выполнить экспорт детали в формат STEP
|
||
2. Имя файла экспорта должно совпадать с именем детали
|
||
3. Выполнить экспорт соединения в формат JSON
|
||
4. Имя файла экспорта должно совпадать с именем соединения
|
||
5. Экспорт должен производиться в отдельную директорию экспорта
|
||
6. Директория экспорта должна иметь имя целевого механизма `+ cad`
|
||
7. Все файлы экспорта всех деталей одного механизма должны находиться в директории экспорта
|