cad-cg-pipeline_rev1: added rationale for the choice of algorithm and its choice option
|
@ -25,35 +25,57 @@ title: 'Экспорт для технологии компьютерной гр
|
|||
Качественный 3D ассет имеет хороший баланс между точностью геометрии и реcурсоёмкостью. То есть, хочется точность геометрии иметь выше, а ресурсоемкость - ниже.
|
||||
|
||||
## 1. Тесселяция САПР модели
|
||||
|
||||
Наш технологический процесс использует графический редактор FreeCAD с САПР ядром на библиотеке Open CASCADE Technology (OCCT) и его аппаратно-программный интерфейс на ЯП Python.
|
||||
|
||||
### Виды алгоритмов тесселяции
|
||||
Все алгоритмы тесселяции схожи в том, что строят массив точек, иcходя из предела дискретизации, однако отличаются друг от друга по назначению.
|
||||
|
||||
")
|
||||
|
||||
### Алгоритмы тесселяции для **Визуализации**
|
||||
#### Алгоритм триангуляции Делоне с помощью алгоритма Ватсона
|
||||
Реализация алгоритма BRepMesh_IncrementalMesh является частью САПР библиотеки Open CASCADE Technology (OCCT). Это инкрементный алгоритм, который разбивает треугольники до тех пор, пока результат тдискретизации не будет удовлетворять критериям отклонения **допуска** отклонения по расстоянию и углу. Результат для допустимой замкнутой оболочки, может считаться твердотельным, поскольку алгоритм учитывает закрытость оболочки.
|
||||
Реализация алгоритма BRepMesh_IncrementalMesh является частью САПР библиотеки OCCT. Это инкрементный алгоритм, который разбивает треугольники до тех пор, пока результат тдискретизации не будет удовлетворять критериям отклонения **допуска** отклонения по расстоянию и углу. Результат для допустимой замкнутой оболочки, может считаться твердотельным, поскольку алгоритм учитывает закрытость оболочки.
|
||||
Сетка подходит для визуализации, машинного обучения, симуляции машин и механизмов и для многих алгоритмов с контролируемой точностью.
|
||||
|
||||
Подробнее в статье [OCCT User Guides](https://dev.opencascade.org/doc/overview/html/occt_user_guides__mesh.html)
|
||||
|
||||

|
||||

|
||||
|
||||
Как можно наблюдать на изображениях выше, резульиирующая полигональная модель имеет сетку только с формообразующими ребрами и ребрами, обусловленными триангуляцией. Полигональная сетка не равномерная, но визуально ровная и **немятая**, такая сетка хорошо позволяет уменьшить количество вершин/граней сетки с минимальными изменениями формы.
|
||||
|
||||
### Алгоритмы тесселяции для **Метода Конечных Элементов** (FEM)
|
||||
Применяются для расчёта механики твёрдого деформируемого тела и других исследований, где используются 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.
|
||||
Основываясь на описанных выше результатах тесселяции, для экспорта виртуальные среды, симуляторы и прочих целей визуального характера **рекомендуется** выбирать **алгоритм триангуляции Делоне с помощью алгоритма Ватсона** в виде его реализации `BRepMesh_IncrementalMesh` из OCCT.
|
||||
|
||||
Опционально допускается выбор любых альтернативных алгоритмов тесселяции, поддерживаемые в OCCT, для обоснованных случаев, либо при отрицательных результатах алгоритма триангуляции Делоне с помощью алгоритма Ватсона.
|
||||
|
||||
#### Обход недостаточной предсказуемости алгоритмов тесселяции при высоких отклонениях
|
||||
#### Обход недостаточной предсказуемости алгоритма триангуляции Делоне с помощью алгоритма Ватсона при высоких отклонениях
|
||||
Для наглядного примера возьмем символ "O" шрифта Arial:
|
||||
|
||||

|
||||
|
|
BIN
docs/technologies/img/tessellation_01.jpg
Normal file
After Width: | Height: | Size: 120 KiB |
BIN
docs/technologies/img/tessellation_02.jpg
Normal file
After Width: | Height: | Size: 244 KiB |
BIN
docs/technologies/img/tessellation_03.jpg
Normal file
After Width: | Height: | Size: 73 KiB |
BIN
docs/technologies/img/tessellation_04.jpg
Normal file
After Width: | Height: | Size: 310 KiB |
BIN
docs/technologies/img/tessellation_05.jpg
Normal file
After Width: | Height: | Size: 74 KiB |
BIN
docs/technologies/img/tessellation_06.jpg
Normal file
After Width: | Height: | Size: 378 KiB |
BIN
docs/technologies/img/tessellation_07.jpg
Normal file
After Width: | Height: | Size: 74 KiB |