Статьи

Как на самом деле работает прямое моделирование?

Istvan Csanady, основатель и генеральный директор компании Shapr3D

Istvan Csanady

Оригинал: How does direct modeling actually work?.
Эту статью предложила опубликовать на isicad.ru команда C3D Labs, они же предоставили перевод на русский язык.


Дмитрий Ушаков:

Прямое моделирование давно стало неотъемлемым функционалом современной системы трёхмерного моделирования. Оно находит всё более широкое применение как в машиностроительном, так и в архитектурно-строительном проектировании. Причина тому понятна и очевидна — совместная работа разных исполнителей над одним объектом/изделием подразумевает частое внесение изменений в трёхмерную модель с использованием разных систем моделирования, каждая из которых говорит на своём «параметрическом языке», а единственным lingua franca становится инструментарий непосредственной манипуляции граничными элементами твёрдотельной модели — прямое моделирование.

За последние 20 лет на портале isicad.ru были опубликованы десятки статей о прямом моделировании с описанием концепции, обзором разных реализаций, сопоставлением достоинств и недостатков этого подхода по сравнению с моделированием на основе истории построения. Во многом такое внимание было основано на собственных разработках компании ЛЕДАС в области интеграции возможностей прямого моделирования с параметрическим редактированием модели без доступа к её истории построения. Идеи, впервые изложенные в программной статье 2008 г. «Вариационное прямое моделирование, или как сохранить намерения проектировщика в САПР без истории построения», за прошедшие годы были реализованы в разных системах моделирования (SketchUp, Rhino, КОМПАС-3D, BricsCAD) и продолжают находить применение в новых разработках.

Справедливости ради, отметим, что ЛЕДАС не являлся пионером прямого моделирования — этой технологии уже больше 30 лет, см. «Кому и зачем нужно прямое моделирование? Обзор конкурентных технологий» — но она вовсе не думает устаревать, свидетельством чему является статья, написанная разработчиками системы моделирования Shapr3D, перевод которой мы предлагаем вашему вниманию. Предлагаем читателям самим ответить на вопрос, есть ли в этой статье что-то новое по сравнению с опубликованным ранее на нашем портале на ту же тему.

Евгений Кондратюк, руководитель группы прямого моделирования, C3D Labs:

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


Прямое моделирование Shapr3D


Мы добавляем в CAD-систему Shapr3D функции параметрического моделирования с деревом построения и поэтому хотим немного рассказать о прямом моделировании и о его дальнейшей поддержке в Shapr3D после появления параметрических функций.

Если вы уже ознакомились со статьей What is CAD: the technological foundations of CAD software, то логичный следующий шаг — изучить особенности прямого моделирования (англ. Direct Modeling, DM). Прежде всего давайте дадим определение понятию «прямое моделирование».

Разработчики CAD-систем дают разные определения, что привело к путанице. Упростим этот вопрос (причем намного):

Прямое моделирование — это редактирование CAD-моделей (в граничном представлении) без использования параметрического дерева построения.

И все! Нет, прямое моделирование — это не про то, как «тянуть» и «толкать» элементы геометрии. Да, во многих CAD-системах действительно имеются интерактивные модели, к которым применимы именно такие операции прямого моделирования. Но в таких операциях тоже могут применяться параметры — как и в любой другой операции параметрического моделирования. Да, все настолько просто. Но что это значит на самом деле?

До 1988 года, когда компания PTC выпустила первую в мире параметрическую 3D CAD-систему (под названием PRO/ENGINEER, которое потом было заменено на Creo), все CAD-системы применяли только прямое моделирование: редактирование моделей выполнялось непосредственно. Для этого использовались различные геометрические операции, например булевы. Звучит просто, но на самом деле отдельные изменения было крайне сложно выполнить традиционными методами прямого редактирования.

