diff --git a/docs/technologies/cad-cg-pipeline.md b/docs/technologies/cad-cg-pipeline.md index 04ab1ae..d19c397 100644 --- a/docs/technologies/cad-cg-pipeline.md +++ b/docs/technologies/cad-cg-pipeline.md @@ -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") diff --git a/docs/technologies/img/tessellation_01.jpg b/docs/technologies/img/tessellation_01.jpg new file mode 100644 index 0000000..bd3b20e Binary files /dev/null and b/docs/technologies/img/tessellation_01.jpg differ diff --git a/docs/technologies/img/tessellation_02.jpg b/docs/technologies/img/tessellation_02.jpg new file mode 100644 index 0000000..f3f87f0 Binary files /dev/null and b/docs/technologies/img/tessellation_02.jpg differ diff --git a/docs/technologies/img/tessellation_03.jpg b/docs/technologies/img/tessellation_03.jpg new file mode 100644 index 0000000..315c018 Binary files /dev/null and b/docs/technologies/img/tessellation_03.jpg differ diff --git a/docs/technologies/img/tessellation_04.jpg b/docs/technologies/img/tessellation_04.jpg new file mode 100644 index 0000000..613b5f1 Binary files /dev/null and b/docs/technologies/img/tessellation_04.jpg differ diff --git a/docs/technologies/img/tessellation_05.jpg b/docs/technologies/img/tessellation_05.jpg new file mode 100644 index 0000000..2cc86e9 Binary files /dev/null and b/docs/technologies/img/tessellation_05.jpg differ diff --git a/docs/technologies/img/tessellation_06.jpg b/docs/technologies/img/tessellation_06.jpg new file mode 100644 index 0000000..6d8a158 Binary files /dev/null and b/docs/technologies/img/tessellation_06.jpg differ diff --git a/docs/technologies/img/tessellation_07.jpg b/docs/technologies/img/tessellation_07.jpg new file mode 100644 index 0000000..73e4e71 Binary files /dev/null and b/docs/technologies/img/tessellation_07.jpg differ