Геометрическое ядро САПР программ нового поколения
Для начала немного истории, все программы автоматизированного проектирования в том или ином виде берут свое начало с конца прошлого тысячелетия, а именно:
Autocad — 1982 г.
Allplan — 1982 г.
ArchiCad — 1986 г.
Solidworks — 1993 г.
И многие иные, даже сложные комплексы для расчетов такие как ANSYS и ABAQUS созданы в конце прошлого столетия.
Из отечественных можно еще выделить Renga , но она создается на старом ядре C3D компании АСКОН, а они в свою очередь создатели Компаса, поэтому это одно и тоже решение в разных обёртках.
Все данные САПР программы объединены одним общим принципом, они все создавались на основе одного принципа обработки информации — последовательного, это было следствием реалий тех времён, не существовало аппаратных устройств многопоточной обработки информации. Но времена идут, всё меняется , но не меняются геометрические ядра. В среднем на создание полноценной САПР программы уходит от 5 до 7 лет и довольного большого числа сотрудников — разработчики, тестировщики, консультанты и т.д. и в текущих реалиях ни одна из компаний разработчиков не пойдет на полноценную перепись с нуля своих геометрических ядер под многопоточные CPU и GPU. Конечно, программы обновляются с каждым годом, но все данные нововведения по сути косметические без глубокой оптимизации.
В прошлом году я разместил пост в котором продемонстрировал возможности Unreal Engine 5 при отображении многомиллиардно полигональной геометрии. В течении последнего года я вел разработку геометрического ядра которое сможет использовать многопоточную обработку на CPU — процессов требующих двойной точности, а на GPU — процессов где хватает и одинарной точности. Новые видео карты Nvidia — 3070, 3080, 3090 уже способны находить решения с двойной точностью на тензорных ядрах (они используются при обработки трассировки лучей в играх) , но на данный момент у меня работа с данными ядрами на этапе экспериментов.
По сути получилось решение которое по производительности превышает любую программу выше в списке от 10 до 100 раз и более. И это касается любых действий, отображение графики, копирования, изменений, перемещений, подсчета материалов и т.д.:
В моем решение используется ровно такой же подход как в Unreal Engine 5 в технологии nanite. При удалении камеры пользователя происходит постепенная эрозия геометрии и упрощение геометрии вплоть до отображения одного пикселя, что позволяет отображать многократно больший объем информации по сравнению с программами «пенсионерами». Но у технологии Nanite есть один большой минус, необходимо предварительное кэширование шейдерных текстур на жёсткий диск , в САПР это невозможно , поэтому мне пришлось данную технологию переработать под САПР и особенно под армирование строительных конструкций и впереди еще много работы.