Допустим, у нас есть простая деталь с двумя отверстиями. Мы хотим увеличить межцентровое расстояние этих отверстий с 20 до 25 мм. До того как компания PTC изобрела параметрическое моделирование, это требовало массу трудоемкой ручной работы. Чтобы добиться желаемого результата, приходилось либо строить модель заново, либо придумывать хитрые булевы операции или операции построения поверхностей. И это еще очень простой пример — только представьте, как трудно было бы редактировать более сложную модель.

Прямое моделирование Shapr3D

До появления параметрического моделирования даже изменение расстояния между двумя отверстиями было крайне трудоемкой задачей

И тут появился гениальный основатель компании PTC Самуэль П. Гейзберг (Samuel P. Geisberg). Он предложил не просто хранить описание геометрии и предоставлять пользователю кучу инструментов редактирования, а записывать и сохранять всю последовательность операций построения модели, чтобы мы в любой момент могли вернуться к нужной операции, изменить ее параметры, а затем заново выполнить все последующие операции, получив новую геометрию. Например, можно вернуться к операции, в которой было задано расстояние между отверстиями в 20 мм, изменить параметр 20 на 25 — и вуаля, все готово! Геометрия обновилась, и мы получили новую деталь.

Просто магия какая-то!

Честно говоря, реальность не столь волшебна. Параметрическое моделирование — действительно великолепная концепция, но, как и за все в жизни, за эту магию приходится платить. У параметрического моделирования есть две неустранимые проблемы:

  1. Зависимости: сама последовательность операций по определению создает зависимости между ними. В таких зависимостях сложно разобраться. Нередко изменение одного параметра приводит к непредвиденным последствиям.
  2. Ограниченные возможности редактирования: параметрическая история построения детали — это, если можно так выразиться, ее ДНК. Тут все как в биологии: то, что не закодировано в ДНК, изменить легко; а вот поменять записанные в ДНК свойства чрезвычайно сложно или вообще невозможно.

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

  • Неожиданные изменения. Например, рассмотренная выше деталь может быть построена таким образом, что изменение параметра с 20 до 25 мм приведет к показанному ниже неожиданному результату. Расстояние между двумя отверстиями равно 25 мм? Да. Это то, чего мы хотели? Разумеется, нет. Почему же так получилось? Конечно, в этом простом случае найти ошибку относительно легко. А что делать, если такие же проблемы возникают в модели с тысячами конструктивных элементов? Ну, удачи…
Прямое моделирование Shapr3D

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

  • Приходится прогнозировать поведение модели и заранее предусматривать выполнение тех или иных изменений в параметрической истории построения. Однако слишком «гибкая» модель потребует создания очень сложного дерева, которое легко сломать, а слишком «жесткая» вызовет проблемы в дальнейшем, если геометрию все же потребуется изменить. Кроме того, у нас нет хрустального шара, чтобы заглянуть в будущее и узнать, какие изменения в модели потребуются заказчикам или другим участникам процесса разработки.
  • Способ редактирования модели не очевиден. В зависимости от способа построения исходной модели одно и то же изменение делается совершенно по-разному. Например, в параметрической CAD-системе с деревом построения цилиндр строится либо выдавливанием окружности, либо вращением прямоугольника вокруг одной из сторон. В первом случае, чтобы изменить высоту цилиндра, нужно поменять значение параметра «высота» в операции выдавливания, а чтобы изменить диаметр — поменять диаметр окружности в эскизе. Во втором случае, чтобы изменить высоту цилиндра, придется поменять длину стороны прямоугольника, а чтобы изменить диаметр — длину другой стороны, которая равна половине диаметра.
  • Редактирование модели может оказаться очень медленным процессом. Если дерево построения детали содержит сотни или тысячи операций, изменение всего одного параметра может потребовать огромного объема вычислений при перестроении модели. Это существенно замедляет работу, особенно в устаревших CAD-системах.
  • Геометрию можно передать в другую CAD-систему, а дерево построения — нет. У этого ограничения есть глубокие технические причины. Не вдаваясь в подробности, просто отметим, что для передачи дерева построения две CAD-системы должны быть полностью совместимы.


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

