framework/cg/README.md
2023-12-08 17:26:06 +03:00

8.5 KiB
Raw Blame History

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