From 6a12dfdb2440adc4a5b4388a4eb684cc6c8f32d2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=98=D0=B3=D0=BE=D1=80=D1=8C=20=D0=91=D1=80=D1=8B=D0=BB?= =?UTF-8?q?=D1=91=D0=B2?= Date: Wed, 11 Jan 2023 16:09:51 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9E=D1=82=D0=B2=D1=91=D1=80=D1=81=D1=82?= =?UTF-8?q?=D0=B0=D0=BD=D0=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/technologies/cad-cg-pipeline.md | 106 +++++++++++---------------- 1 file changed, 44 insertions(+), 62 deletions(-) diff --git a/docs/technologies/cad-cg-pipeline.md b/docs/technologies/cad-cg-pipeline.md index 9d93428..cbbdc62 100644 --- a/docs/technologies/cad-cg-pipeline.md +++ b/docs/technologies/cad-cg-pipeline.md @@ -3,32 +3,37 @@ id: cad-cg-pipeline 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) -Все алгоритмы тесселяции схожи в том, что строят массив точек, иcходя из предела дискретизации. -Разделим алгоритмы по назначению: -### 1. Алгоритмы тесселяции для **Визуализации** +## Алгоритмы тесселяции (meshing) +Все алгоритмы тесселяции схожи в том, что строят массив точек, иcходя из предела дискретизации, однако отличаются друг от друга по назначению. + +### Алгоритмы тесселяции для **Визуализации** #### Алгоритм триангуляции Делоне с помощью алгоритма Ватсона Реализация алгоритма BRepMesh_IncrementalMesh является частью САПР библиотеки Open CASCADE Technology (OCCT). Это инкрементный алгоритм, который разбивает треугольники до тех пор, пока результат тдискретизации не будет удовлетворять критериям отклонения **допуска** отклонения по расстоянию и углу. Результат для допустимой замкнутой оболочки, может считаться твердотельным, поскольку алгоритм учитывает закрытость оболочки. Сетка подходит для визуализации, машинного обучения, симуляции машин и механизмов и для многих алгоритмов с контролируемой точностью. Подробнее в статье [OCCT User Guides](https://dev.opencascade.org/doc/overview/html/occt_user_guides__mesh.html) -### 2. Алгоритмы тесселяции для **Метода Конечных Элементов** (FEM) -*Приведем несколько следующих алгоритмов схожих по назначению, это, в основном, механика твёрдого деформируемого тела, и подобные исследования для материалов объемов тел, которые расчитываются FEM методами.* +### Алгоритмы тесселяции для **Метода Конечных Элементов** (FEM) +Применяются для расчёта механики твёрдого деформируемого тела и других исследований, где используются FEM-методы. #### Алгоритм Netgen Netgen использует несколько параметров, включая максимальный и минимальный размеры элементов, степень детализации сетки, количество шагов оптимизации и т.д. Netgen в основном работает в 3D. В зависимости от заданных параметров он может изготавливать элементы с размерами, адаптированными к локальным кривизнам - большими на участках плоской поверхности и меньшими на гнутых участках. Как только сетка построена для ребер и граней, Netgen выполняет дополнительные итерации для упрощения сетки. Установка этого параметра в 0 отключает упрощение. Netgen в целом медленнее, чем, например, Gmsh, и более чувствителен к качеству входных моделей. @@ -39,19 +44,10 @@ Gmsh работает в 3D и делает 4 прохода: анализ ге Подробнее на сайте проекта [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: @@ -67,56 +63,42 @@ Gmsh работает в 3D и делает 4 прохода: анализ ге ![](img/O3.jpg "тесселяция с малым допуском отклонения символа О шрифта Arial") - минусом будет **повышенная ресурсоемкость** на этапе ретопологии (где она и будет снижена) -+ плюсом будет **предсказуемая точность** полигональной модели 3д ассета. ++ плюсом будет **предсказуемая точность** полигональной модели 3D ассета. Забегая вперед, посмотрим на следующий пример ретопологии: ![](img/O4.jpg "пример результата ретопологии с количеством полигонов нулевого уровеня тесселяции символа О шрифта Arial") На примере выше видно, что и при таком минимуме способ показывает свою состоятельность. Результат получился симметричнее, так как кривизна левой и правой стороны, если не близка, то очень похожа. То есть результат предсказуемый. -Для производственного 3д ассета нужно, конечно, выбирать уровень ретопологии с большим количеством полигонов, таким, чтобы обеспечить минимальное отклонение геометрии от САПР модели. +Для производственного 3D ассета нужно, конечно, выбирать уровень ретопологии с большим количеством полигонов, таким, чтобы обеспечить минимальное отклонение геометрии от САПР модели. **Вывод**. Проводить тесселяцию с минимальным допуском отклонения от истинной геометрии САПР модели, в ущерб ресурсоемкости. ## Рекомендации для инженера-конструктора по экспорту САПР моделей -Для реализации готовой САПР детали инженеру потребуется переносить модель детали между редакторами моделей. -Для хорошей практики при этом предлагается перед экспортом выполнить следующие требования. +Для реализации готовой САПР детали инженеру потребуется переносить модель детали между редакторами моделей. Для хорошей практики при этом предлагается перед экспортом выполнить следующие требования. -### Подготовка 3д модели детали -Требуется выбрать и подготовить целевую деталь для соответствия следующим требованиям: - -1. не может содержать несущие соединения или шарниры -Детали между шарнирами (соединениями) считаются как отдельные детали. -Самостоятельная, отделенная от родительских и дочерних элементов, деталь является понятным и законченным звеном механизма. -2. не может иметь взаимные или самопересекающиеся объемы -Отдельные элементы детали не должны проникать друг в друга. Деталь имеет понятные законченные элементы. -3. иметь все наружные элементы и исключить внутренние, которых не видно снаружи -Внутренние элементы не требуются для 3д симулятора и 3д визуализации, и их лучше совсем исключить из процесса экспорта. -4. иметь имя латиницей, без спецсимволов и без пробелов и быть в нижнем регистре -Нелатинские символы, спецсимволы и пробелы могут вызвать ошибку поиска объекта (файла) модели. -В Windows API имеется особенность - не отличать имена с буквами в верхнем и нижнем регистре, и в этом случае, как говориться, ССЗБ. -5. иметь нулевые трансформации -6. стоять в точке или плоскости симметрии -7. очевидная ось модели должна быть совмещена с одной из осей мира -8. стоять в центре мира, в нуле -Как вариант допускается выполнить предварительный экспорт модели в STEP для запекания истории и обнуления трансформаций. -Отцентрированная модель в 0-й позиции обеспечивает, как минимум, единообразие каталога моделей и, как максимум, возможность ее предсказуемой автоматизированной сборки с другими моделями. В этом случае будет точно известно где появится модель. Модели, не размещенные в начале координат, могут сливаться со сценой, и их будет трудно (или невозможно) найти в зависимости от их импортированного положения. +### Требования к деталям для экспорта +1. Не содержит несущие соединения или шарниры. Детали между шарнирами (соединениями) считаются как отдельные детали. Самостоятельная, отделенная от родительских и дочерних элементов, деталь является понятным и законченным звеном механизма. +2. Не может иметь взаимные или самопересекающиеся объемы. Отдельные элементы детали не должны проникать друг в друга. Деталь имеет понятные законченные элементы. +3. Иметь все наружные элементы и исключить внутренние, которых не видно снаружи. Внутренние элементы не требуются для 3D симулятора и 3D визуализации, и их лучше совсем исключить из процесса экспорта. +4. Иметь имя латиницей, без спецсимволов и без пробелов и быть в нижнем регистре. Нелатинские символы, спецсимволы и пробелы могут вызвать ошибку поиска объекта (файла) модели. В Windows API имеется особенность - не отличать имена с буквами в верхнем и нижнем регистре, и в этом случае, как говориться, ССЗБ. +5. Иметь нулевые трансформации +6. Стоять в точке или плоскости симметрии +7. Очевидная ось модели должна быть совмещена с одной из осей мира +8. Стоять в центре мира, в нуле. Допускается выполнять предварительный экспорт модели в STEP для запекания истории и обнуления трансформаций. Отцентрированная модель в 0-й позиции обеспечивает, как минимум, единообразие каталога моделей и, как максимум, возможность ее предсказуемой автоматизированной сборки с другими моделями. В этом случае будет точно известно где появится модель. Модели, не размещенные в начале координат, могут сливаться со сценой, и их будет трудно (или невозможно) найти в зависимости от их импортированного положения. ### Подготовка соединения -Для построения цельного механизма в 3д симуляторе требуется задать соединение(я): +Для построения цельного механизма в 3D симуляторе требуется задать соединение(я): +1. Задать **позицию** крепления или **ось** (точку) вращения шарнира **дочерней** детали +2. Задать степени свободы дочерней детали +3. Назвать полученный служебный объект используя имя целевой детали как суффикс -1. задать **позицию** крепления или **ось** (точку) вращения шарнира **дочерней** детали -2. задать степени свободы дочерней детали -3. назвать полученный служебный объект используя имя целевой детали как суффикс - -### Экспорт -Для экспорта требуется: - -1. выполнить экспорт детали в формат STEP -2. имя файла экспорта должно совпадать с именем детали -3. выполнить экспорт соединения в формат JSON -4. имя файла экспорта должно совпадать с именем соединения -5. экспорт должен производиться в отдельную директорию экспорта -6. директория экспорта должна иметь имя целевого механизма `+ cad` -7. все файлы экспорта всех деталей одного механизма должны находиться в директории экспорта +### Порядок экспорта +1. Выполнить экспорт детали в формат STEP +2. Имя файла экспорта должно совпадать с именем детали +3. Выполнить экспорт соединения в формат JSON +4. Имя файла экспорта должно совпадать с именем соединения +5. Экспорт должен производиться в отдельную директорию экспорта +6. Директория экспорта должна иметь имя целевого механизма `+ cad` +7. Все файлы экспорта всех деталей одного механизма должны находиться в директории экспорта