Описывает поверхность массивом точек (Mesh). При этом типе моделирования выбирается некий **предел** точек, поэтому невозможно избежать **изломов** криволинейной поверхности, создать **идеальную**ее плавность. Метод применяется для визуализации моделей на мониторе компьютера, что обусловлено эффективностью обработки Mesh с помощью видео-ускорителей. При визуализации полигональных моделей, их поверхность практически не изменяется (некоторое изменение будет в любом случае).
Описывает поверхность математической функцией в случае Конструктивной блочной геометрии (Constructive Solid Geometry, CSG) или Граничным представлением (Boundary representation, BREP). При визуализация САПР моделей происходит автоматическая **тесселяция**, которая дискретизирует поверхность в сетку из треугольников, при этом нужно выбирать баланс между избыточной **ресурсоемкостью** на визуализацию, либо **точностью** визуализации.
Качественный 3D ассет имеет хороший баланс между точностью геометрии и реcурсоёмкостью. То есть, хочется точность геометрии иметь выше, а ресурсоемкость - ниже.
Наш технологический процесс использует графический редактор FreeCAD с САПР ядром на библиотеке Open CASCADE Technology (OCCT) и его аппаратно-программный интерфейс на ЯП Python.
Реализация алгоритма BRepMesh_IncrementalMesh является частью САПР библиотеки OCCT. Это инкрементный алгоритм, который разбивает треугольники до тех пор, пока результат тдискретизации не будет удовлетворять критериям отклонения **допуска** отклонения по расстоянию и углу. Результат для допустимой замкнутой оболочки, может считаться твердотельным, поскольку алгоритм учитывает закрытость оболочки.