7.2K поста 76.6K подписчиков
Правила сообщества
ВНИМАНИЕ! В связи с новой волной пандемии и шумом вокруг вакцинации агрессивные антивакцинаторы банятся без предупреждения, а их особенно мракобесные комментарии — скрываются.
Основные условия публикации
— Посты должны иметь отношение к науке, актуальным открытиям или жизни научного сообщества и содержать ссылки на авторитетный источник.
— Посты должны по возможности избегать кликбейта и броских фраз, вводящих в заблуждение.
— Научные статьи должны сопровождаться описанием исследования, доступным на популярном уровне. Слишком профессиональный материал может быть отклонён.
— Видеоматериалы должны иметь описание.
— Названия должны отражать суть исследования.
— Если пост содержит материал, оригинал которого написан или снят на иностранном языке, русская версия должна содержать все основные положения.
Не принимаются к публикации
— Точные или урезанные копии журнальных и газетных статей. Посты о последних достижениях науки должны содержать ваш разъясняющий комментарий или представлять обзоры нескольких статей.
— Юмористические посты, представляющие также точные и урезанные копии из популярных источников, цитаты сборников. Научный юмор приветствуется, но должен публиковаться большими порциями, а не набивать рейтинг единичными цитатами огромного сборника.
— Посты с вопросами околонаучного, но базового уровня, просьбы о помощи в решении задач и проведении исследований отправляются в общую ленту. По возможности модерация сообщества даст свой ответ.
Наказывается баном
— Оскорбления, выраженные лично пользователю или категории пользователей.
— Попытки использовать сообщество для рекламы.
— Многократные попытки публикации материалов, не удовлетворяющих правилам.
— Нарушение правил сайта в целом.
Окончательное решение по соответствию поста или комментария правилам принимается модерацией сообщества. Просьбы о разбане и жалобы на модерацию принимает администратор сообщества. Жалобы на администратора принимает @SupportComunity и общество пикабу.
Все это хорошо, здорово и прекрасно (без сарказма), но все же отображение модели — не единственный и даже не главный функционал САПР.
САПР — это не только ядро. Это и строгая иерархия сцены. С возможностью выбрать, склеить, отфильтровать, скрыть, показать. Тут, если упрощать геометрию вдали — нужно не забывать из чего она получилась. Не все так просто, в общем.
Более того, самое сложное, на самом деле — не 3d сцену рисовать, а в памяти компактно хранить всю сцену со всеми экземплярами объектов.
Да, блин, тупо разобрать ifc файл на 1 гиг грамотно и быстро — та еще задача.
Поздравляю, вы сделали ещё один 3D-движок. Это хорошо!
Про САПР: Autocad, Компас, ArchiCad, Solidworks, ANSYS и ABAQUS предназначены не для отображения миллионов и миллиардов полигонов (про остальные не знаю). У них совсем другие задачи, и сравнивать с ними — как то странно. ANSYS, насколько помню, может вообще в консольном режиме работать, без GUI.
P.S. В упомянутых вами САПР есть ещё и сплайны. А у вас сплайнов наверняка нет, только полигоны. Так ведь? 🙂
Поправьте, если ошибаюсь.
Основная разница в том, что в САПР для вычисления положения объекта используются уравнения, в то время как в игровых движках — координаты. Тобиш основная задача САПРа не в отображении модели, это вообще считай отдельный модуль программы, основная задача — правильно рассчитать координаты всех точек, из которых будет собрано изображение. А для отображения сойдёт и древний OpenGL, другой вопрос, что рабочие компы для САПРа зачастую выбираются как проц-затычка с видеоядром и производительность такого решения под большим вопросом.
Тут действует рыночная схема «предложение создаёт спрос, а спрос создаёт предложение»: первые САПРы, как и любое ПО того времени использовали строго: 1 ядро, 1 поток, минимум памяти. Был сформирован строгий алгоритм: рассчитать все вершины и ряд точек между ними, смасштабировать, вывести на экран. При этом появилась проблема: с развитием САПРов появилась возможность создавать зависимости опорных вершин друг от друга, что повышает точность и однозначность модели/объекта, так и не даёт правильно распараллелить вычисления. Ограничения по памяти не позволяли хранить результаты таких промежуточных расчётов для повторного использования.
Повторю свою мысль, проблема не в отображении моделей, тут алгоритмика в чистом виде. Проблема в создании этих моделей. Когда ты в 3D максе создаёшь сферу — она единожды рассчитывается, а далее существует как набор точек/полигонов. Когда ты в Компасе создаёшь сферу — она существует как координата точки и радиус и для каждого отображения/действия её вершины рассчитываются с 0 с самой разной точностью. Когда требуется сделать срез модели (для чертежа к примеру) — она полностью строится в памяти как пересечение плоскости и каждого использованного элемента в построении финальной модели с огромной точностью, а после рассчитывается что нужно отображать, а что нет.
Для ускорения отображения остаётся только применять основные «геймдевные лайфхаки», к примеру запоминать рассчитанную модель и масштабировать её с применением необходимых технологий или «забывать» ненужные детали перед передачей данных видеокарте. К примеру нет смысла предавать все точки куба — ты никогда не увидишь больше 3 его граней одновременно. Или нет смысла передавать на расчёт видеокарте объекты, которые в кадр 100% не попадут.
Отсюда вывод: из того, что я понял, ТС создал графический движок (что на самом деле охуеть достижение), но к сожалению так и не решил изначальную задачу — ускорить расчёт параметрических данных.
Знакомьтесь — геометрическое ядро C3D
Год назад со скромного постера на Конгрессе о Будущем Инженерного Программного Обеспечения (COFES) начался путь геометрического ядра C3D на рынок. О том, что интересного произошло за это время, мы и расскажем в данной статье. Но в начале нужно пояснить, что же такое — это ядро геометрического моделирования и кому оно нужно.
Авторы статьи — «костяк» команды геометрического ядра C3D
Николай Голованов, архитектор, руководитель разработки, к.т.н. В АСКОН 17 лет
Олег Зыков, директор по продукту C3D. В АСКОН 12 лет
Юрий Козулин, руководитель разработки C3D Modeler, к.т.н.
В АСКОН 7 лет
Александр Максименко, руководитель разработки C3D Solver. В АСКОН 13 лет
Кому нужно геометрическое ядро?
Геометрическое ядро — это программный компонент для разработчиков прикладных решений. Оно представляет собой программную реализацию математических методов построения численных моделей геометрии реальных и воображаемых объектов, а также математических методов управления этими моделями. Численные модели используются в системах, выполняющих проектирование (CAD), расчеты (CAE) и подготовку производства (CAM) моделируемых объектов.
Каждый разработчик прикладного решения стоит перед выбором: писать ли необходимые математические алгоритмы самому или приобрести сторонний компонент. У каждого подхода есть свои плюсы и минусы.
Что дает разработчику использование стороннего ядра? Главное — это возможность быстро повысить функциональные возможности своего продукта, не занимаясь решением задач геометрического моделирования, а работая над прикладными задачами приложения. Следующим важным моментом является снижение затрат на разработку продукта, ведь математические алгоритмы — самая сложная и трудоемкая часть систем автоматизированного проектирования.
Основные потребители геометрического ядра — это разработчики САПР, производители 3Dпакетов. Но не стоит забывать о том, что ядро может пригодиться и учебным заведениям! Оно поможет в обучении студентов по курсам: начертательная геометрия, машинная графика, геометрическое моделирование и вычислительная геометрия, будет полезно в образовании будущих математиковпрограммистов и разработчиков САПР. Использовать напрямую ядро (а не API CADсистем) можно при выполнении научноисследовательских работ, требующих построения трехмерных геометрических моделей. Кроме того, ядро геометрического моделирования может использоваться как при написании вузовского специализированного программного обеспечения, так и для создания коммерческого ПО в рамках малых инновационных предприятий, активно создаваемых при университетах.
Кстати, о предприятиях. Если в организации есть сложные, узкоспециализированные задачи, для решения которых на рынке нет программного обеспечения (или оно по какимто причинам недоступно), то лицензирование ядра позволит такое ПО создать самостоятельно. Конечно, в штате предприятия должны быть программисты и аналитики, обладающие необходимым опытом и знаниями.
Как видите, задач для геометрических ядер много, а самих ядер — очень мало. Полноценные коммерческие ядра геометрического моделирования разработаны единичными командами в мире, а в России компания АСКОН — единственная, кому это удалось. И сейчас настало время поговорить о нашем C3D.
Что такое C3D?
Решение о написании собственного геометрического ядра было принято в компании АСКОН в 1995 году в рамках начала работ по созданию системы трехмерного моделирования КОМПАС3D, коммерческий выпуск которой состоялся в 2000 году. До 2012 года ядро не было коммерческим продуктом и использовалось только в составе собственной САПР КОМПАС3D. Все эти годы оно совершенствовалось, обеспечивая функциональное развитие КОМПАС3D. Перечислим основные этапы:
- 2000 год. Создание достаточного количества алгоритмов трехмерного твердотельного моделирования для использования в САПР;
- 2001 год. Реализация решателя геометрических ограничений и конвертеров в основные обменные форматы данных;
- 2002 год. Создание механизма построения ассоциативных видов по трехмерным моделям;
- 2003 год. Появление основ поверхностного моделирования;
- 2004 год. Описание математических алгоритмов создания элементов листового тела;
- 2005 год. Реализация многотельного моделирования;
- 2007 год. Поддержка каркасной модели;
- 2008 год. Реализация кинематических сопряжений для моделирования механизмов;
- 2009 год. Поддержка атрибутов геометрической модели;
- 2010 год. Появление полноценного поверхностного моделирования;
- 2011 год. Поддержка кроссплатформенности;
- 2012 год. Реализация элементов прямого моделирования.
Команда разработки 17 лет развивала геометрическое ядро: совершенствовала его архитектуру, создавала новую функциональность, модернизировала ранее реализованные методы. Без уникального опыта, основанного на практическом применении КОМПАС3D на десятках тысяч рабочих мест, невозможно было бы говорить о возможности выпуска C3D в свободное коммерческое плавание. Создать конкурентоспособное ядро без опыта практического применения просто невозможно.
В настоящий момент ядро C3D — единственное в мире, объединяющее в одном продукте три важнейших модуля САПР:
- геометрический моделировщик C3D Modeler, предоставляющий достаточный набор возможностей для твердотельного и гибридного моделирования, эскизирования и 2Dчерчения;
- решатель геометрических ограничений C3D Solver, позволяющий накладывать вариационные зависимости на 2D и 3Dэлементы геометрической модели;
- конвертер данных C3D Converter, обеспечивающий чтение/запись геометрической модели в основные обменные форматы.
Все эти модули теперь доступны не только командам разработки внутри АСКОН, но и всем желающим.
Первопроходцы
В эти дни, весной 2013 года, первый продукт, подготовленный на ядре АСКОН вне собственных подразделений разработки, представлен широкой публике. Это ESPRIT Extra CAD — простой в использовании трехмерный моделировщик, встроенный непосредственно в популярную CAMсистему ESPRIT. Интерфейс системы можно увидеть на рис. 1. Разработка выполнялась совместно компаниями ЛО ЦНИТИ и Rubius.