Однако в 2003 г. Блэйк Коуртер (Blake Courter) решил устранить недостатки параметрического моделирования. Так появилось современное прямое моделирование, реализованное в системе SpaceClaim. Блэйк стремился устранить ограничения, присущие моделированию с деревом построения. Он попытался найти альтернативный способ редактирования геометрии в CAD-системах, основываясь только на геометрии, без необходимости разбираться со сложной параметрической историей построения.

Основная идея современного прямого моделирования заключается в следующем:

  1. Грани можно перемещать и преобразовывать, если применить интеллектуальные алгоритмы к сопряженным граням, растягивая и сжимая их.
  2. Скругления и фаски относительно легко найти и обработать особым образом.

Итак, современное прямое моделирование — это «всего лишь» набор новых операций твердотельного моделирования, которые выполняют определенные виды редактирования геометрии, не используя дерево построения. Чтобы понять, как на самом деле работает прямое моделирование, рассмотрим его самую основную операцию: перемещение грани.

Перемещение грани

Как мы уже знаем из статьи What is CAD: the technological foundations of CAD software, каждая грань строится на базовой бесконечной поверхности (например плоскости или цилиндрической поверхности), а ее наружные границы и внутренние отверстия задаются набором лежащих на поверхности кривых.

Операция перемещения грани выполняется в несколько простых этапов:

  1. Грань отделяется от смежных граней (возможно, с нарушением замкнутости оболочки модели).
  2. Поверхность грани перемещается либо произвольно (в случае операции «переместить грань»), либо параллельно самой себе (в случае операции «построить эквидистантную грань»).
  3. Сопряженные грани удлиняются и (или) укорачиваются так, чтобы они соприкасались с перемещенной гранью.
  4. Перемещенная грань обрезается по новым линиям пересечения с удлиненными или укороченными сопряженными гранями.
  5. Все грани объединяются в сплошную оболочку.

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

Прямое моделирование Shapr3D

Команда «перемещение грани» позволяет с легкостью изменять модель

Грань можно не только перемещать, но и поворачивать. В следующем видео мы поворачиваем грань вокруг ее осевой линии. Как и в предыдущем примере, при этом сопряженные грани растягиваются и сжимаются так, чтобы сохранять замкнутость оболочки тела.
Прямое моделирование Shapr3D

Грани можно поворачивать, что существенно расширяет возможности редактирования геометрии

Теперь, когда мы изучили основы, рассмотрим реальный пример. Это модель литейной формы для изготовления корпуса iPhone. Модель получена в стандартном формате обмена данными (например X_T или STEP). Мы импортировали ее в нашу любимую CAD-систему — разумеется, без дерева построения. Оказалось, что по какой-то причине отверстие требуется сместить на 1 см. Без современного прямого моделирования для этого пришлось бы либо полностью переделывать всю модель, либо прибегать к трудоемкой «параметрической магии».

Прямое моделирование Shapr3D

Вся мощь прямого моделирования: отверстие смещается за считанные секунды

Хотя эта операция кажется более сложной, чем предыдущие, «под капотом» у нее точно такой же алгоритм, представленный выше. Сначала все перемещаемые грани отсоединяются от сопряженных с ними. Затем грани перемещаются на новое место. Сопряженные грани растягиваются или обрезаются так, чтобы получить сплошную оболочку тела, которое возможно изготовить.

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

Прямое моделирование Shapr3D

Команда построения эквидистантной грани также позволяет изменять диаметр отверстия

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

Удаление грани

Алгоритм удаления грани очень похож на алгоритм смещения.

  1. Сначала выбранная грань (или грани) отделяется от сопряженных с ней граней.
  2. Затем сопряженные грани удлиняются или укорачиваются так, чтобы образовать замкнутую оболочку тела.

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

Прямое моделирование Shapr3D

Удаление граней приближает нас к «исходной» форме модели

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

Прямое моделирование Shapr3D

Удалить отверстия? Нет ничего проще!

Обработка скруглений

