cad-cg-pipeline_rev1: added rationale for the choice of algorithm and its choice option

This commit is contained in:
brothermechanic 2023-06-30 20:17:41 +03:00
parent 03e4c509b4
commit 331e869721
No known key found for this signature in database
GPG key ID: BFB3FB14288FAC5E
8 changed files with 26 additions and 4 deletions

View file

@ -25,35 +25,57 @@ title: 'Экспорт для технологии компьютерной гр
Качественный 3D ассет имеет хороший баланс между точностью геометрии и реcурсоёмкостью. То есть, хочется точность геометрии иметь выше, а ресурсоемкость - ниже.
## 1. Тесселяция САПР модели
Наш технологический процесс использует графический редактор FreeCAD с САПР ядром на библиотеке Open CASCADE Technology (OCCT) и его аппаратно-программный интерфейс на ЯП Python.
### Виды алгоритмов тесселяции
Все алгоритмы тесселяции схожи в том, что строят массив точек, иcходя из предела дискретизации, однако отличаются друг от друга по назначению.
![](img/tessellation_01.jpg "Пример твердотельной детали (составные поверхности состоят из многоугольников и кривых)")
### Алгоритмы тесселяции для **Визуализации**
#### Алгоритм триангуляции Делоне с помощью алгоритма Ватсона
Реализация алгоритма BRepMesh_IncrementalMesh является частью САПР библиотеки Open CASCADE Technology (OCCT). Это инкрементный алгоритм, который разбивает треугольники до тех пор, пока результат тдискретизации не будет удовлетворять критериям отклонения **допуска** отклонения по расстоянию и углу. Результат для допустимой замкнутой оболочки, может считаться твердотельным, поскольку алгоритм учитывает закрытость оболочки.
Реализация алгоритма BRepMesh_IncrementalMesh является частью САПР библиотеки OCCT. Это инкрементный алгоритм, который разбивает треугольники до тех пор, пока результат тдискретизации не будет удовлетворять критериям отклонения **допуска** отклонения по расстоянию и углу. Результат для допустимой замкнутой оболочки, может считаться твердотельным, поскольку алгоритм учитывает закрытость оболочки.
Сетка подходит для визуализации, машинного обучения, симуляции машин и механизмов и для многих алгоритмов с контролируемой точностью.
Подробнее в статье [OCCT User Guides](https://dev.opencascade.org/doc/overview/html/occt_user_guides__mesh.html)
![](img/tessellation_02.jpg "Результат алгоритма триангуляции Делоне с помощью алгоритма Ватсона")
![](img/tessellation_03.jpg "Результат алгоритма триангуляции Делоне с помощью алгоритма Ватсона")
Как можно наблюдать на изображениях выше, резульиирующая полигональная модель имеет сетку только с формообразующими ребрами и ребрами, обусловленными триангуляцией. Полигональная сетка не равномерная, но визуально ровная и **немятая**, такая сетка хорошо позволяет уменьшить количество вершин/граней сетки с минимальными изменениями формы.
### Алгоритмы тесселяции для **Метода Конечных Элементов** (FEM)
Применяются для расчёта механики твёрдого деформируемого тела и других исследований, где используются FEM-методы.
Применяются для расчёта механики твёрдого деформируемого тела и других исследований, где используются FEM-методы. Приведем примеры некоторых из них.
#### Алгоритм Netgen
Netgen использует несколько параметров, включая максимальный и минимальный размеры элементов, степень детализации сетки, количество шагов оптимизации и т.д. Netgen в основном работает в 3D. В зависимости от заданных параметров он может изготавливать элементы с размерами, адаптированными к локальным кривизнам - большими на участках плоской поверхности и меньшими на гнутых участках. Как только сетка построена для ребер и граней, Netgen выполняет дополнительные итерации для упрощения сетки. Установка этого параметра в 0 отключает упрощение. Netgen в целом медленнее, чем, например, Gmsh, и более чувствителен к качеству входных моделей.
Подробнее на сайте проекта [ngsolve.org](https://ngsolve.org/)
![](img/tessellation_04.jpg "Результат алгоритма триангуляции Netgen")
![](img/tessellation_05.jpg "Результат алгоритма триангуляции Netgen")
Этот алгоритм можно рассмотреть, как частный случай полигональной модели по методу конечных элементов.
Как можно наблюдать на изображениях выше, резульиирующая полигональная модель имеет сетку с равномерной дискретизацией, это применяется для случаев, когда модель требуется, например, изгибать или для проведения физических расчетов. Полигональная сетка визуально **мятая**, имеет избыточное количество вершин/граней, поэтому применение такого рода алгоритмов должно быть обосновано, для предупреждения перерасхода вычислительных ресурсов на процесс тесселяции.
#### Алгоритм Gmsh
Gmsh работает в 3D и делает 4 прохода: анализ геометрии, анализ сетки, тесселяция, постобработка. Gmsh использует упомянутую выше OCCT для функций конструктивной геометрии и взаимодействует с дополнительной внешней сеткой и библиотеками адаптации сетки Netgen и Mmg3d для упрощения на этапе постобработки.
Подробнее на сайте проекта [gmsh.info](https://gmsh.info/)
![](img/tessellation_06.jpg "Результат алгоритма триангуляции Gmsh")
![](img/tessellation_07.jpg "Результат алгоритма триангуляции Gmsh")
Результаты алгоритмов тесселяции по методу конечных элементов очень похожи.
Можно сказать, что данный пример отличается от предидущего только повышенной плотностью полигональной сетки. Это было сделано намеренно для уменьшения эффекта мятых поверхностей. Эффект получен, но ресурсов затрачено в разы больше. Повторюсь, что применение такого рода алгоритмов должно быть обосновано.
### Выбор алгоритма тесселяции
Основываясь на упомянутой выше статье [Алгоритмы тесселяции моделей САПР](https://dev.opencascade.org/doc/overview/html/occt_user_guides__mesh.html) для экспорта виртуальные среды, симуляторы и прочих целей визуального характера целесообразно выбирать **Алгоритм триангуляции Делоне с помощью алгоритма Ватсона** в виде его реализации `BRepMesh_IncrementalMesh` из Геометрического ядра OpenCascade.
Основываясь на описанных выше результатах тесселяции, для экспорта виртуальные среды, симуляторы и прочих целей визуального характера **рекомендуется** выбирать **алгоритм триангуляции Делоне с помощью алгоритма Ватсона** в виде его реализации `BRepMesh_IncrementalMesh` из OCCT.
Опционально допускается выбор любых альтернативных алгоритмов тесселяции, поддерживаемые в OCCT, для обоснованных случаев, либо при отрицательных результатах алгоритма триангуляции Делоне с помощью алгоритма Ватсона.
#### Обход недостаточной предсказуемости алгоритмов тесселяции при высоких отклонениях
#### Обход недостаточной предсказуемости алгоритма триангуляции Делоне с помощью алгоритма Ватсона при высоких отклонениях
Для наглядного примера возьмем символ "O" шрифта Arial:
![](img/O1.jpg "символ О шрифта Arial")

Binary file not shown.

After

Width:  |  Height:  |  Size: 120 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 244 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 73 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 310 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 74 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 378 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 74 KiB