Рис. 1. ESPRIT Extra CAD
В конце 2012 года лицензию на ядро приобрела компания Базисцентр, которая будет использовать наш компонент в конструкторских модулях своей мебельной САПР. Два этих события уже говорят о том, что компания АСКОН не зря решила предоставить сторонним компаниям доступ к своему геометрическому ядру. Рынок действительно нуждался в новом игроке!
Говоря о заказчиках C3D, не будем обходить вниманием и компанию АСКОН, которая в феврале выпустила КОМПАС3D V14 (рис. 2) — 3DСАПР, построенную на новейшей, четырнадцатой, версии ядра C3D. Все текущие разработки АСКОН сегодня также базируются на нашем программном компоненте.

Рис. 2. КОМПАС-3D V14
Что нового в C3D V14?
Новая версия для нас особенная — ведь это первый релиз продукта после объявления о старте лицензирования ядра внешним разработчикам. Ранее все релизы выходили только в составе КОМПАС3D. Это уже оказало влияние на продукт: теперь в развитии ядра мы опираемся не только на мнение разработчиков КОМПАС3D, но и на пожелания новых клиентов. Начиная с V14, ядро имеет свою систему защиты и возможность покомпонентного лицензирования. В остальном же развитие идет так же, как и раньше — совершенствуются алгоритмы, расширяется функциональность, повышаются скорость и надежность.
C3D Modeler
Функциональные возможности модуля:
- моделирование тел;
- моделирование поверхностей;
- моделирование листовых тел;
- триангуляция геометрической модели;
- вычисление инерционных характеристик модели;
- анализ столкновений элементов модели;
- построение плоских проекций и разрезов модели.
В новой версии доработана операция скругления: появилась возможность остановки скругления (рис. 3в) и остановки с площадкой (рис. 3г).
В операциях Оболочка, Придание толщины и Эквидистантная поверхность, имеющих общие алгоритмы, появилась возможность обработки вырождения коротких ребер и поверхностей (граней). Для поверхностей возможна обработка как явного (невозможность создания эквидистанты), так и неявного вырождения (поглощение соседними гранями). Наглядно это видно на рис. 4.

Рис. 3. Доработана операция скругления: исходная ситуация (а), было возможно ранее (б) и (в), стала возможным остановка скругления (г)

Рис. 4. Оболочка: было (а), стало возможным (б, в)

Рис. 5. Эллиптическая обечайка и ее развертка
Следует также отметить такую крупную новинку, как построение развертки линейчатого тела (на рис. 5 показан пример Эллиптической обечайки).
C3D Solver
Сегодня C3D Solver — это мощный решатель 2Dограничений для 2Dчерчения и эскизов в 3D, а также решатель 3Dограничений для создания сборочных единиц и кинематического анализа.
В новой версии появилась возможность диагностики переопределенных систем ограничений. В КОМПАС3D данная функция реализована в виде выделения оранжевым цветом «лишних» ограничений (рис. 6).

Рис. 6. Переопределенный эскиз в КОМПАС-3D