Как можно наблюдать на изображениях выше, резульиирующая полигональная модель имеет сетку только с формообразующими ребрами и ребрами, обусловленными триангуляцией. Полигональная сетка не равномерная, но визуально ровная и **немятая**, такая сетка хорошо позволяет уменьшить количество вершин/граней сетки с минимальными изменениями формы.
Netgen использует несколько параметров, включая максимальный и минимальный размеры элементов, степень детализации сетки, количество шагов оптимизации и т.д. Netgen в основном работает в 3D. В зависимости от заданных параметров он может изготавливать элементы с размерами, адаптированными к локальным кривизнам - большими на участках плоской поверхности и меньшими на гнутых участках. Как только сетка построена для ребер и граней, Netgen выполняет дополнительные итерации для упрощения сетки. Установка этого параметра в 0 отключает упрощение. Netgen в целом медленнее, чем, например, Gmsh, и более чувствителен к качеству входных моделей.
Подробнее на сайте проекта [ngsolve.org](https://ngsolve.org/)
Этот алгоритм можно рассмотреть, как частный случай полигональной модели по методу конечных элементов.
Как можно наблюдать на изображениях выше, резульиирующая полигональная модель имеет сетку с равномерной дискретизацией, это применяется для случаев, когда модель требуется, например, изгибать или для проведения физических расчетов. Полигональная сетка визуально **мятая**, имеет избыточное количество вершин/граней, поэтому применение такого рода алгоритмов должно быть обосновано, для предупреждения перерасхода вычислительных ресурсов на процесс тесселяции.
Gmsh работает в 3D и делает 4 прохода: анализ геометрии, анализ сетки, тесселяция, постобработка. Gmsh использует упомянутую выше OCCT для функций конструктивной геометрии и взаимодействует с дополнительной внешней сеткой и библиотеками адаптации сетки Netgen и Mmg3d для упрощения на этапе постобработки.
Подробнее на сайте проекта [gmsh.info](https://gmsh.info/)
Результаты алгоритмов тесселяции по методу конечных элементов очень похожи.
Можно сказать, что данный пример отличается от предидущего только повышенной плотностью полигональной сетки. Это было сделано намеренно для уменьшения эффекта мятых поверхностей. Эффект получен, но ресурсов затрачено в разы больше. Повторюсь, что применение такого рода алгоритмов должно быть обосновано.
Основываясь на описанных выше результатах тесселяции, для экспорта виртуальные среды, симуляторы и прочих целей визуального характера **рекомендуется** выбирать **алгоритм триангуляции Делоне с помощью алгоритма Ватсона** в виде его реализации `BRepMesh_IncrementalMesh` из OCCT.
Опционально допускается выбор любых альтернативных алгоритмов тесселяции, поддерживаемые в OCCT, для обоснованных случаев, либо при отрицательных результатах алгоритма триангуляции Делоне с помощью алгоритма Ватсона.
Этот символ должен быть симметричным, но на иллюстрации заметно, что он симметричен только на высоких уровнях тесселяции. Это происходит вследствие **разного расстояния** и **разной кривизны** между ключевыми точками. Добиваться на производственных моделях равномерности расстояния и кривизны между точками очень сложно, поэтому мы предлагаем следующий способ - проводить тесселяцию с минимальным допуском отклонения от истинной геометрии САПР модели в ущерб ресурсоёмкости.
На примере выше видно, что и при таком минимуме способ показывает свою состоятельность. Результат получился симметричнее, так как кривизна левой и правой стороны, если не близка, то очень похожа. То есть результат предсказуемый.
Для производственного 3D ассета нужно, конечно, выбирать уровень ретопологии с большим количеством полигонов, таким, чтобы обеспечить минимальное отклонение геометрии от САПР модели.
Выше было сказано про предсказуемость результата алгоритмов тесселяции мы указали, что целесообразно выгонять детализированные 3д объекты, в ущерб их оптимизации. В этой части будет рассказано как добиться хорошего качества 3д модели при высокой ее оптимизации.
Весь внутренний состав сборочной модели задействуется только для производственных целей.
Напротив, для целей компьютерной графики, в основном требуется получить только видимую оболочку 3д объекта

Методика состоит в том чтобы найти отличительную особенность внешних граней сборки от внутренних. В данном случае мы предлагаем использовать метод ретопологии OpenVDB.
OpenVDB — это программная библиотека с открытым исходным кодом для работы с разреженными объемными данными. Он предоставляет иерархическую структуру данных и связанные функции, помогающие вычислять объемные эффекты в приложениях компьютерной графики.
В общем случае процесс можно представить как закваска теста. Можно регулировать степень разбухания, эффектом этого становится слияние деталей, щелей, отверстий размерами менее, чем размер разбухания. В итоге получается монолитное "тесто" которое можно представить в качестве "вакуумной упаковки", которая проецируется на оригинальную поверхность корпуса сборочной модели. В конце идет перестроение поверхности по на заданный предел по количеству точек 3д модели.
Плюсы этого метода в том, что результат получается оптимизированным, качество модели хорошее. Минусы метода в том, что результат может вызвать проблемы на этапе 5. Запекание. Так же к минусам можно отнести точность поверхности, которая имеет ошибку до 10% от оригинальной поверхности.
Для получения максимальной оптимизации при максимальной аккуратности формы модели, рекомендуется выполнять процесс ретопологии вручную, пользуясь услугами 3д художников компьютерной графики.
В отличие от сборочной модели, нет проблемы со внутренними деталями, и процесс сводится к простому перестроение поверхности по на заданный предел по количеству точек 3д модели для компенсации задатка при теселяции.
На данном этапе предлагается для деталей применять FEM материалы, которые предназначены для описания физический свойств объекта, как типов (например: метал, пластик и др.) так и свойств (например: плотность, электропроводность и др.). Движки рендеринга разработанные для задач компьютерной графики, таких настроек не имеют, поэтому мы предлагаем назначать FEM материалы в САПР редакторе FreeCAD.
После экспорта из FreeCAD, наша технология предусматривает адаптацию FEM материала в 3д шейдер для рендеринга.
Как особенность нашей реализации, можно отметить "оплавление" острых граней объектов, как это обычно случается в реальной жизни - все острые грани либо обрабатываются, либо притупляются естественным путем, и никогда не бывают такими, как выглядят их производственные объекты в САПР редакторе. Этот момент мы считаем принципиальным.
Задачи машинного обучения и компьютерного зрения требуют от объекта не только 3д шейдер, но и фактуру, неоднородность поверхности, или рисунок. Это помогает алгоритмам распознавания объектов точнее выполнить свою задачу.
Мы предлагаем путь процедурной параметрической генерации фактуры. Для этого удобно использовать движок рендеринга Cycles в интерфейсе Blender или через его программный интерфейс.
Плюсы процедурной параметрической генерации в том, что фактура получается объекто-независимой, легко переносится и адаптируется под любые формы, требуя минимальных доработок или вовсе без них. В минус можно записать требования к квалификации художника по текстурам и относительный порог вхождения по сравнению с традиционной пиксельной графикой.
Для этого шага нам потребуется ранее заготовленные 3д модели после этапов тесселяции и ретопологии. Попарно. Суть метода в том, чтобы перенести все параметрические данные и особенности формы поверхности с оригинального объекта, объекта после тесселяции, (высокополигональный объект) на оптимизированный объект (низкополигональный объект).
Данный пункт обширен, и будет рассмотрен в качестве беглого обзора.
-Все кусочки развёртки должны быть в едином масштабе. Допускается обоснованная вариация масштаба для повышения эффективности использования площади развертки.
- Расстояние между кусочками должно быть обосновано размером целевой текстуры. Например, для текстуры 4096 пикселей это расстояние должно быть равно не менее 32 пикселя. Это обеспечит качественное отображение текстуры на объекте в любых условиях использования.
- Занимаемая кусочками площадь должна занимать не менее 50% от общей площади развертки.
Последние 3 текстуры являются скалярными (черно-белыми) величинами, поэтому их обычно упаковывают в 1 текстуру по RGB каналам. Это положительно сказывается на производительности в 3д движке симуляции, так как снижает количество обращений - на 2 меньше. Например для 10ти материалов будет уже экономия на 20 обращений!
Выполняется экспорт в один из универсальных 3д форматов обмена. 3д формат зависит от 3д движка. Как правило, в современных движках используется формат FBX. Также для задач физических симуляций могут применяться форматы DAE (очень близкий к FBX) или OBJ (старый формат, не рекомендуется использовать).
На изображении показана полигональная сетка CG (computer graphics) ассета. Можно видеть что неформообразующие детали существуют только на текстуре и фактически отсутствуют на геометрии.
Для реализации готовой САПР детали инженеру потребуется переносить модель детали между редакторами моделей. Для хорошей практики при этом предлагается перед экспортом выполнить следующие требования.
### Требования к деталям для экспорта
1.Не содержит несущие соединения или шарниры. Детали между шарнирами (соединениями) считаются как отдельные детали. Самостоятельная, отделенная от родительских и дочерних элементов, деталь является понятным и законченным звеном механизма.
2.Не может иметь взаимные или самопересекающиеся объемы. Отдельные элементы детали не должны проникать друг в друга. Деталь имеет понятные законченные элементы.
3. Иметь все наружные элементы и исключить внутренние, которых не видно снаружи. Внутренние элементы не требуются для 3D симулятора и 3D визуализации, и их лучше совсем исключить из процесса экспорта.
4. Иметь имя латиницей, без спецсимволов и без пробелов и быть в нижнем регистре. Нелатинские символы, спецсимволы и пробелы могут вызвать ошибку поиска объекта (файла) модели. В Windows API имеется особенность - не отличать имена с буквами в верхнем и нижнем регистре, и в этом случае, как говориться, ССЗБ.
5. Иметь нулевые трансформации
6. Стоять в точке или плоскости симметрии
7. Очевидная ось модели должна быть совмещена с одной из осей мира
8. Стоять в центре мира, в нуле. Допускается выполнять предварительный экспорт модели в STEP для запекания истории и обнуления трансформаций. Отцентрированная модель в 0-й позиции обеспечивает, как минимум, единообразие каталога моделей и, как максимум, возможность ее предсказуемой автоматизированной сборки с другими моделями. В этом случае будет точно известно где появится модель. Модели, не размещенные в начале координат, могут сливаться со сценой, и их будет трудно (или невозможно) найти в зависимости от их импортированного положения.
## Способы задания систем координат в CAD-системах
Задание вспомогательных систем координат является достаточно часто используемой операцией. Общие принципы их задания, в целом, одинаковы для CAD-систем, таких как Catia V5, Solidworks, FreeCAD, SiemensNX и т.д.
В большинстве случаев используется ортогональная трёхмерная декартова система координат. Однако, есть информация, что некоторые CAD'ы, такие как Inventor, позволяют использовать так же сферические и полярные системы координат. Отголоски этого в прочих системах видны, например, при построении отрезков, когда отрезок строится по углу наклона и длине.
В любой построенной модели существует глобальная система координат, которая создается автоматически. Никаких манипуляций сделать с ней невозможно. Пользователь имеет возможность создать любое количество вспомогательных СК по своему усмотрению.
Использование вспомогательных систем координат позволяет удобно ориентировать модель в глобальном пространстве. Если "мировой ноль" нельзя сдвинуть или уничтожить, то подобные операции с вспомогательными СК, напротив, достаточно удобны. Так же, благодаря вспомогательным СК возможно быстро сопрягать элементы в сборке, задавая, например, ключевые точки элементов креплений, отверстия или участки захвата. Подобный подход, например, используется в верстаке Assembly4 во FreeCAD, позволяя собирать конструкции без использования сложных солверов(solver, решатель), которые используются для расчета сборок в Assembly3 и прочих.
Способ задания систем координат в разных CAD отличается только конкретными интерфейсными решениями. Обобщённый способ таков:
1. Необходимо задать некую начальную точку. Ее возможно задать как координатно, так и с привязкой к существующим примитивам (центры окружностей или плоскостей, вершины граней, концы отрезков, точки пересечения отрезков и т.д.)
2. Нужно выбрать минимум два ортогональных направления. Третье направление строится автоматически по принципам право- или левосторонней системы координат (в зависимости от выбранных настроек пользователем). Выбрать данные направления можно различными путями, например, возможно выбрать ось цилиндрической поверхности, прямолинейную грань, нормаль к поверхности. Так же можно задать ось или отрезок собственноручно, как и обычный примитив. В том случае, если направления не выбирать, CAD может выбрать их по умолчанию. В таком случае они будут совпадать с направлениями глобальной СК
3. После задания направлений CAD достраивает недостающее направление и СК оказывается построенной.
Как выяснилось, на данный момент вспомогательные СК не сохраняются при экспорте в STP, IGS и STL-файлы. Официальный сайт Autodesk, например, заявляет, что экспорт пользовательских СК на данный момент невозможен. Официальное руководство Solidworks указывает, что есть возможность выбрать *активную* систему координат, которая при экспорте заменит собой глобальный ноль. Однако, SW позволяет экспортировать эскизные элементы, такие как окружности и кривые. Эти кривые будут существовать как отдельная геометрия и потенциально может быть использована как основа для прописывания локальных СК.
При этом глобальный ноль существует всегда. Поскольку STP-файл представляет собой текстовое и редактируемое описание геометрии детали, потенциально можно прописывать специальные примитивы (например, 3 ортогональных оси и точку), которые могут играть роль вспомогательных СК.