framework/cg/README.md

117 lines
8.5 KiB
Markdown
Raw Normal View History

2023-12-08 17:26:06 +03:00
## 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 платформ):
- Вытянутые полигоны.
![](img/cad-cg_01.jpg "Вытянутые полигоны")
- Проблемы: вытянутые полигоны могут вызвать как эстетические, так и технологические артефакты:
- артефакт затенения меша, артефакт при запекании текстуры, мерцание;
- заедание фрезы, путь которой прерываеться на каждой грани (фреза может перепрыгнуть или пропустить участок), вплоть до порчи заготовки и поломки фрезы.
- Решение: увеличить уровень детализации при тесселяции и впоследствие оптимизировать меш до исходного уровня на этапе ретопологии.
![](img/cad-cg_remesh.jpg "Проблема, Увеличение детализации, Ретопология")
- Полигоны с площадью, стремящейся к нулю.
![](img/cad-cg_02.jpg "Полигоны с площадью, стремящейся к нулю")
- Проблемы: те же, что и у вытянутых полигонов
- Решение: слить близлежащие точки воедино (большое значение радиуса слияния точек может нарушить геометрию, мы применяем безопасное значение 0.01 мм)
- Тонкие (острые) элементы.
![](img/cad-cg_03.jpg "Тонкие/острые элементы")
- Проблемы: вытянутые полигоны могут вызвать как эстетические, так и технологические артефакты:
- артефакты при слиянии точек (называемые non-manifold);
- артефакты при запекании текстур, если тонкий элемент меньше допуска запекания;
- низкая прочтость и поломка заготовки при производстве.
- Решение: избегать тонких элементов при проектировании, делать элементы отдельными составными частями, возможно из другого, более прочного материала.
- Вывернутые наизнанку полигоны.
![](img/cad-cg_04.jpg "Вывернутые наизнанку полигоны")
- Проблемы: вывернутые наизнанку полигоны нарушают твердотельность детали
- Решение: пересчитать нормали полигонов.
- Разрывы поверхностей.
Отсутствие отдельных полигонов, дырки. Так же визуально артефакт может быть незаметен у близко расположенных точек полигона. Полигон может быть отдельным куском поверхности.
- Проблемы: те же, что и у полигонов с площадью, стремящейся к нулю.
- Решение: то же, что и у полигонов с площадью, стремящейся к нулю.
### Полигональное моделирование/преобразование меш объектов.
Реализовано скриптами `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 описания сцены.