Antimony — САПР из параллельного мира +52


Среди трёхмерных САПР наиболее известны программы, реализующие два основных подхода к проектированию: прямое моделирование и параметрическое.

Кроме того, существуют процедурные САПР, которые позволяют моделировать посредством программирования. Такой подход снискал себе признание среди любителей программирования и проектирования устройств с открытыми кодом и конструкцией. Например, хорошо известен OpenSCAD, который здесь не раз упоминался.

Предлагаю посмотреть на еще одну необычную САПР под названием Antimony.

image
Рис. 1. Antimony — САПР из параллельного мира

Antimony — САПР с открытым исходным кодом, который предоставляет подход к твердотельному моделированию при помощи направленных ациклических графов.

Такой подход используется в различных пакетах для 3D визуализации, текстурирования и создания игровой графики, а для твердотельного моделирования такой подход применяется, наверное, впервые.

Сам автор Мэтт Китер описывает свое детище как «CAD из параллельной вселенной».
Antimony построен из трёх основных компонентов:

  • Фреймворк для движения данных по направленному ациклическому графу.
  • Геометрическое ядро для CSG (Constructive Solid Geometry) операций, использующее функциональное представление (F-Rep) твёрдых тел.
  • Библиотека примитивов и трансформаций «fab». Библиотека содержит как привычные операции вроде перемещения, масштабирования, поворота, булевы операции, так и более необычные для твердотельных САПР, такие как деформация притяжения, отталкивания, изгиба.

image
Рис. 2. Деформация отталкивания

Твердотельное моделирование в Antimony выполняется посредством соединения узлов графа.
Узел представляет собой какой-либо примитив или трансформацию.

Каждый узел имеет поля, значения в которые можно ввести вручную, задать как функцию от параметров другого узла, обращаясь к ним по имени узла и поля, и соединив узел с предыдущим.

image
Рис. 3. Передача значений посредством связи и через имя узла и параметра

Внутри каждый узел представляет собой скрипт на языке Python, который можно редактировать, а также можно создавать новые узлы со своими скриптами.

Связи внутри графа обеспечивают автоматическое распространение изменений.

image
Рис. 4. Скрипт узла «круг»

Принцип построения модели в общих чертах тот же что и в более привычных САПР: берём плоскую фигуру, применяем к ней операцию построения трёхмерного тела (или сразу берем трёхмерный примитив), затем комбинируем это тело с другими при помощи булевых операций или применяем операции перемещения и деформации.

Модели могут быть как однотельными так и многотельными, жесткую параметрическую связь Antimony не навязывает, покуда пользователь сам не задаст связи. Выбор плоских фигур невелик, но все они являются замкнутыми областями, так что к ним применимы те же логические операции что и к твёрдым телам.

Пользовательский интерфейс представлен двумя основными окнами: окном графов и
окном видового экрана (вьюпорта). Можно открыть дополнительное окно видового экрана с комплексом четырех проекций.

image
Рис. 5. Минимализм во всём

Меню операций можно вызвать щелчком правой кнопки мыши из любой точки окна графов и окна видового экрана.

Кроме вышеупомянутых способов изменения параметров узлов, возможно взаимодействовать с примитивами и операциями, таская их мышью за активные точки.

Так как автор программы работает в Formlabs, то он позаботился о возможности материализации полученных моделей. Поэтому Antimony поддерживает экспорт моделей в виде 2.5D растра (карты высот в формате PNG) и в виде моделей в формате STL для 3D-печати. Команда для экспорта — тоже узел графа.

image
Рис. 6. Результат экспорта в STL

И немного о недостатках:

  • Импорт моделей из других САПР отсутствует.
  • Невозможность задавать произвольный плоский контур в качестве эскиза для трёхмерного тела существенно ограничивает возможности моделирования.
  • Вопрос, как рационально делать фаски и скругления остается открытым.
  • Уровень стабильности проекта оценивается как бета-версия, что-то серьезное пытаться делать в Antimony пожалуй не стоит, но поиграть будет интересно.

Ожидая негодование инженеров-конструкторов, должен заметить, что такая САПР создана в первую очередь не в практических целях, а из личного спортивного или научного интереса автора. Понятно, что ни о каких чертежах здесь речь не идёт, так как Antimony разработан исключительно для моделирования трёхмерных тел.