Рис. 7. Параметризация NURBS
Доработана параметризация NURBSкривых: улучшилась решаемость системы ограничений, стало возможным множественное касание NURBS с другими кривыми. Особое внимание было уделено концевым случаям — теперь обеспечена гладкая стыковка контуров с участием сплайнов (рис. 7).
Кроме того, существенно доработаны алгоритмы наложения ограничений на эллипс и проекционную кривую, улучшена работа на крупномасштабных чертежах.
C3D Converter
В настоящее время модуль поддерживает следующие форматы:
- STEP (чтение/запись);
- Parasolid (чтение/запись);
- ACIS (чтение/запись);
- IGES (чтение/запись);
- STL (запись);
- VRML (запись).
В V14 cущественно улучшена работа с импортированными поверхностями: теперь конвертер всегда распознает элементарные поверхности при импорте NURBS. Также для всех поддерживаемых форматов решена задача преобразования NURBSповерхностей, описывающих цилиндры или конусы непосредственно в цилиндры или конусы, и задача объединения поверхностей вращения при импорте (например, из половинок цилиндра получаем один).
Мы перечислили только основные новинки, в новом релизе их гораздо больше. Большая их часть уже нашла свое применение в недавно вышедшей системе трехмерного моделирования КОМПАС3D V14. И мы надеемся, что эти и другие технологические находки еще найдут применение в новых системах, создаваемых нашими настоящими и будущими пользователями.
История одного ядра от Александра Алахвердянца
В этом году геометрическому ядру C3D исполняется 20 лет. Ровно столько лет назад основатели компании АСКОН пришли к единому мнению о необходимости создания собственной системы трехмерного моделирования КОМПАС-3D. В 1996 году была создана группа, которой было поручено написание программного обеспечения для работы с точной 3D-геометрией — инструмента, который бы не уступал по удобству использования и функциональности зарубежным аналогам. С этих дней начинается отсчёт истории «коломенского» геометрического ядра. На протяжении многих лет ядро постоянно развивалось и дорабатывалось — появлялись новые методы моделирования, разрабатывались алгоритмы вычислений, создавались дополнительные модули: параметрический решатель, конвертор данных, модуль визуализации. И за всеми этими изменениями всегда стояли конкретные люди — разработчики геометрического ядра, обретшего со временем собственное имя — C3D.
Сегодня всё больше людей интересуются геометрическим моделированием, многие из них активно следят за тем, кто и как разрабатывает российское коммерческое 3D-ядро. Поэтому мы решили подготовить серию «юбилейных» интервью с нашей командой разработки. В первом выпуске мы общались с Анной Ладиловой, поэтому, чтобы мужской части коллектива C3D Labs не было обидно, второе интервью мы решили взять у Александра Алахвердянца. Голос «за кадром» принадлежит менеджеру по продукту C3D, Аркадию Камневу.
— Саш, откуда ты родом?
— Я вырос в Кабардино-Балкарии, в городе Нальчике.
— Как ты оказался в Коломне?
— Я поступил в Московский государственный университет имени М.В. Ломоносова на Физический факультет. Моя базовая кафедра находилась в городе Дубне. Я занимался физикой элементарных частиц и после окончания университета остался в Подмосковье — пошёл учиться в аспирантуру, а заодно начал работать в Объединённом институте ядерных исследований. Уже оттуда, неожиданно для себя, я перебрался в Коломну работать программистом.
— Я слышал, что ты стажировался за границей по линии науки. Это правда?
— В Дубне я работал в составе научной группы по поиску кварк-глюонной плазмы в эксперименте STAR. Solenoidal Tracker At RHIC — это крупнейшая экспериментальная установка ускорительного комплекса RHIC (коллайдер релятивистских тяжелых ионов), который располагается в Брукхейвенской Национальной лаборатории в Лонг-Айленде, США. Участники эксперимента разбросаны по всему миру, всего около 40 институтов. Это крупнейший эксперимент по физике элементарных частиц в БНЛ, куда я дважды летал в служебные командировки по набору данных. Обе командировки длились по 3-4 месяца.
— Интересно, как организована работа в лаборатории?
— Сперва все готовятся к запуску коллайдера, потому что он потребляет очень много энергии и не может работать круглый год. Руководители Лаборатории договариваются с Департаментом энергетики, чтобы ведомство обеспечило работу электростанции, питающей коллайдер. Затем производится запуск, и коллайдер работает без остановки 4-5 месяцев. Круглые сутки собираются данные, нужно сидеть за компьютером и следить за множеством графиков для того, чтобы контролировать корректность записи экспериментальных данных. Важно, чтобы процессы протекали нормально: детекторы были исправны, давление газа в проекционной камере было на нужной отметке и т. д. Для этого приезжают ученые, сдают экзамены, получают различные допуски и заступают на свою смену, которая длится неделю. Работа заключается в том, что 4-6 человек сидят 8-ми часовую смену на рабочих местах, управляют записью экспериментальных данных и контролируют протекающие в детекторе процессы. По истечении этого срока формируется новая смена. За командировку приходилось отработать 10-12 смен, поэтому удавалось познакомиться с большим числом коллег. Непосредственно наука заключается в анализе полученных данных, который делается уже после в своём родном институте.
— Тебе понравилось работать над экспериментом STAR?
— Конечно! К сожалению, в России не проводятся эксперименты по моей специальности, поэтому для ознакомления с современной физикой элементарных частиц от университета нас возили на Большой адронный коллайдер в Швейцарию в Европейский центр ядерных исследований CERN (фр. Conseil Européen pour la Recherche Nucléaire).
— Писал ли ты какие-то научные работы?
— Я входил в список соавторов научной коллаборации эксперимента STAR. Все статьи, которые публиковались от коллабораций на протяжении 5-6 лет, что я участвовал в эксперименте, выходили с моим соавторством. Публикации можно встретить в таких изданиях, как Physical Review, Physical Letters и др. Также у меня было несколько личных публикаций.
— Что больше всего понравилось в США в профессиональном плане и чего больше всего не хватало в России?
— Главное отличие в том, что американцы изучают фундаментальную науку у себя дома, а нам для этого приходилось ездить далеко за границу. Все, кто участвовал в более или менее серьёзных научных проектах в Дубне, так или иначе работали на разные зарубежные страны — США, Швейцарию, Германию, Италию, Японию, Китай. То есть мы работали практически по всему миру. Хотя, конечно, в России тоже проводились эксперименты, но они были небольшие и очень специфичные.
— Обычно ученые, которые работают за рубежом, на Родину не возвращаются. Как так случилось, что ты снова оказался в России?
— Я никогда не хотел жить за границей. Скорее всего, именно из-за этого и ушёл из науки, потому что выбор такой, если ты занимаешься физикой элементарных частиц: либо ты уезжаешь за границу, либо уходишь из науки. Но это далеко не общее правило. В той же Дубне есть люди, занимающиеся физикой элементарных частиц, про которых я могу говорить только в восторженных тонах. Просто для себя я именно таким образом сделал выбор.
— Поговорим о работе в C3D Labs. В каком году ты присоединился к команде разработки C3D?
— В 2011 году я пришел на работу в математическое подразделение АСКОН.
— Изначально ты занимался геометрией или тебе сразу начали ставить задачи по параметризации в ядре?
— Раньше мы не имели каких-либо подразделений, и был только один отдел математики. Затем уже создали группу конверторов и солвера. Когда нам сообщили, что нас разделяют на группы, то будущий начальник, Саша Максименко, подошёл и спросил, хотел бы я работать вместе. Я сразу согласился.
— Чем разработка геометрического ядра отличается от разработки параметрического ядра?
— Группа разработки геометрического ядра намного больше, чем группа, занимающаяся параметризацией. Поэтому там может сложиться такая ситуация, когда ты не до конца знаешь, что происходит с разными участками программного кода ядра. А в нашем случае, мы вдвоём с Сашей разрабатываем код, и поэтому достаточно хорошо оба знаем весь новый функционал, который появляется в C3D Solver.
— Провокационный вопрос. Чем параметрическое ядро круче геометрического?
— Тем, что решателей намного меньше, чем геометрических ядер. Точнее даже вот так: ядер мало, а параметрических решателей ещё меньше! Будем считать, что они сложнее, раз их меньше. Значит, этим и круче.
— Теперь ты живёшь в Коломне между Москвой и Рязанью. Тебе нравится этот город?
— Нравится, с точки зрения исторических достопримечательностей. У Коломны есть свои красоты и свой древний дух. А с точки зрения бытовых удобств, Коломну всё-таки сложно сравнивать с малыми городами Швейцарии и Америки.
— Чем занимаешься в свободное время?
— Я часто программирую дома, много читаю и занимаюсь самообучением. Я же всё-таки не программист по образованию, а физик. Поэтому есть области информатики, которых я не знаю, и мне приходится восполнять эти пробелы в образовании.
— Выходит, что численные методы вам не преподавали в институте?
— Конечно преподавали. Но одними численными методами программирование не исчерпывается. На первом курсе университета мы проходили программирование, и был даже практикум по C++, где нас научили писать простые функции. Этого было явно недостаточно. Потом уже, когда работал ученым, я довольно много программировал, но делал это на таком уровне, что не вдавался в понятия об архитектуре или, скажем, о сложных языковых концепциях. Главное было — это топорно написать работающий алгоритм и построить графики после обработки данных. Вот и всё.
— На каких языках ты программируешь? Как изучаешь новые языки?
— Программирую на C++ и Python. Изучаю по книгам, смотрю видео лекции, многое коллеги подсказывают. Без них никуда! В C3D Labs работают большие профессионалы своего дела. Особенно в первое время я очень многому у них научился, потому что ни в каких книгах нет того огромного опыта, который есть у коллег. Они мне очень много дали! Теперь ещё и собственный опыт, «сын ошибок трудных», помогает мне самосовершенствоваться.
— Хобби, спорт, увлечения?
— Спорту я всегда уделял очень много времени, и в школьные годы, и в университете. До 6 класса школы я занимался футболом и круглые сутки пропадал на улице с мячом. Родителям это не нравилось. Мама мне говорила: «Саша, ты должен стать человеком, а не футболистом», — и мне пришлось перейти на баскетбол. Родители посчитали, что двухметровым я всё равно не вырасту, а значит, можно не переживать за мою дальнейшую судьбу. В Дубне мы тоже занимались с коллегами мини-футболом в секции от института и даже участвовали с командой в городских соревнованиях. Но когда я переехал в Коломну, то забросил спорт. Сперва я никого не знал, с кем можно было бы заниматься вместе, а сейчас уже банально не хватает на это времени.
— Я знаю, что ты — фанат ЦСКА. А за какие европейские футбольные клубы ты болеешь?
— Очень люблю итальянские клубы! С детства болею за Ювентус и за сборную Италии по футболу. Мой самый счастливый день — это когда в 2006 году итальянцы стали чемпионами мира. Я тогда был в командировке в Швейцарии и жил в Женеве в итальянском квартале. Поэтому я до самого утра отмечал победу с итальянцами.
— В соцсетях ты часто постишь котиков. Это у тебя хобби такое?
— Да, без них как-то не программируется 🙂 Я и на этот раз подготовил фото, где моя кошка проводит ревизию кода.
— Давай снова поговорим о работе. Какими задачами чаще всего приходится заниматься в C3D Labs?
— С тех пор, как из команды выделили группу C3D Solver, я стал заниматься 2D-решателем, в частности функционалом для параметризации NURBS кривых. Мною были доработаны или созданы с нуля ограничения, вроде касаний или инцидентностей, добавлена возможность фиксации производных вплоть до 3-го порядка в любой точке сплайна, чтобы можно было гладко сопрягать кривые, например, по G2. Вообще сплайн — это довольно сложный объект. Работая с ним, очень легко ошибиться, поэтому была большая головоломка — как сделать так, чтобы всё это работало хорошо и было реализовано просто и понятно для окружающих. Отдельная тема — драггинг сплайнов. При разработке данной функции пришлось пересмотреть модель поведения сплайна, настроить и согласовать поведение большого числа объектов, из которых состоит сплайн и с которыми он взаимодействует. В настоящее время мы переместили фокус на 3D-решатель. Последняя моя работа — это создание паттернов.
— Насколько я понимаю, паттерны — это массивы компонентов. Как они могут быть использованы?
— Я и сам не знаю! Когда мы их создавали, я для себя выработал требование, чтобы API паттернов предоставлял разработчикам ПО как можно больше свободы, и каждый пользователь C3D Solver мог использовать их не только по прямому назначению (создание массивов однотипных компонент), но и как-то по-своему: создавать массивы из объектов разной природы, крутить-вертеть каждый элемент массива по отдельности, настраивая его индивидуальное поведение, или просто использовать паттерн, например, для создания средней точки на дуге. Ещё когда мы обсуждали паттерны с моим руководителем Сашей Максименко, я сказал ему, что не хочу ограничивать использование массивов. Пусть пользователи сами решают, для какой задачи им будет удобно их применить, а мы только предоставим для этого соответствующий инструментарий. Хочется, чтобы у нас это получилось.
— Да, кстати, как тебе работается под руководством Александра Максименко?
— Отлично! Я думаю, что мы друг друга довольно хорошо понимаем. Саша — профессионал очень высокого уровня, очень многому меня научивший. Вообще, люблю людей, у которых постоянно можно учиться чему-то новому. И Саша именно такой человек!
— Ребята мне сказали, что ты — поклонник продукции Apple. У тебя даже ПО Visual Studio 2015 на днях отказалось устанавливаться под Windows. Скажи, как ты согласился компилировать ядро под Android?
— Меня никто не заставлял. Можно сказать, что я сам на себя перетянул обязанность по сборке C3D под Linux и Android. Просто потому, что мне это нравится. Я даже, наверное, не столько поклонник Mac, сколько любитель Linux. Для интереса я сперва начал собирать ядро, затем написал систему автосборки на Python, чтобы не мучиться. Вот так на прикладной задаче я решил изучить Python. Получилось извлечь пользу не только для себя лично, но и для C3D Labs тоже. А учитывая, что у меня техпроцесс уже был налажен, то было не сложно написать скрипт, чтобы ядро собиралось и для Android.
— Не пробовал запускать тестовое приложение C3D на Android?
— Когда SolidEng (корейский заказчик C3D Labs) испытывали наши технологии, они обращались с вопросами о том, как лучше организовать взаимодействие, потому что под Android обычно программируют на Java. Так мне пришлось изучить азы Java, чтобы показать наглядно, как можно связать с этим языком программирования наше ядро, написанное на C++. Позже они попросили продемонстрировать, как прорисовывать графику, используя нашу триангуляционную сетку, и я написал простенькое приложение под Android, демонстрирующее выполнение булевых операций и разные трансформации с получившимся телом. Хоть приложение и элементарное, но пришлось попотеть: я ведь раньше никогда не программировал ни на Java, ни, тем более, ничего не писал под Android. Кроме того, работать надо было быстро, потому что у SolidEng истекал срок тестирования и близилось время принятия решения о лицензировании или не лицензировании нашего ядра. Но всё получилось! И теперь этот пример доступен всем заказчикам, которые решат написать приложение под Android с использованием C3D.
— При общении с корейцами не было проблем с коммуникацией?
— Всё было довольно понятно. Корейцы — предельно корректные люди, они всегда очень вежливо общаются. Когда у них шёл активный этап тестирования, то почти каждый день мы с ними переписывались на английском. Они просили меня что-нибудь объяснить, я отвечал, и они снова задавали мне вопросы. Уже после того, как SolidEng лицензировал ядро, последовал только один вопрос по графическому отображению геометрии. Наверное, они довольно хорошо изучили C3D за время тестирования и теперь полностью самостоятельно разрабатывают свой софт на C3D.
— Что тебе больше всего нравится в рабочем процессе?
— Как и все, наверное, кто занимается наукой и математикой, я очень ценю моменты прозрения. Вот ты решаешь какую-то трудную задачу, мучаешься, не спишь ночами, всё время думаешь о ней. Вдруг в голове что-то щёлкает, и ты неожиданно понимаешь, что нашёл решение. В такие моменты я ощущаю себя самым счастливым человеком в мире! Надо мною даже жена иногда смеётся. Говорит, что Саша отключился от мира, а потом поздравляет с возвращением на Землю.
— Откуда ты черпаешь вдохновение, новые идеи? «Ньютоновские яблоки» ведь не всё время с неба падают?
— Я не знаю, как относиться к вдохновению. Благодаря университету, хорошим преподавателям и научным руководителям я был обучен различным методам решения задач. Поэтому я всегда стараюсь, в первую очередь, решать задачу самостоятельно. Конечно, читаю и специализированные статьи. Если говорить об идеях, то есть вещь, которая меня не перестаёт удивлять: ты какое-то время решаешь задачу, а потом вдруг узнаёшь, что где-то ещё в мире совершенно другие люди пришли к примерно такому же решению. С одной стороны, это всегда повышает самооценку — умные люди додумались, и ты тоже смог. А с другой стороны, думаешь, что все эти знания бренны и ничтожны, раз уж так много людей приходят к ним независимо друг от друга.
— Ты очень много занимался наукой раньше. Откуда такая тяга к знаниям?
— Мама с детства говорила мне, что главное — это знания, поэтому нужно много учиться. Со временем я полюбил учёбу. Особую роль в привитии мне любви к знаниям сыграла моя любимая учительница по русскому языку и литературе Валентина Николаевна Самохвалова. Она научила меня одному золотому правилу: «Когда не знаешь, с чего начать — начинай с вопроса». Тогда она так учила нас писать сочинения, а сегодня — это мой главный принцип решения задач. Если я не знаю, что делать и с чего начинать, то я записываю в тетради вопрос и начинаю методично на него отвечать. Я считаю, что правильно поставленный вопрос или сформулированная проблема — это уже половина решения сложной задачи. Вот так преподаватель по русскому языку поучаствовала в моём становлении как математика.
— Какая твоя любимая литература? Читаешь художественные произведения?
— Сейчас я уже гораздо меньше читаю, а было время в школьные годы, когда я читал без остановки какими-то страшными запоями. Люблю русскую классическую литературу. Многие произведения любимых Достоевского и Гоголя я перечитывал по многу раз. Если говорить о произведениях, то я обожаю «Братьев Карамазовых», которые мне дались только с 3 раза, и «Доктор Живаго» Пастернака за удивительно красивый русский язык!
— Какие передачи смотришь?
— Я постоянно смотрю футбол. Ещё люблю посмотреть видео про науку с сайта postnauka.ru
— Есть выпускники вузов, которые ещё только приглядываются к различным профессиям. Чем их может привлечь разработка ядра C3D?
— Думаю, что у всех есть свои интересы. Лично меня всегда привлекала возможность решения сложных математических задач.
— Ядро C3D может конкурировать с зарубежными ядрами?
— Не «может», а «обязано». В рабочем процессе должны присутствовать здоровые амбиции. Мне всегда хочется делать что-то лучше всех в мире, ну или хотя бы на уровне лучших. Не вижу никакого смысла делать поделки.
— Почему разработчикам инженерного софтвера следует использовать C3D?
— Мне хочется верить, что ядро C3D быстрое, имеет разнообразный функционал, удобно в использовании, имеет очень хорошую поддержку, т.е. стоит в одном ряду с лучшими ядрами в мире. А дальше уже дело вкуса каждого. Но я абсолютно точно уверен, что те, кто использует C3D в своей работе — не прогадали в своём выборе.
— Как параметризация может изменить облик современной трёхмерной системы моделирования?
— Она его уже изменила. Как и всё, что делается в области САПР, параметризация упростила выполнение ряда задач для проектировщиков и инженеров, избавила их от ненужной рутины, а также увеличила ряд возможностей. Мне хочется, чтобы в будущем функционал параметризации различных поверхностей и кривых в 3D стал столь же богат и разнообразен, как функционал параметризации кривых в 2D. Это может дать много новых возможностей инженерам.
— Какие тренды наметились в области САПР?
— Судя по публикациям, сейчас очень много пишут о прямом вариационном моделировании и гибридном моделировании. То есть речь идёт о более глубокой связи моделирования, основанного на истории построения 3D-модели, с моделированием без истории построения. Но пока, насколько я понимаю, «серебряной пули» нет, так как ещё не нашли такого решения, которое бы позволило идеально скрестить эти две методологии проектирования. Но это задача уровня САПР, и над её решением должны думать люди, которые занимаются CAD-системами. Уже от них к «ядерщикам» должны приходить задачи, которые требуется решить, чтобы в CAD-системе можно было осуществить задуманное. Ну, а наш собственные тренд — это как можно больше общаться с заказчиками и узнавать, что им конкретно нужно, чтобы облегчить творческий процесс моделирования и уменьшить долю труда, уходящую на написание кода.
Как математическая библиотека КОМПАС-3D превратилась в C3D Toolkit для разработчиков САПР → часть 2
В первой части статьи мы рассказали о геометрических ядрах в общем и объяснили, в чём их отличие от игровых графических движков. Далее представляем наше собственное 3D-ядро для работы с точной геометрией и тот программный продукт, который в итоге получился.
История российского геометрического ядра C3D
Началом работ над геометрическим моделированием в КОМПАС-3D официально считается 1995 год, именно тогда Николай Николаевич Голованов с группой коллег из коломенского офиса АСКОН заложили первые математические основы будущего ядра. Потребовалось четыре года, чтобы превратить математические алгоритмы в первый жизнеспособный продукт. С тех пор геометрическое ядро постоянно эволюционирует, обеспечивая функциональное развитие КОМПАС-3D и целого ряда других программных решений в России и за рубежом.

