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

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

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

    Похожие публикации

    Комментарии 33

      +1
      Как увидел слова САПР и CAD/CAM, так аж забегал по комнате от возбуждения.
      Моя любимая тема.
        +1
        Тогда, надеюсь, вы прочитали мои статьи на эту тему )
          0
          Спасибо, пошел читать.
          Я честно говоря, несколько дней назад глянул на те, что сверху, а ниже вижу еще Параметрическое моделирование в САПР SolveSpace
          Это тоже для меня вкусная тема.
        0

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

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

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

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


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

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

              0
              Тут скорее упор на визуальные языки построения, что, на мой взгляд, позволит использовать такую программу не только программистам, но и инженерам без навыков работы с текстами программ.
              0
              Давно слежу за этим проектом, читал статью автора программы, очень увлекательная вещь, однозначно достойная перевода.
                +2
                А еще очень интересно знать, что этот подход к моделированию построен на FRep — functional representation — функциональное представление. То есть это реально математически точное представление в отличие от NURBS B-Rep (граничного представления), используемого повсеместно в коммерческих САПР. Подход Signed Distance Fields (SDF) и методы геометрического моделирования описываются еще в древних советских книгах (товарищ Рвачёв писал про R-функции и их геометрические приложения). Если говорить о применении таких методов — то оно взрывает воображение, ибо современные видеокарты как раз таки легко могут делать огромное количество вычислений, а значит трассировка SDF будет очень быстрой в реальном времени(мой эксперимент с SDF — трассировка лучей, освещение, тени в реальном времени). Если говорить о применении — оно обширно. Всякие МРТ и КТ получают как раз такие данные, которые удобно представлять и обрабатывать в SDF. Облака точек и полигональный суп легко можно превращать в адекватные полигональные меши через SDF и ретесселяцию (cube marching). А уж для физического моделирования как полезны эти представления для задания граничных условий и решения задач аэродинамики, термодинамики, сопроматов (это вам не конечно-элементный анализ, это гладкое математически точное представление). Короче, тема очень крутая и я считаю, что на рынке САПР она до конца не раскрыта.
                  +1
                  Houdini может с успехом быть такой САПР.)
                    0
                    Ну там только визуальные симуляции, ни о какой физической точности речи быть не не может.
                      0
                      Ничто не мешает с нуля собрать нужную вам физическую модель.
                        –1
                        Ну можно и в ms paint создавать шедевры живописи. Можно и blender расширять до CAD. Можно обвешать плагинами 3d max и делать там физику. Один вопрос: с какой целью? Какое преимущество у этого странного хода?
                          +1
                          Ну к чему юродствовать.В перечисленных вами программах есть работа с SDF+вся нужная математика нодами например для работы с вольюметриками+интерфейс для работы с opencl для кастомного кода?
                          Хорошо что вы вспомнили про плагины, как что-то написанное за вас.
                          В этом плане Гудини как 3d IDE от них выгодно отличается и опровергает «Ну там только визуальные симуляции, ни о какой физической точности речи быть не не может.»
                            –1
                            Вся эта база есть в любом 3д движке, а самое сложное — это как раз таки реализовать преимущество SDF, создание моделей, симуляицию (физически точную). И тут от гудини остается только каркас. Если с блендером все понятно — он опенсорс, то гудини — это как бы не опен и не сорс, так что смысла не вижу завязываться на такую сторонюю программу, преимуществ это не даст.
                              +1
                              Я бы посмотрел как сейчас в Блендере сесть и собрать по какому-нить пейперу такой сетап.
                              vimeo.com/213569167
                              В нём даже внятной работы с OpenVDB нет до сих пор.
                                –2
                                Да крутая программа, я не спорю. Но слишком специфична область применения. И блендер вовсе не для того, чтобы собирать такие сетапы. Можно использовать MS Word как редактор векторных изображений, в единичных случаях успешно, но в промышленных масштабах бессмысленно.
                                  +1
                                  Специфична ровно настолько насколько специфичны поставленные задачи.
                                  И тут же на большой range таких задач никак не влияет, хотя о них вроде и речь и возможности как минимум быстрого прототипирования в огромном круге задач.
                                  Конкретно в нашем контексте быстрая конвертация из вольюметрика в полигоны и обратно даже готовыми нативными нодами(не говоря что какой-нить свой кастомный мешер/ремешер собрать не сложная задача), нужная математика с представленными данными на любом этапе.
                                  Всё в совокупности и превращает Гудини в удобный специфичный САПР, который даже сейчас удобнее и мощнее специализированного софта.
                                  «Если с блендером все понятно — он опенсорс»+«блендер вовсе не для того, чтобы собирать такие сетапы», так к чему его было вообще вспоминать в контексте опенсорса, как это достоинство влияет на его нынешние возможности?

                                    –1
                                    Ну вы же понимаете, что я разработчик. И я смотрю на вещи под другим углом — с точки зрения разработки. Вот, скажем, приходят физики в «Гудини», начинают создавать свою симуляцию. А тут в неожиданном месте симуляция перестает вычисляться. В 10 км от солнца вычисляется, а в 200 км от солнца — нет. Курят мануалы, пишут в службу поддержки «Гудини». А там оказывается, что ради оптимизации какие-нибудь мелкие значения, не оказывающие реального воздействия на результирующее изображение, отбрасываются. Любые запросы на исправления этого бага будут посланы подальше во вселенную, либо отодвинуты по приоритету в дальний ящик. ОпенСорс — идем и правим. Вот и все. Вся разница.
                                      +1
                                      Для разработчика в Гудини есть HDK и с++.Помимо можно написать дубль нативного решения на python,vex или opencl с нужной вам точностью.
                                      И поддержка у Сайдов наверное лучшая в индустрии.Вот у того же BF ждешь исправления или нужных фич годами.
                                      Из разговоров я уже понял что вы если и ставили Гудини, то дальше иконок с полки дело не пошло, судя по фантазиям.
                                      Если кого-то не устраивает отдельное родное решение в UE или Unity они лабают своё.Но не пилят же свой редактор.)

                                        0
                                        Да ну можно сделать, кто же сомневается-то. Но кто реально этим будет заниматься? Ну сделает пара физиков-извращенцев какой-нибудь модуль на коленке ради спортивного интереса, сделает свои рассчеты и закинет эту идею в дальний ящик. А я как программист пойду (уже пошел) писать свой CAD, поскольку я понятия не имею кому нужна будет моя разработка, основанная на программе, где базовая лицензия стоит немалых (уверен) денег. Вот, скажем я захочу бесплатно раздавать свои модули. Но даже в этом случае у меня будет два с половиной пользователя. Ну не вижу я логики в такой реализации.
                                          0
                                          Зачем минусовать каждое мое сообщение и плюсовать Муад'диба? Ни сам ли Квисатц Хадерах перелогинился, чтобы это сделать?
                                    0
                                    СВЕРЧОК, параметрические инструменты к Blender, есть аддон!
                        0
                        На мой взгляд как раз понятно, почему такой подход не особо популярен в САПР. Он более ограничен, так как заточен на представление объёма, нежели поверхности. А в САПР как раз более важны поверхности и их фичи. Например, я не очень представляю, как смоделировать такой штукой кузов автомобиля, или обводы кораблей, самолётов и т.д. Сплайновые поверхности для этого больше подходят. А фаски, упомянутые в статье? С поверхностями всё просто: ребро — это функция пересечения поверхностей, которые мы можем вычислить с любой точностью, а по ней построить фаски. Более того, эти рёбра в дальнейшем используются для вычисления оптимальных траекторий ЧПУ станков, чтобы максимально точно передать их в металле. С SDF — это становится более сложной задачей. И, скорее всего, опять же потребует построения B-Rep как промежуточного представления. Спрашивается, а зачем тогда F-Rep, если можно сразу в B-Rep моделировать?

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

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

                        Я тут уже писал про то что CAD это Computer Aided Design.
                        Претензий к автору программы не будет, назови он это «весёлая игра в CAD», «симулятор инженера-конструктора для программистов», «параметрический моделер» и.т.д.
                        Настоящий CAD — это то, в чём настоящие инженеры-конструкторы делают настоящие изделия. Это — не CAD и никогда не будет настоящим CADом. Автор начал проектировать систему не с того места, с которого нужно, а с того, с которого умеет. То есть изначально, фундаментально не правильно.
                          +2
                          Программирование ради программирования, ну что вы. Это весело, тут автора можно понять…
                          Но с другой стороны — без упора на чертежи и генерацию G-кода толку чуть меньше чем нет воообще.
                          0
                          Пытался я его собрать и на линуксе и на винде, не выходит.
                          Ну и разработка автором закинута.
                            0
                            Гудини делает это все куда успешнее уже 20 лет как.
                            Носорог тоже, хотя в нем это пришито как-то немного коряво.
                            Alias тоже процедурный. Как и solidworks.
                            Если очень уж вам просто охота поупражняться — ну, может тогда есть смысл с этим скетчем поиграться. Не более.
                              0
                              github.com/Ignat99/Trim

                              Это мой (идейно) дипломный проект 2000 года. Картинки похожи. Только тогда не было Питона и я использовал XML для автоматического изменения кода кода С++ :-)

                              github.com/Ignat99/Trim/blob/master/doc/prog/PROG2.GIF

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

                              Самое читаемое