117 lines
8.5 KiB
Markdown
117 lines
8.5 KiB
Markdown
![]() |
## CAD-модуль
|
|||
|
|
|||
|
Модуль реализован на API FreeCAD. Директория разработки `freecad`.
|
|||
|
|
|||
|
|
|||
|
## CG-модуль
|
|||
|
|
|||
|
Модуль реализован на API Blender. Директория разработки `blender`.
|
|||
|
|
|||
|
|
|||
|
Интерфейс между CAD-модулем и CG-модулем передает:
|
|||
|
- Имя детали. Это лейбл детали, имя заданное и читаемое человеком в CAD среде.
|
|||
|
- Тип детали. Тип может быть: твердотельным объектом, полигональным объектом, системой координат, элементом иерархии сброрки.
|
|||
|
- BREP формула (для твердотельных объектов).
|
|||
|
- Массив точек (для полигональных объектов).
|
|||
|
- Локальные трансформации объекта. Перемещение, вращение, масштаб.
|
|||
|
- Линейная иерархия объекта. Цепочка-список родитель-потомок.
|
|||
|
- Материал объекта и его свойства.
|
|||
|
|
|||
|
Интерфейс между CAD-модулем и CG-модулем может передавать данные:
|
|||
|
- В виде массива точек; процедура тесселяции (BREP -> массив точек) выполняется на API CAD-модуля.
|
|||
|
CAD-модуль имеет встроенные средства тесселяции.
|
|||
|
- В виде BREP формулы; процедура тесселяции (BREP -> массив точек) выполняется на АPI CG-модуля.
|
|||
|
CG-модуль использует OCCT/FreeCAD.
|
|||
|
|
|||
|
|
|||
|
### Передача 3д-моделей из CAD в CG.
|
|||
|
|
|||
|
Реализовано скриптами `cg/freecad/utils/freecad_to_json.py` `cg/blender/import_cad`.
|
|||
|
|
|||
|
Задачи по передаче:
|
|||
|
- Имени детали. Это лейбл детали, имя заданное и читаемое человеком в CAD среде.
|
|||
|
- Типа детали. Тип может быть: твердотельным объектом, полигональным объектом, системой координат, элементом иерархии сброрки.
|
|||
|
- BREP формулу (для твердотельных объектов).
|
|||
|
- Массива точек (для полигональных объектов), по результату тесселяции BREP объектов по заданным параметрам.
|
|||
|
- Локальные трансформации объекта. Перемещение, вращение, масштаб.
|
|||
|
- Линейную иерархия объекта. Цепочка-список родитель-потомок.
|
|||
|
- Данных материала объекта и его свойства в PBR представление.
|
|||
|
|
|||
|
Проблемы и решения процедуры тесселяции (для всех API платформ):
|
|||
|
- Вытянутые полигоны.
|
|||
|
|
|||
|

|
|||
|
|
|||
|
- Проблемы: вытянутые полигоны могут вызвать как эстетические, так и технологические артефакты:
|
|||
|
- артефакт затенения меша, артефакт при запекании текстуры, мерцание;
|
|||
|
- заедание фрезы, путь которой прерываеться на каждой грани (фреза может перепрыгнуть или пропустить участок), вплоть до порчи заготовки и поломки фрезы.
|
|||
|
|
|||
|
- Решение: увеличить уровень детализации при тесселяции и впоследствие оптимизировать меш до исходного уровня на этапе ретопологии.
|
|||
|
|
|||
|

|
|||
|
|
|||
|
- Полигоны с площадью, стремящейся к нулю.
|
|||
|
|
|||
|

|
|||
|
|
|||
|
- Проблемы: те же, что и у вытянутых полигонов
|
|||
|
|
|||
|
- Решение: слить близлежащие точки воедино (большое значение радиуса слияния точек может нарушить геометрию, мы применяем безопасное значение 0.01 мм)
|
|||
|
|
|||
|
- Тонкие (острые) элементы.
|
|||
|
|
|||
|

|
|||
|
|
|||
|
- Проблемы: вытянутые полигоны могут вызвать как эстетические, так и технологические артефакты:
|
|||
|
- артефакты при слиянии точек (называемые non-manifold);
|
|||
|
- артефакты при запекании текстур, если тонкий элемент меньше допуска запекания;
|
|||
|
- низкая прочтость и поломка заготовки при производстве.
|
|||
|
|
|||
|
- Решение: избегать тонких элементов при проектировании, делать элементы отдельными составными частями, возможно из другого, более прочного материала.
|
|||
|
|
|||
|
- Вывернутые наизнанку полигоны.
|
|||
|
|
|||
|

|
|||
|
|
|||
|
- Проблемы: вывернутые наизнанку полигоны нарушают твердотельность детали
|
|||
|
|
|||
|
- Решение: пересчитать нормали полигонов.
|
|||
|
|
|||
|
- Разрывы поверхностей.
|
|||
|
|
|||
|
Отсутствие отдельных полигонов, дырки. Так же визуально артефакт может быть незаметен у близко расположенных точек полигона. Полигон может быть отдельным куском поверхности.
|
|||
|
|
|||
|
- Проблемы: те же, что и у полигонов с площадью, стремящейся к нулю.
|
|||
|
|
|||
|
- Решение: то же, что и у полигонов с площадью, стремящейся к нулю.
|
|||
|
|
|||
|
|
|||
|
### Полигональное моделирование/преобразование меш объектов.
|
|||
|
|
|||
|
Реализовано скриптами `cg/blender/processing`, для решения задач:
|
|||
|
- перестроение иерархии сцены по данным разметки FreeCAD сцены (LCS точек) `cg/blender/processing/restruct_hierarchy_by_lcs.py`,
|
|||
|
- группировка жестко собранных деталей в группы `cg/blender/processing/highpoly_setup.py`,
|
|||
|
- объединение групп в монолитные модели для экспорта в Gazebo `cg/blender/processing/midpoly_setup.py`,
|
|||
|
- генерация оптимизированных моделей `cg/blender/processing/lowpoly_setup.py`,
|
|||
|
- развертка оптимизированных моделей `cg/blender/processing/uv_setup.py`.
|
|||
|
|
|||
|
|
|||
|
### Запекание текстуры меш объектов.
|
|||
|
|
|||
|
Реализовано скриптами `cg/blender/texturing`, для решения задач:
|
|||
|
- подготовка очереди процесса запекания текстур `cg/blender/texturing/bake_submitter.py`,
|
|||
|
- обработка запеченных текстур `cg/blender/texturing/composing.py`,
|
|||
|
- сборка CG ассетов из объектов и текстур `cg/blender/texturing/shading.py`.
|
|||
|
|
|||
|
|
|||
|
### Экспорт полигональных объектов с текстурами в универсальные форматы.
|
|||
|
|
|||
|
Реализовано скриптами `cg/blender/export`, для решения задач экспорта в форматы: fbx, dae, stl, ply (и др. поддерживаемых API Blender).
|
|||
|
|
|||
|
|
|||
|
### Аддоны для прикладного использования.
|
|||
|
|
|||
|
Реализовано скриптами `cg/blender/scripts`
|
|||
|
- BakeWrangler - аддон запекания текстур,
|
|||
|
- Robossembler - аддон для генерации JSON описания сцены.
|