Скругление — особый случай, требующий применения более сложных алгоритмов. Например, когда мы используем операцию смещения грани и при этом затрагиваются скругления, их придется обрабатывать по-другому. Кроме того, мы можем ввести отдельную операцию «изменить скругление», предназначенную для изменения радиуса скругления. Рассмотрим пример.

Изменение радиуса скругления аналогично операции смещения грани за исключением того, что мы не перемещаем скругленную грань, а заменяем ее на новую с другим радиусом кривизны. Операция изменения радиуса скругления работает по следующему алгоритму:

  1. Сначала удаляет грани выбранного скругления, отделяя его от сопряженных граней.
  2. Далее, исходя из геометрии сопряженных граней, рассчитывается новый набор скругленных граней с новым радиусом, которым затем заменяются удаленные грани.
  3. Затем сопряженные грани удлиняются или укорачиваются так, чтобы образовать замкнутую оболочку тела.

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

Прямое моделирование Shapr3D

При изменении радиуса скругления сопряженные грани растягиваются и сжимаются

Итак, когда мы можем применить операцию изменения радиуса скругления средствами прямого моделирования? Для начала геометрическое ядро нашей CAD-системы должно определить, что мы имеем дело именно со скруглением. И это не так просто, как кажется. Если скругление создается в той же CAD-системе, то в дереве построения просто отмечается, что такая-то грань построена именно при помощи операции скругления. А вот если мы работаем с импортированной моделью, распознавание скругления превращается в нетривиальную задачу. Когда радиус скругления очень велик и он «сливается» с сопряженными гранями, геометрическому ядру очень сложно определить, были ли эти грани созданы операцией построения скругления или нет.

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

Прямое моделирование Shapr3D

Выявление скруглений часто оказывается непростым делом

Тем не менее самые совершенные геометрические ядра (например Parasolid) достаточно хорошо распознают скругления и применяют к ним именно операцию «изменить радиус скругления», как в следующем примере.

Прямое моделирование Shapr3D

Изменить радиус существующего скругления очень просто

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


Еще одна задача, связанная с редактированием скруглений и прямым моделированием, — перестроение скруглений. Такое перестроение выполняется автоматически при выполнении операций смещения грани или построения эквидистантной поверхности. При этом скругления обрабатываются как отдельный класс геометрических объектов. Современные геометрические ядра, в частности Parasolid, работают по следующему алгоритму:

  1. Найти скругления.
  2. Временно отделить их от сопряженных граней.
  3. Применить операцию прямого моделирования.
  4. Построить скругления заново.

Такой подход значительно упрощает работу со скруглениями. В следующем примере операция построения эквидистантной грани применяется к плоской грани, окруженной скруглениями. Ядро Parasolid распознает эти криволинейные поверхности как скругления и выполняет перестроение скруглений после перемещения грани. Обратите внимание, что в рассматриваемом случае радиус скруглений не меняется, а общая топология модели сохраняется.

Прямое моделирование Shapr3D

Если построение эквидистантной поверхности требует перестроения сопряженных скруглений, ядро Parasolid успешно выполняет такую операцию

Замена грани

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

Алгоритм замены грани:

  1. Выбранная грань отделяется от смежных граней (возможно, с нарушением замкнутости оболочки модели).
  2. Сопряженные грани удлиняются и (или) укорачиваются до взаимного наложения с копией новой грани.
  3. Копия новой грани обрезается по новым линиям пересечения с удлиненными или укороченными сопряженными гранями.
  4. Все грани объединяются в сплошную оболочку.

Операция замены грани часто применяется на практике. Типичный пример — продление тела до изогнутой поверхности, как показано в следующем примере.

Прямое моделирование Shapr3D

Продление тела до изогнутой поверхности с использованием команды «Замена грани»

Существуют и менее очевидные применения, которые на первый взгляд могут показаться весьма необычными. Команда «Замена грани» способна удлинять и укорачивать тела, даже когда грани не полностью соприкасаются — достаточно наложения их поверхностей. В следующем примере мы меняем высоту оболочки тела так, чтобы верхняя грань оказалась на одной высоте с другой плоской гранью. Плоскости бесконечны, поэтому команда «Замена грани» отделяет верхнюю грань от оболочки тела, а затем продлевает сопряженные поверхности до нового положения этой плоской грани.