Озвучу личное впечатление, что поиграть с моделированием в Antimony довольно необычно и интересно, а почти полное отсутствие элементов пользовательского интерфейса способствует погружению в процесс моделирования и приятному времяпрепровождению.

Название для своей необычный САПР автор выбрал не случайно. Antimony переводится как сурьма — вещество, сочетающее в себе свойства металлов и неметаллов, и расширяющееся при застывании расплава.

Интересно посмотреть программу в работе на скринкасте Мэтта Китера:


GitHub

Antimony написан на C++ и Python. В репозитории присутствуют инструкции по сборке из исходников для Linux и macOS, и готовые DMG образы.

Вы можете помочь и перевести немного средств на развитие сайта



Комментарии (28):

  1. dom3d
    /#19260155

    Как увидел слова САПР и CAD/CAM, так аж забегал по комнате от возбуждения.
    Моя любимая тема.

    • FadeToBlack
      /#19261191

      Тогда, надеюсь, вы прочитали мои статьи на эту тему )

      • dom3d
        /#19261315

        Спасибо, пошел читать.
        Я честно говоря, несколько дней назад глянул на те, что сверху, а ниже вижу еще Параметрическое моделирование в САПР SolveSpace
        Это тоже для меня вкусная тема.

  2. sah4ez32
    /#19260317

    Очень занимательная САПР.
    Было бы интересно посмотреть на работу со сборками. И перестроение сборок.
    Ну и да, чертежи в современных реалиях — это все ещё важно. Но сам подход — завораживает!

    • Marsikus
      /#19267461

      В этой программе таких понятий как деталь и сборка нету, есть просто тела. Всё же
      это экспериментальный проект, своего рода технологический демонстратор подхода.

      • sah4ez32
        /#19268059

        Ну сборка — это композиция тел. Поэтому сделать простую сборку я не думаю что будет проблематично.
        В целом такой экспериментальный подход из мира программирования к моделированию деталей выглядит крайне эффектно. Заставляет думать чуть-чуть больше над геометрией тела и позволяет ее визуализировать более наглядно геометрическое дерево.
        Думаю было было не плохо добавить такой вид отображения к "классическим" САПР.

  3. aliksumin
    /#19260387

    Такой подход используется в различных пакетах для 3D визуализации, текстурирования и создания игровой графики, а для твердотельного моделирования такой подход применяется, наверное, впервые.


    А как же Grasshopper, который появился еще примерно в 2007 году и используется в огромном количестве реальных проектов, да и других аналогов достаточно много (Сверчок, Dynamo...). Или речь именно о чётком направлении и последовательности операций «строка за строкой», как в Blueprint? Но визуально, на скриншотах, Antimony больше напоминает Grasshopper, чем Blueprint.

  4. gleb_kudr
    /#19260985

    Похоже это духовный наследник openscad'а?

    • FadeToBlack
      /#19261173

      Тут скорее упор на визуальные языки построения, что, на мой взгляд, позволит использовать такую программу не только программистам, но и инженерам без навыков работы с текстами программ.

  5. FadeToBlack
    /#19261167

    Давно слежу за этим проектом, читал статью автора программы, очень увлекательная вещь, однозначно достойная перевода.

  6. FadeToBlack
    /#19261183

    А еще очень интересно знать, что этот подход к моделированию построен на FRep — functional representation — функциональное представление. То есть это реально математически точное представление в отличие от NURBS B-Rep (граничного представления), используемого повсеместно в коммерческих САПР. Подход Signed Distance Fields (SDF) и методы геометрического моделирования описываются еще в древних советских книгах (товарищ Рвачёв писал про R-функции и их геометрические приложения). Если говорить о применении таких методов — то оно взрывает воображение, ибо современные видеокарты как раз таки легко могут делать огромное количество вычислений, а значит трассировка SDF будет очень быстрой в реальном времени(мой эксперимент с SDF — трассировка лучей, освещение, тени в реальном времени). Если говорить о применении — оно обширно. Всякие МРТ и КТ получают как раз такие данные, которые удобно представлять и обрабатывать в SDF. Облака точек и полигональный суп легко можно превращать в адекватные полигональные меши через SDF и ретесселяцию (cube marching). А уж для физического моделирования как полезны эти представления для задания граничных условий и решения задач аэродинамики, термодинамики, сопроматов (это вам не конечно-элементный анализ, это гладкое математически точное представление). Короче, тема очень крутая и я считаю, что на рынке САПР она до конца не раскрыта.

    • KwisatzHaderach
      /#19261249

      Houdini может с успехом быть такой САПР.)

      • FadeToBlack
        /#19261253

        Ну там только визуальные симуляции, ни о какой физической точности речи быть не не может.

        • KwisatzHaderach
          /#19261263

          Ничто не мешает с нуля собрать нужную вам физическую модель.

          • FadeToBlack
            /#19261303

            Ну можно и в ms paint создавать шедевры живописи. Можно и blender расширять до CAD. Можно обвешать плагинами 3d max и делать там физику. Один вопрос: с какой целью? Какое преимущество у этого странного хода?

            • KwisatzHaderach
              /#19261337

              Ну к чему юродствовать.В перечисленных вами программах есть работа с SDF+вся нужная математика нодами например для работы с вольюметриками+интерфейс для работы с opencl для кастомного кода?
              Хорошо что вы вспомнили про плагины, как что-то написанное за вас.
              В этом плане Гудини как 3d IDE от них выгодно отличается и опровергает «Ну там только визуальные симуляции, ни о какой физической точности речи быть не не может.»

              • FadeToBlack
                /#19261375

                Вся эта база есть в любом 3д движке, а самое сложное — это как раз таки реализовать преимущество SDF, создание моделей, симуляицию (физически точную). И тут от гудини остается только каркас. Если с блендером все понятно — он опенсорс, то гудини — это как бы не опен и не сорс, так что смысла не вижу завязываться на такую сторонюю программу, преимуществ это не даст.

                • KwisatzHaderach
                  /#19261391

                  Я бы посмотрел как сейчас в Блендере сесть и собрать по какому-нить пейперу такой сетап.
                  vimeo.com/213569167
                  В нём даже внятной работы с OpenVDB нет до сих пор.

                  • FadeToBlack
                    /#19261397

                    Да крутая программа, я не спорю. Но слишком специфична область применения. И блендер вовсе не для того, чтобы собирать такие сетапы. Можно использовать MS Word как редактор векторных изображений, в единичных случаях успешно, но в промышленных масштабах бессмысленно.

                    • KwisatzHaderach
                      /#19261423

                      Специфична ровно настолько насколько специфичны поставленные задачи.
                      И тут же на большой range таких задач никак не влияет, хотя о них вроде и речь и возможности как минимум быстрого прототипирования в огромном круге задач.
                      Конкретно в нашем контексте быстрая конвертация из вольюметрика в полигоны и обратно даже готовыми нативными нодами(не говоря что какой-нить свой кастомный мешер/ремешер собрать не сложная задача), нужная математика с представленными данными на любом этапе.
                      Всё в совокупности и превращает Гудини в удобный специфичный САПР, который даже сейчас удобнее и мощнее специализированного софта.
                      «Если с блендером все понятно — он опенсорс»+«блендер вовсе не для того, чтобы собирать такие сетапы», так к чему его было вообще вспоминать в контексте опенсорса, как это достоинство влияет на его нынешние возможности?

                      • FadeToBlack
                        /#19261571

                        Ну вы же понимаете, что я разработчик. И я смотрю на вещи под другим углом — с точки зрения разработки. Вот, скажем, приходят физики в «Гудини», начинают создавать свою симуляцию. А тут в неожиданном месте симуляция перестает вычисляться. В 10 км от солнца вычисляется, а в 200 км от солнца — нет. Курят мануалы, пишут в службу поддержки «Гудини». А там оказывается, что ради оптимизации какие-нибудь мелкие значения, не оказывающие реального воздействия на результирующее изображение, отбрасываются. Любые запросы на исправления этого бага будут посланы подальше во вселенную, либо отодвинуты по приоритету в дальний ящик. ОпенСорс — идем и правим. Вот и все. Вся разница.

                        • KwisatzHaderach
                          /#19261887

                          Для разработчика в Гудини есть HDK и с++.Помимо можно написать дубль нативного решения на python,vex или opencl с нужной вам точностью.
                          И поддержка у Сайдов наверное лучшая в индустрии.Вот у того же BF ждешь исправления или нужных фич годами.
                          Из разговоров я уже понял что вы если и ставили Гудини, то дальше иконок с полки дело не пошло, судя по фантазиям.
                          Если кого-то не устраивает отдельное родное решение в UE или Unity они лабают своё.Но не пилят же свой редактор.)

                          • FadeToBlack
                            /#19262825

                            Да ну можно сделать, кто же сомневается-то. Но кто реально этим будет заниматься? Ну сделает пара физиков-извращенцев какой-нибудь модуль на коленке ради спортивного интереса, сделает свои рассчеты и закинет эту идею в дальний ящик. А я как программист пойду (уже пошел) писать свой CAD, поскольку я понятия не имею кому нужна будет моя разработка, основанная на программе, где базовая лицензия стоит немалых (уверен) денег. Вот, скажем я захочу бесплатно раздавать свои модули. Но даже в этом случае у меня будет два с половиной пользователя. Ну не вижу я логики в такой реализации.

    • SHVV
      /#19261763

      На мой взгляд как раз понятно, почему такой подход не особо популярен в САПР. Он более ограничен, так как заточен на представление объёма, нежели поверхности. А в САПР как раз более важны поверхности и их фичи. Например, я не очень представляю, как смоделировать такой штукой кузов автомобиля, или обводы кораблей, самолётов и т.д. Сплайновые поверхности для этого больше подходят. А фаски, упомянутые в статье? С поверхностями всё просто: ребро — это функция пересечения поверхностей, которые мы можем вычислить с любой точностью, а по ней построить фаски. Более того, эти рёбра в дальнейшем используются для вычисления оптимальных траекторий ЧПУ станков, чтобы максимально точно передать их в металле. С SDF — это становится более сложной задачей. И, скорее всего, опять же потребует построения B-Rep как промежуточного представления. Спрашивается, а зачем тогда F-Rep, если можно сразу в B-Rep моделировать?

      А 3Д сканы, МРТ и прочее — это скорее воксельное представление. В ним да, можно прикрутить FRep, чтоб работать в том же виде. Да и для 3Д печати такое представление больше подходит.

      • FadeToBlack
        /#19262861

        На самом деле, такой штукой можно смоделировать что угодно. А сплайны — это всего лишь формула поверхности, FRep не ограничивает пользователя, можно и сплайны строить, да вообще любые тела с произвольными функциями поверхности. Надеюсь, для вас не будет открытием то, что в обычном САПР вы не можете точно построить винтовую поверхность (читай, резьбу). Это будет всего лишь аппроксимация с помощью NURBS. Уверен, фаски тоже не проблема, по крайней мере, точно снять фаску со всего объекта. Траектории для ЧПУ даже проще, чем с другими подходами, поскольку offset curve/surface это то, что с помощью SDF сделать как два пальца. В том то и дело, что в FRep можно делать все и даже проще, чем с BRep. Просто прогресс не пошел этим путем из-за того, что на заре индустрии САПР все же тяжеловато было вычислять и визуализировать FRep, но с современными видеокартами это не проблема.

        • orignal
          /#19267465

          Точную модель вы действительно построите, в том смысле, что всегда будет ответ на вопрос, лежит ли точка внутри или снаружи твердого тела с заданной точностью. Но этим всё и исчерпывается. Практической пользы от такой модели мало. Самой же теме F-rep уже несколько десятилетий и дальше академических исследований дело не пошло по вполне понятным причинам.

  7. gshamshurin
    /#19262061 / +1

    Автор программы умён
    1. Сделать графопостроитель
    2. Назвать словом CAD
    3. Записать себе в резюме: в одиночку разработал CAD-систему.

    Ожидая негодование инженеров-конструкторов, должен заметить, что такая САПР создана в первую очередь не в практических целях, а из личного спортивного или научного интереса автора. Понятно, что ни о каких чертежах здесь речь не идёт

    Я тут уже писал про то что CAD это Computer Aided Design.
    Претензий к автору программы не будет, назови он это «весёлая игра в CAD», «симулятор инженера-конструктора для программистов», «параметрический моделер» и.т.д.
    Настоящий CAD — это то, в чём настоящие инженеры-конструкторы делают настоящие изделия. Это — не CAD и никогда не будет настоящим CADом. Автор начал проектировать систему не с того места, с которого нужно, а с того, с которого умеет. То есть изначально, фундаментально не правильно.

    • kibizoidus
      /#19262433 / +1

      Программирование ради программирования, ну что вы. Это весело, тут автора можно понять…
      Но с другой стороны — без упора на чертежи и генерацию G-кода толку чуть меньше чем нет воообще.