framework/cg
brothermechanic e1d6bd0b45 Merge branch '123-api-cg' into 'master'
Draft: CG Pipeline: add global readme

Closes #123

See merge request robossembler/framework!69
2023-12-21 08:38:48 +00:00
..
blender CG Pipelines: User interface refactor 2023-12-18 07:48:45 +00:00
freecad Add PDDL, 3D-assets & SDF-URDF generator from Blender Scene Config 2023-12-17 13:58:43 +00:00
img CG Pileline: add global readme 2023-12-08 17:26:06 +03:00
pipeline CG Pipelines: User interface refactor 2023-12-18 07:48:45 +00:00
utils Robossembler Framework: update readme files 2023-12-01 11:34:37 +03:00
__init__.py Интегрирован модуль импорта моделей из FreeCAD в Blender 2023-02-01 13:43:23 +00:00
README.md CG Pileline: add global readme 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 платформ):

  • Вытянутые полигоны.

    • Проблемы: вытянутые полигоны могут вызвать как эстетические, так и технологические артефакты:

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

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

    • Проблемы: те же, что и у вытянутых полигонов

    • Решение: слить близлежащие точки воедино (большое значение радиуса слияния точек может нарушить геометрию, мы применяем безопасное значение 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 описания сцены.