8.5 KiB
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 описания сцены.