Отвёрстано

This commit is contained in:
Игорь Брылёв 2023-01-11 16:09:51 +03:00
parent 2f3f5f768d
commit 6a12dfdb24

View file

@ -3,32 +3,37 @@ id: cad-cg-pipeline
title: 'Экспорт моделей из САПР' title: 'Экспорт моделей из САПР'
--- ---
## Предисловие ## Основные методы описания трёхмерных объектов
Основными разновидностями моделирования в 3D-графике являются:
- Полигональное моделирование, описывает поверхность массивом точек (Mesh); ### Полигональное моделирование
- САПР моделирование, описывает поверхность математической функцией (CAD). Описывает поверхность массивом точек (Mesh). При этом типе моделировании выбирается некий **предел** точек, поэтому невозможно избежать **изломов** криволинейной поверхности, создать **идеальную** ее плавность. Для визуализации моделей на мониторе компьютера необходимо, чтобы все 3D-модели были в Mesh виде, что обусловлено эффективностью их обработки с помощью видео-ускорителей. При визуализации полигональных моделей, их поверхность практически не изменяется (некоторое изменение будет в любом случае).
При **полигональном** моделировании выбирается некий **предел** точек, поэтому не возможно избежать **изломов** криволинейной поверхности, создать **идеальную** ее плавность. В данном случае САПР имеет преимущество. ### САПР моделирование
Описывает поверхность математической функцией в случае Конструктивной блочной геометрии (Constructive Solid Geometry, CSG) или Граничным представлением (Boundary representation, BREP). При визуализация САПР моделей происходит автоматическая **тесселяция**, которая дискретизирует поверхность в сетку из треугольников, при этом нужно выбирать баланс между избыточной **ресурсоемкостью** на визуализацию, либо **точностью** визуализации.
В то же время, для визуализации 3д графики на мониторе компьютера, необходимо чтоб все 3D-модели были в Mesh виде, в том числе и САПР, которые автоматически переводятся в полигональную сетку. В данном случае полигональное моделирование имеет преимущество. ## Процесс подготовки САПР моделей для экспорта
- При визуализации полигональных моделей, их поверхность практически не изменяется (некоторое изменение будет в любом случае). 1. Тесселяция САПР модели.
2. Ретопология результата тесселяции модели.
3. Физические свойства материала результата ретопологии модели (шейдинг).
4. Текстурирование физического материала результата шейдинга модели.
5. Запекание растровых текстур физического материала результата текстурирования модели.
6. В результате получается **3D ассет** - полигональная модель с материалом + набор текстур.
- При визуализация САПР моделей происходит автоматическая **тесселяция**, которая дискретизирует поверхность в сетку из треугольников, при этом нужно выбирать баланс между избыточной **ресурсоемкостью** на визуализацию, либо **точностью** визуализации. Качественный 3D ассет имеет хороший баланс между точностью геометрии и реcурсоёмкостью. То есть, хочется точность геометрии иметь выше, а ресурсоемкость - ниже.
## Примеры популярных алгоритмов тесселяции (meshing) ## Алгоритмы тесселяции (meshing)
Все алгоритмы тесселяции схожи в том, что строят массив точек, иcходя из предела дискретизации. Все алгоритмы тесселяции схожи в том, что строят массив точек, иcходя из предела дискретизации, однако отличаются друг от друга по назначению.
Разделим алгоритмы по назначению:
### 1. Алгоритмы тесселяции для **Визуализации** ### Алгоритмы тесселяции для **Визуализации**
#### Алгоритм триангуляции Делоне с помощью алгоритма Ватсона #### Алгоритм триангуляции Делоне с помощью алгоритма Ватсона
Реализация алгоритма BRepMesh_IncrementalMesh является частью САПР библиотеки Open CASCADE Technology (OCCT). Это инкрементный алгоритм, который разбивает треугольники до тех пор, пока результат тдискретизации не будет удовлетворять критериям отклонения **допуска** отклонения по расстоянию и углу. Результат для допустимой замкнутой оболочки, может считаться твердотельным, поскольку алгоритм учитывает закрытость оболочки. Реализация алгоритма BRepMesh_IncrementalMesh является частью САПР библиотеки Open CASCADE Technology (OCCT). Это инкрементный алгоритм, который разбивает треугольники до тех пор, пока результат тдискретизации не будет удовлетворять критериям отклонения **допуска** отклонения по расстоянию и углу. Результат для допустимой замкнутой оболочки, может считаться твердотельным, поскольку алгоритм учитывает закрытость оболочки.
Сетка подходит для визуализации, машинного обучения, симуляции машин и механизмов и для многих алгоритмов с контролируемой точностью. Сетка подходит для визуализации, машинного обучения, симуляции машин и механизмов и для многих алгоритмов с контролируемой точностью.
Подробнее в статье [OCCT User Guides](https://dev.opencascade.org/doc/overview/html/occt_user_guides__mesh.html) Подробнее в статье [OCCT User Guides](https://dev.opencascade.org/doc/overview/html/occt_user_guides__mesh.html)
### 2. Алгоритмы тесселяции для **Метода Конечных Элементов** (FEM) ### Алгоритмы тесселяции для **Метода Конечных Элементов** (FEM)
*Приведем несколько следующих алгоритмов схожих по назначению, это, в основном, механика твёрдого деформируемого тела, и подобные исследования для материалов объемов тел, которые расчитываются FEM методами.* Применяются для расчёта механики твёрдого деформируемого тела и других исследований, где используются FEM-методы.
#### Алгоритм Netgen #### Алгоритм Netgen
Netgen использует несколько параметров, включая максимальный и минимальный размеры элементов, степень детализации сетки, количество шагов оптимизации и т.д. Netgen в основном работает в 3D. В зависимости от заданных параметров он может изготавливать элементы с размерами, адаптированными к локальным кривизнам - большими на участках плоской поверхности и меньшими на гнутых участках. Как только сетка построена для ребер и граней, Netgen выполняет дополнительные итерации для упрощения сетки. Установка этого параметра в 0 отключает упрощение. Netgen в целом медленнее, чем, например, Gmsh, и более чувствителен к качеству входных моделей. Netgen использует несколько параметров, включая максимальный и минимальный размеры элементов, степень детализации сетки, количество шагов оптимизации и т.д. Netgen в основном работает в 3D. В зависимости от заданных параметров он может изготавливать элементы с размерами, адаптированными к локальным кривизнам - большими на участках плоской поверхности и меньшими на гнутых участках. Как только сетка построена для ребер и граней, Netgen выполняет дополнительные итерации для упрощения сетки. Установка этого параметра в 0 отключает упрощение. Netgen в целом медленнее, чем, например, Gmsh, и более чувствителен к качеству входных моделей.
@ -39,19 +44,10 @@ Gmsh работает в 3D и делает 4 прохода: анализ ге
Подробнее на сайте проекта [gmsh.info](https://gmsh.info/) Подробнее на сайте проекта [gmsh.info](https://gmsh.info/)
## Процесс подготовки САПР моделей в виртуальные среды, симуляторы
1. Тесселяция САПР модели.
2. Ретопология результата тесселяции модели.
3. Физические свойства материала результата ретопологии модели (шейдинг).
4. Текстурирование физического материала результата шейдинга модели.
5. Запекание растровых текстур физического материала результата текстурирования модели.
6. В результате получается **3D ассет** - полигональная модель с материалом + набор текстур.
Качественный 3D ассет имеет хороший баланс между точностью геометрии и реcурсоёмкостью. То есть, хочется точность геометрии иметь выше, а ресурсоемкость - ниже.
## Выбор алгоритма тесселяции ## Выбор алгоритма тесселяции
Основываясь на статье [Алгоритмы тесселяции моделей САПР](https://dev.opencascade.org/doc/overview/html/occt_user_guides__mesh.html) для виртуальных сред, симуляторов и прочих целей визуального характера выбираем **Алгоритм триангуляции Делоне с помощью алгоритма Ватсона** в виде его реализации BRepMesh_IncrementalMesh. Основываясь на упомянутой выше статье [Алгоритмы тесселяции моделей САПР](https://dev.opencascade.org/doc/overview/html/occt_user_guides__mesh.html) для экспорта виртуальные среды, симуляторы и прочих целей визуального характера целесообразно выбирать **Алгоритм триангуляции Делоне с помощью алгоритма Ватсона** в виде его реализации `BRepMesh_IncrementalMesh` из Геометрического ядра OpenCascade.
### Обход недостаточной предсказуемости алгоритмов тесселяции при высоких отклонениях ### Обход недостаточной предсказуемости алгоритмов тесселяции при высоких отклонениях
Для наглядного примера возьмем символ "O" шрифта Arial: Для наглядного примера возьмем символ "O" шрифта Arial:
@ -67,56 +63,42 @@ Gmsh работает в 3D и делает 4 прохода: анализ ге
![](img/O3.jpg "тесселяция с малым допуском отклонения символа О шрифта Arial") ![](img/O3.jpg "тесселяция с малым допуском отклонения символа О шрифта Arial")
- минусом будет **повышенная ресурсоемкость** на этапе ретопологии (где она и будет снижена) - минусом будет **повышенная ресурсоемкость** на этапе ретопологии (где она и будет снижена)
+ плюсом будет **предсказуемая точность** полигональной модели 3д ассета. + плюсом будет **предсказуемая точность** полигональной модели 3D ассета.
Забегая вперед, посмотрим на следующий пример ретопологии: Забегая вперед, посмотрим на следующий пример ретопологии:
![](img/O4.jpg "пример результата ретопологии с количеством полигонов нулевого уровеня тесселяции символа О шрифта Arial") ![](img/O4.jpg "пример результата ретопологии с количеством полигонов нулевого уровеня тесселяции символа О шрифта Arial")
На примере выше видно, что и при таком минимуме способ показывает свою состоятельность. Результат получился симметричнее, так как кривизна левой и правой стороны, если не близка, то очень похожа. То есть результат предсказуемый. На примере выше видно, что и при таком минимуме способ показывает свою состоятельность. Результат получился симметричнее, так как кривизна левой и правой стороны, если не близка, то очень похожа. То есть результат предсказуемый.
Для производственного 3д ассета нужно, конечно, выбирать уровень ретопологии с большим количеством полигонов, таким, чтобы обеспечить минимальное отклонение геометрии от САПР модели. Для производственного 3D ассета нужно, конечно, выбирать уровень ретопологии с большим количеством полигонов, таким, чтобы обеспечить минимальное отклонение геометрии от САПР модели.
**Вывод**. Проводить тесселяцию с минимальным допуском отклонения от истинной геометрии САПР модели, в ущерб ресурсоемкости. **Вывод**. Проводить тесселяцию с минимальным допуском отклонения от истинной геометрии САПР модели, в ущерб ресурсоемкости.
## Рекомендации для инженера-конструктора по экспорту САПР моделей ## Рекомендации для инженера-конструктора по экспорту САПР моделей
Для реализации готовой САПР детали инженеру потребуется переносить модель детали между редакторами моделей. Для реализации готовой САПР детали инженеру потребуется переносить модель детали между редакторами моделей. Для хорошей практики при этом предлагается перед экспортом выполнить следующие требования.
Для хорошей практики при этом предлагается перед экспортом выполнить следующие требования.
### Подготовка 3д модели детали ### Требования к деталям для экспорта
Требуется выбрать и подготовить целевую деталь для соответствия следующим требованиям: 1. Не содержит несущие соединения или шарниры. Детали между шарнирами (соединениями) считаются как отдельные детали. Самостоятельная, отделенная от родительских и дочерних элементов, деталь является понятным и законченным звеном механизма.
2. Не может иметь взаимные или самопересекающиеся объемы. Отдельные элементы детали не должны проникать друг в друга. Деталь имеет понятные законченные элементы.
1. не может содержать несущие соединения или шарниры 3. Иметь все наружные элементы и исключить внутренние, которых не видно снаружи. Внутренние элементы не требуются для 3D симулятора и 3D визуализации, и их лучше совсем исключить из процесса экспорта.
Детали между шарнирами (соединениями) считаются как отдельные детали. 4. Иметь имя латиницей, без спецсимволов и без пробелов и быть в нижнем регистре. Нелатинские символы, спецсимволы и пробелы могут вызвать ошибку поиска объекта (файла) модели. В Windows API имеется особенность - не отличать имена с буквами в верхнем и нижнем регистре, и в этом случае, как говориться, ССЗБ.
Самостоятельная, отделенная от родительских и дочерних элементов, деталь является понятным и законченным звеном механизма. 5. Иметь нулевые трансформации
2. не может иметь взаимные или самопересекающиеся объемы 6. Стоять в точке или плоскости симметрии
Отдельные элементы детали не должны проникать друг в друга. Деталь имеет понятные законченные элементы. 7. Очевидная ось модели должна быть совмещена с одной из осей мира
3. иметь все наружные элементы и исключить внутренние, которых не видно снаружи 8. Стоять в центре мира, в нуле. Допускается выполнять предварительный экспорт модели в STEP для запекания истории и обнуления трансформаций. Отцентрированная модель в 0-й позиции обеспечивает, как минимум, единообразие каталога моделей и, как максимум, возможность ее предсказуемой автоматизированной сборки с другими моделями. В этом случае будет точно известно где появится модель. Модели, не размещенные в начале координат, могут сливаться со сценой, и их будет трудно (или невозможно) найти в зависимости от их импортированного положения.
Внутренние элементы не требуются для 3д симулятора и 3д визуализации, и их лучше совсем исключить из процесса экспорта.
4. иметь имя латиницей, без спецсимволов и без пробелов и быть в нижнем регистре
Нелатинские символы, спецсимволы и пробелы могут вызвать ошибку поиска объекта (файла) модели.
В Windows API имеется особенность - не отличать имена с буквами в верхнем и нижнем регистре, и в этом случае, как говориться, ССЗБ.
5. иметь нулевые трансформации
6. стоять в точке или плоскости симметрии
7. очевидная ось модели должна быть совмещена с одной из осей мира
8. стоять в центре мира, в нуле
Как вариант допускается выполнить предварительный экспорт модели в STEP для запекания истории и обнуления трансформаций.
Отцентрированная модель в 0-й позиции обеспечивает, как минимум, единообразие каталога моделей и, как максимум, возможность ее предсказуемой автоматизированной сборки с другими моделями. В этом случае будет точно известно где появится модель. Модели, не размещенные в начале координат, могут сливаться со сценой, и их будет трудно (или невозможно) найти в зависимости от их импортированного положения.
### Подготовка соединения ### Подготовка соединения
Для построения цельного механизма в 3д симуляторе требуется задать соединение(я): Для построения цельного механизма в 3D симуляторе требуется задать соединение(я):
1. Задать **позицию** крепления или **ось** (точку) вращения шарнира **дочерней** детали
2. Задать степени свободы дочерней детали
3. Назвать полученный служебный объект используя имя целевой детали как суффикс
1. задать **позицию** крепления или **ось** (точку) вращения шарнира **дочерней** детали ### Порядок экспорта
2. задать степени свободы дочерней детали 1. Выполнить экспорт детали в формат STEP
3. назвать полученный служебный объект используя имя целевой детали как суффикс 2. Имя файла экспорта должно совпадать с именем детали
3. Выполнить экспорт соединения в формат JSON
### Экспорт 4. Имя файла экспорта должно совпадать с именем соединения
Для экспорта требуется: 5. Экспорт должен производиться в отдельную директорию экспорта
6. Директория экспорта должна иметь имя целевого механизма `+ cad`
1. выполнить экспорт детали в формат STEP 7. Все файлы экспорта всех деталей одного механизма должны находиться в директории экспорта
2. имя файла экспорта должно совпадать с именем детали
3. выполнить экспорт соединения в формат JSON
4. имя файла экспорта должно совпадать с именем соединения
5. экспорт должен производиться в отдельную директорию экспорта
6. директория экспорта должна иметь имя целевого механизма `+ cad`
7. все файлы экспорта всех деталей одного механизма должны находиться в директории экспорта