Прямое моделирование Shapr3D

Команда «Замена грани» работает с двумя телами, грани которых лежат в одной плоскости, но не пересекаются

Разумеется, команда «Замена грани» может обрабатывать и неплоские поверхности. В частности, мы можем удлинить ручку сковородки так, чтобы она соединилась с криволинейной боковой стенкой.

Прямое моделирование Shapr3D

Соединение двух тел по изогнутой грани с использованием команды «Замена грани»

Когда прямое моделирование не справляется

Прямое моделирование — очень привлекательная технология. Она интуитивно понятна для пользователя. Однако это вовсе не «священный Грааль» в мире автоматизированного проектирования. Рассмотрим ряд задач, с которыми прямое моделирование не справляется.

Основная причина большинства неудач прямого моделирования в том, что удлинение и укорачивание грани оказывается сложной задачей для геометрического ядра — иногда просто потому, что грань вообще не существует. Типичный пример: перекрывающиеся скругления или скругления большого радиуса, которые «съедают» сопряженные грани. Давайте создадим скругление большого радиуса, а затем попытаемся его удалить.

К сожалению, это вызывает ошибку, потому что ядро Parasolid не понимает, как удлинить оставшиеся грани, чтобы создать замкнутую оболочку, — грани по бокам утеряны. Хуже того: в конце видео показано, что при выделении этого вновь созданного скругления ядро Parasolid больше не распознает его как скругление, а считает обычной гранью. Для исправления ситуации попробуем использовать операцию построения эквидистантной грани.

Прямое моделирование Shapr3D

Если скругление не удается распознать, поможет команда построения эквидистантной грани

Еще одна неожиданность для тех, кто только начинает знакомиться с прямым моделированием, — эта технология действительно работает только с геометрией. Если участок геометрии удален, он пропадает навсегда. В следующем примере мы удаляем половину детали, а затем применяем операцию построения эквидистантной грани к вновь созданным граням. Результат на первый взгляд весьма неожиданный: сначала деталь начинает перестраиваться, но в итоге мы получаем совершенно другую геометрию.

Однако это совершенно логично, если вспомнить все то, что мы обсуждали ранее. Грани, которые хотя бы частично существуют после выполнения булевой операции вычитания, удлиняются. Однако остальные элементы геометрии (например отверстия) не перестраиваются, поскольку они были удалены в результате выполнения булевой операции. Операция построения эквидистантной грани вообще не подозревает о том, что они существовали: она работает только с имеющейся на данный момент геометрией.

Прямое моделирование Shapr3D

Удаление части геометрии приводит к безвозвратной потере исходной формы детали

Сильные стороны прямого моделирования

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

  1. Эскизное проектирование, создание опытных образцов, конструирование деталей простой формы.

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

  2. Сочетание прямого моделирования с моделированием при помощи дерева построения

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

  3. Демонстрация и контроль проектных решений

    Прямое моделирование — отличный способ проиллюстрировать предложения по внесению изменений в конструкцию. «Давайте переместим это отверстие на 1 см ближе к краю» — просто возьмите отверстие и переместите его в новое место, чтобы все поняли, что вы имеете ввиду. Прямое моделирование — быстрый и эффективный способ избежать взаимного непонимания.

  4. Работа с импортированной геометрией

    Самый сильный аргумент в пользу прямого моделирования — работа с моделями без дерева построения, импортированных из другой системы автоматизированного проектирования. При использовании прямого моделирования такие модели не придется пересоздавать с нуля. Их можно точно редактировать современными операциями прямого моделирования.


Прямое моделирование способно стать очень мощным инструментом в руках опытного конструктора. При правильном использовании оно сэкономит массу времени и повысит производительность труда, а также оптимизирует рабочие процессы. Главное — правильно применять эту технологию.