Велосипед Scott Voltage FR20, спроектированный в КОМПАС-3D с использованием геометрии C3D (автор модели: Алексей Богданов, г. Полтава)
В 2012 году математическое подразделение АСКОН было трансформировано в отдельную бизнес-единицу C3D Labs для разработки и продвижения на рынке геометрического ядра C3D. Такое решение принималось исходя из опыта мировых лидеров САПР-индустрии с опорой на то, что ядро является уже достаточно зрелым, чтобы продолжить свой жизненный путь в качестве самостоятельного продукта.

Команда C3D Labs, декабрь 2016 (Картинка кликабельна)
Сейчас прошло уже более 20 лет с момента начала разработки геометрического ядра C3D. Всё это время наши математики и программисты развивали его: улучшали архитектуру, создавали новую функциональность, модернизировали ранее реализованные методы. Почему мы акцентируем на этом внимание? Мы просто хотим сказать, что без уникального опыта, основанного на практическом применении на десятках и сотнях тысяч рабочих мест КОМПАС-3D, невозможно было бы создать конкурентоспособное 3D-ядро. Более того, разработать подобный продукт с нуля без постоянного использования и тестирования не по силам ни одной команде.
Деление геометрического ядра на компоненты
Если вы внимательно посмотрите на хронологию развития ядра C3D, то увидите, что с годами в него вошли не только функции моделирования, но также параметризация и конвертация данных. Разумеется, разработчики САПР это тоже заметили, поэтому от них стали всё чаще поступать запросы о лицензировании отдельных функциональных блоков ядра (например, только импорта/экспорта 3D-моделей или только 2D-решателя). Это привело к формированию целого набора инструментальных средств для создания инженерного программного обеспечения – C3D Toolkit:

Сегодня C3D Toolkit объединяет в себе важнейшие модули САПР:
осуществляет построение и редактирование геометрических моделей, расчёт триангуляции, построение плоских проекций, вычисление массово-центровочных характеристик и определение столкновений элементов модели;
устанавливает зависимости между различными элементами геометрической модели при помощи размеров и логических ограничений и обеспечивает сохранность заданных связей при изменении размеров, параметров модели, перемещении отдельных элементов модели или внесении иных изменений в геометрию модели;
управляет настройками визуальной сцены для статического и динамического режимов отрисовки геометрии, а также обеспечивает интерактивное взаимодействие пользователя с интерфейсом приложения;
осуществляет обмен данными о геометрической модели с другими системами проектирования, поддерживает форматы: JT, IGES, STEP (AP203, AP214, AP242), Parasolid X_T/X_B, ACIS SAT, STL, VRML.
Рекомендации для разработчиков
Если вы решили создать собственное инженерное приложение, то, используя программные компоненты C3D Toolkit, вы можете получить доступ к их низкоуровневым объектам в исходном виде: точкам, матрицам, системам координат, кривым, поверхностям, телам, различным вспомогательным объектам и т.д. Если же вы захотите применить в разработке API-интерфейс КОМПАС-3D, тогда придется работать с некоторой «обёрткой» над его избранными высокоуровневыми методами, среди которых есть как методы C3D Modeler, так и надстроенные над ними методы самого КОМПАС-3D (в большей степени).
На следующем рисунке показано, как разрабатываемое для КОМПАС-3D приложение взаимодействует через API с различными компонентами C3D Toolkit:
Взаимодействие разрабатываемого приложения с компонентами C3D Toolkit через API КОМПАС-3D (синие блоки относятся к C3D Toolkit, белые — к КОМПАС-3D)
Следовательно, удобно и логично использовать C3D Toolkit именно тогда, когда вам нужно создать программный продукт без привязки к конкретной САПР. Это могут быть самостоятельные системы автоматизированного проектирования, системы инженерного анализа или системы подготовки управляющих программ для станков с ЧПУ, функционирование которых связано с построением и обработкой геометрических моделей. Если немного пофантазировать и пойти дальше, то можно внедрить компоненты C3D Toolkit в конечно-пользовательские приложения для 3D-сканирования и печати, генеративного дизайна с топологической оптимизацией или концептуального проектирования изделий в очках дополненной реальности с управлением мыслями жестами.
Вы сможете лучше разобраться с устройством C3D Toolkit, если будете использовать в работе: открытый доступ к технической документации, периодически обновляемый PDF-мануал, обучающие видеоролики на официальном канале C3D Labs в YouTube (пока их не так много, со временем мы планируем это исправить), а также тестовые приложения, которое мы предоставляем в исходных кодах:

Тестовое приложение для Windows и демо-приложение для Andorid (Картинки кликабельны)
По сути, каждое тестовое приложение — это небольшая система проектирования с реализованными функциями геометрического ядра C3D Modeler. В тестах отсутствует красивый пользовательский интерфейс и весь функционал завязан на командное меню, но это не мешает использовать его по принципу copy-paste, позволяя в кратчайшие сроки создавать рабочие версии проектов для разных операционных систем (Windows, Mac, Linux) с необходимым набором операций двухмерного и трехмерного моделирования.
Если исходные коды вас не очень интересуют, то ознакомиться с результатами совместного использования компонентов C3D Modeler, C3D Vision и C3D Converter можно, скачав бесплатное приложение C3D Viewer для просмотра 3D-моделей в распространенных форматах STEP, IGES, Parasolid X_T, X_B, ACIS SAT, STL, VRML, C3D.
Опыт использования C3D Toolkit
Как видно из истории, изначально геометрическое ядро разрабатывалось в АСКОН для нужд машиностроительной системы КОМПАС-3D. Казалось бы, это и есть «потолок» его использования. На практике же ничего не мешает применять компоненты C3D Toolkit в инженерном ПО с любой другой специализацией. Компания АСКОН это наглядно продемонстрировала на примере создания системы архитектурно-строительного проектирования Renga Architecture. Использование программного обеспечения C3D Labs позволило разработчикам совместного предприятия АСКОН и 1С улучшить функциональные возможности системы и сконцентрироваться над прикладными задачами приложения, не отвлекаясь на решение базовых задач геометрического моделирования:
Максим Нечипоренко, заместитель генерального директора Renga Software:
Одним из важнейших компонентов нашего ПО является математическое ядро. До того, как мы приняли решение о создании Renga, в недрах АСКОН был еще один исследовательский проект по созданию CAD нового поколения. Несмотря на то, что у нас было собственное ядро, на котором написан КОМПАС-3D, перед нами стояла задача исследовать рынок. Проводились масштабные исследования ядер, которые используются в других CAD и которые можно лицензировать. Мы искали что-то еще более эффективное, то, на чем можно будет разрабатывать что-то более современное. Провели исследование и пришли к выводу, что наше ядро довольно хорошее, даже стоящее. Интересным моментом оказалось то, что как только запустился проект C3D Labs, ядро стало лицензироваться другими разработчиками, в том числе внешними. У нас появились и шведские, и корейские заказчики. В итоге было принято решение, что Renga тоже будет на этом ядре.
(выдержка из интервью Альберта Сумина)
Кто ещё применяет C3D Toolkit? На сегодняшний день это, главным образом, разработчики САПР в России и за рубежом. Среди них есть представители машиностроительной, деревообрабатывающей и архитектурно-строительной отраслей, разработчики расчётного софта и приложений для станков с ЧПУ, крупные корпорации, а также представители прогрессивного класса, активно инвестирующие в облачные и мобильные технологии. По запросу последних мы даже перевели параметрический решатель C3D Solver на язык JavaScript:

Браузерное приложение на основе C3D Solver для JavaScript (Картинка кликабельна)
Использование JavaScript позволяет осуществлять расчёты в веб-приложениях на стороне клиента. При этом есть интересный опыт разработки облачного сервиса для 3D-проектирования и дизайна помещений, в котором геометрические вычисления производятся на стороне сервера. Описание проекта представлено в статье на Хабрахабр известного специалиста в области разработки мебельных САПР — Романа Колесникова.
Все эти программы ориентированы на конечных пользователей. Но есть и другие примеры. Так, компания с мировым именем ЛЕДАС из Новосибирского Академгородка, сотрудники которой на протяжении многих лет создавали наукоёмкие технологии для Dassault Systemes, разработала встраиваемый компонент для сравнения геометрии 3D-моделей в различных форматах данных. LEDAS Geometry Comparison на базе C3D Modeler недавно был интегрирован в плагин для системы Inventor. Получилось как бы «ядро в ядре» или своеобразная матрёшка из технологий:
Демонстрационное приложение LEDAS Geometry Comparison (LGC)
А ещё, благодаря наличию у C3D Labs специальной программы поддержки образования, российские вузы получают C3D Toolkit на привлекательных условиях. Как правило, учебные заведения используют «ядерные» технологии в обучении будущих математиков-программистов и разработчиков САПР. Студенты выполняют научно-исследовательские работы и пишут различное вузовское ПО. Есть отдельные примеры выполнения коммерческих проектов на базе C3D Toolkit в рамках малых инновационных фирм, активно создаваемых при университетах.
Коммерческие организации и предприятия:


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