Геометрическое ядро RGK на форуме компании «Топ Системы»
Автор: Сергей Козлов, директор по разработке, Леонид Баранов, директор по развитию технологий 3D моделирования, ЗАО "Топ Системы".
На прошедшем 24 мая форуме компании «Топ Системы» одна из основных сессий была посвящена представлению продукта компании «Топ Системы» - геометрического ядра RGK. Сессию вели директор по разработке компании Сергей Козлов и директор по развитию технологий 3D моделирования Леонид Баранов. Он, в частности, является руководителем группы разработки геометрического ядра RGK.
В первой части секции Сергей Козлов рассказал об истории создания и текущем статусе геометрического ядра.
Разработка геометрического ядра RGK, по сути, началась в далёком 1984 году, когда в Московском станкоинструментальном институте (позже МГТУ «Станкин») была организована группа по исследованиям в области геометрического моделирования и разработке 3D ядра под руководством доцентов А.В. Рыбакова и В.Ю. Судзиловского. Именно с того момента Леонид Баранов начал заниматься этой работой в качестве математика-программиста, а позже, после завершения учёбы в Станкине, возглавил эту группу. Результат работы оказался существенным. В 1995 году была выпущена версия T-FLEX CAD, в которой функциональность 3D моделирования обеспечивалась собственным геометрическим ядром. Ресурсов для ведения столь наукоёмкой и дорогостоящей разработки у компании на тот момент было недостаточно. Одновременно с этим представилась возможность лицензировать геометрическое ядро ACIS, а потом и Parasolid. Так, в 1996 году была выпущена 6-я версия T-FLEX CAD на геометрическом ядре ACIS, а в 1998-м году вышла версия 7 на ядре Parasolid. Таким образом, разработчики T-FLEX CAD получили возможность поработать со всеми основными геометрическими ядрами и оценить их архитектуру и особенности.
В 2011 году МГТУ «Станкин» получил контракт на разработку российского геометрического ядра в рамках развития программы отечественного станкостроения. В качестве задела этой работы были взяты наработки компании «Топ Системы». С целью обеспечения наиболее современного уровня решения алгоритмы ядра были практически полностью модернизированы, но основные подходы к реализации сохранены. По завершении работы по контракту в 2013 году компания «Топ Системы» не остановила разработку RGK (именно в то время получил название этот продукт), а продолжила его развитие.
Сергей Козлов и Леонид Баранов представляют геометрическое ядро RGK
Геометрическое ядро RGK нашло своё применение в проекте «Гербарий», который компания «Топ Системы» выполняла по заказу Фонда перспективных исследований (ФПИ) в 2015-2016 годах, а также в проекте СПЖЦ «Цифровое предприятие» («САРУС») — проекте, первый этап которого завершился совсем недавно. В разработке этого проекта компания «Топ Системы» приняла самое активное участие.
В настоящее время компания «Топ Системы» получила все возможности по самостоятельному развитию и выводу на рынок RGK в качестве коммерческого продукта. Продукт будет поставляться сразу для нескольких платформ, включая различные версии Linux, в том числе отечественные сертифицированные версии. Поставка продукта планируется в виде библиотеки классов для использования на языке программирования C++, а также всех компонентов, необходимых для удобного применения в конечных системах. Комплект инструментов разработчика (SDK) включает в себя:
- исполняемые модули;
- библиотечные и заголовочные файлы, необходимые для сборки конечного приложения;
- файл электронного руководства в виде гипертекстовой справки;
- набор примеров в исходных кодах;
- исполняемую программу RGKWorkshop — тестовую и отладочную оболочку, являющуюся одновременно и средством анализа, и средством отладки геометрических моделей;
- описание формата хранения моделей RGK - RGK_XML.
Отдельно стоит отметить, что формат хранения данных RGK_XML является открытым и специфицированным. Он имеет понятную структуру, соответствующую общим принципам организации модели данных RGK. Формат может быть использован с целью стандартизации для обеспечения представления точной геометрической модели данных объектов.
Вторую часть секции вёл Леонид Баранов. Он рассказал о принципах построения модели данных геометрического ядра RGK, его архитектурных особенностях и наиболее сложных и интересных задачах, которые приходится решать разработчикам модуля. Рассказ сопровождался большим количеством иллюстраций и демонстрацией сравнительных тестов.
Геометрическое ядро RGK обеспечивает моделирование геометрических объектов по классической схеме граничного представления (B-Rep) с «точной» геометрией – с использованием аналитического представления кривых и поверхностей разных типов. Такое представление позволяет моделировать объекты с высокой точностью, одновременно обеспечивая возможность работы с толерантной геометрией, когда вместе с объектами модели хранится точность, с которой они были рассчитаны. Параметры точности толерантной геометрии применяются при всех вычислениях, выполняемых в коде ядра. Данная особенность обеспечивает возможности по сохранению целостности геометрической модели даже для очень сложных геометрических форм и невысокой точности исходных данных.
Геометрическое ядро обеспечивает выполнение следующих основных функций:
- хранение геометрической модели (геометрии/топологии тел, поверхностей, кривых);
- создание и редактирование геометрической модели;
- управление идентификацией и атрибутами геометрической модели;
- контроль целостности и качества геометрической модели;
- измерение и анализ геометрической модели;
- построение плоскогранных представлений (тесселяции) модели с целью визуализации или подготовки данных для генерации расчётных (CAE) сеток;
- генерация проекций и видов.
Классы геометрического ядра RGK, доступные для использования в конечных приложениях, обеспечивают как низкоуровневую функциональность для создания и редактирования геометрии, так и высокоуровневые специализированные функции, которые в ядре называются генераторами. Так, в составе библиотеки классов ядра имеются следующие генераторы:
- примитивы (призма, тор, сфера, цилиндр, конус);
- кинематические операции (вытягивание, вращение, по траектории, по сечениям);
- булевы операции (глобальные, локальные, селективные);
- операции сглаживания различных типов (фаски, рёберное сглаживания, трёхгранное сглаживание, сглаживание граней);
- операция оболочки/тела смещения/придания толщины;
- операция уклона граней;
- операции удаления/замены/трансформации граней (так называемые операции прямого моделирования);
- операции сшивки/разрезания;
- операции копирования/трансформации тел, в том числе с использованием различных масштабов по осям;
- ряд низкоуровневых операций с телами, а также множество операций с кривыми.
Функциональность многих генераторов в RGK весьма развитая. Остановимся на описании особенностей некоторых из операций, поддерживаемых ядром.
Например, в генераторе «по траектории» и «по сечениям» поддерживается ряд довольно продвинутых опций. Возможно задание законов кручения и масштабирования протягиваемого контура как отдельно, так и в комбинации (рис. 1), а также задание нескольких траекторий и различных способов их синхронизации.
Рис. 1. Протягивание по траектории с масштабированием и/или кручением
Кроме того, поддерживается обработка изломов на траектории движения (рис. 2,3).
Рис.2. Обработка изломов при протягивании по траектории
Рис.3. Протягивание по траектории по трём направляющим
При построении поверхностей в ядре особое внимание уделяется их качеству — как с точки зрения соблюдения требований точности построения, так и в плане минимизации количества управляющих точек и регуляризации параметризации. Поскольку разработчики RGK имеют прямой доступ к функциональности, пожалуй, лучшего твердотельного ядра в мире — Parasolid, это позволяет проводить непредвзятые исследования и сравнение результатов. В настоящее время качество алгоритмов генерации поверхностей в RGK в целом сопоставимо с этим ядром и продолжает постоянно совершенствоваться, так как текущей задачей разработчиков является достижение функционального паритета с лучшими мировыми ядрами. В связи с этим в процессе разработки проводится большая исследовательская работа по анализу качества алгоритмов по сравнению и с другими конкурирующими решениями «тяжёлого» класса.
Рис. 4. Задание граничных условий в генераторе «по сечениям»: G2-гладкое сопряжение поверхностей
Как известно, одним из наиболее сложных как в математическом, так и алгоритмическом отношении классом задач геометрического моделирования являются задачи сглаживания (скругления) поверхностей. Учитывая это, при разработке ядра RGK особое внимание уделяется именно данной функциональности. В настоящее время в сглаживании рёбер поддерживаются практически все основные режимы управления формой, известные по функциональности так называемых систем «тяжёлого» класса: сечение постоянного и переменного радиуса; заданная ширина, как в постоянном, так и переменном режимах; переменные сечения с кривыми второго порядка (эллипсы, параболы, гиперболы); режимы гладких переходов и сохранения рёбер на всех типах сглаживаний; сохранение кривизны — G2 гладкость (рис. 4); задание отступов от вершины при вершинном сглаживании. Особенно стоит отметить архитектуру алгоритма, которая позволяет в едином формализме поддерживать сглаживание как рёбер, так и граней и трёхгранное сглаживание, тем самым обеспечивая очень высокую гибкость алгоритма и возможность развития. Большая работа проделана в части топологической робастности алгоритма сглаживания. Например, в зависимости от заданного радиуса алгоритм умеет делать большие перестройки топологии тела (рис. 5,6).
Рис. 5. Алгоритм «не цепляется» за родительские ребра - его поведение определяется радиусом
Рис. 6. Выход алгоритма сглаживания на соседние грани при большом радиусе поверхности (режим сохранения ребра)
Является допустимым построение сглаживания большего радиуса по меньшему. Такая задача возникает довольно часто при практическом моделировании (рис. 7).
Рис.7. Обработка участков с радиусом кривизны меньшим, чем текущий радиус сглаживания
Поддерживаются различные «переполнения», то есть переходы на гладкие соседние грани, а также, при необходимости, сохранение рёбер (рис. 8-10).
Рис. 8. Поддержка различных сценариев при выходе на гладкие рёбра
Рис. 9. Сохранение ребра при работе с большими радиусами сглаживания
Рис. 10. Режим сохранения острых рёбер на переменном сглаживании (обеспечивается G1 гладкость всей последовательности граней)
Особого внимания заслуживает способность алгоритма сглаживания RGK обрабатывать вырождение топологических элементов (рис. 11).
Рис. 11. Обработка исчезновения граней в предельном случае
Поддерживается сложная топология перекрытий сглаживаний, что значительно повышает качество работы алгоритма при реальном применении (рис. 12).
Рис.12. Пример поддержки перекрытия сглаживаний из нескольких граней
Интересные результаты достигнуты при построении переменного сглаживания. В частности, поддерживается обработка перекрытия сглаживающих последовательностей с перевычислением закона изменения радиуса в области перекрытия (рис. 13).
Рис.13. Выпукло-вогнутое сглаживание переменным радиусом
Естественно, алгоритмами RGK реализована поддержка различных сечений переменного радиуса (рис. 14).
Рис. 14. Использование переменных законов смещения при рёберном сглаживании в RGK
Рис. 15. Использование управления типом кривой сечения через выпуклость-дискриминант конического сечения (переход от отрезка прямой к гиперболе)
Рис. 16. Поддержка G2 гладкости на переменном и постоянном радиусах
Рис.17. Поддержка режима постоянной ширины сечения для разных типов сечения
Рис.18. Пример работы режима заданной ширины
Кроме того, разработана математика построения гладких «затягиваний» n-угольных областей (рис. 19).
Рис. 19. G1 затягивание n-угольных областей
Эти разработки позволяют, в частности, решать задачу построения поверхностей с отступами от вершины (setback) — рис. 20 и 21.
Рис.20. Применение алгоритма затягивания области для задачи отступов
Рис. 21. Наглядный пример задачи отступов
Алгоритм сглаживания работает как на твёрдых, так и на поверхностных телах — в RGK нет различий между этими топологиями (рис. 22).
Рис. 22. Сглаживание ребра поверхностного тела
В ядре RGK функциональность сглаживания граней реализована, по сути, тем же самым алгоритмом, который выполняет сглаживания рёбер, — отличие только в интерфейсе верхнего уровня, но при этом решаются классические задачи сглаживания граней (рис. 23-25).
Рис.23. Сглаживание граней, принадлежащих разным телам
Рис. 24. Сглаживание граней с удалением сложной топологии
Рис. 25. Пример трёхгранного сглаживания – поверхность, касательная к трём стенкам
Так как ядро RGK изначально разрабатывается с целью конкуренции с лучшими мировыми промышленными ядрами, в число инструментов ядра внесена различная функциональность, которая требуется прикладным системам «тяжёлого» класса для решения различных специальных задач. Например, задача построения уклона граней формулировалась изначально как задача с указанием фиксированных рёбер произвольной геометрии и возможностью изменения топологии тела в процессе операции (рис.26).
Рис. 26. Построение уклона граней с фиксированным ребром и изменением топологии модели
Уклон относительно поверхности разъёма, конечно, тоже поддерживается, как частный случай более общей постановки (рис. 27).
Рис.27. Построение уклона грани с заданной поверхностью разъёма
Другой пример: в булевых операциях помимо традиционного «глобального» режима операций (объединение, вычитание и пересечение) предусмотрены режимы локальных операций, когда приложение может указать, с какими именно гранями надо проделывать селективные булевы операции с возможностью выбора частей исходных тел, которые останутся в результате. Кроме того, предусмотрена обобщённая булева операция, которая может формировать топологическую модель, представляющую тела, контактирующие друг с другом по граням и рёбрам. Важно также отметить, что булевы операции работают как над твёрдыми, так и над поверхностными телами, а также их комбинациями (рис. 28-32).
Рис. 28. Булевы операции над поверхностными телами
Рис. 29. Локальные булевы операции над заданным набором граней тела
Рис. 30. Селективная булева операция (вычитание)
Рис. 31. Селективная булева операция (объединение) над твёрдым и поверхностным телами
Рис. 32. Обобщённая булева операция (объединение): красным цветом выделены грани контакта
В наборе инструментов булевых операций поддерживается функциональность по работе с экземплярами тел (instancing) – техники оптимизации булевой операции над массивами тел, геометрия которых отличается только положением экземпляров в пространстве. Кроме этого, поддерживаются операции «по образцу» (patterning), когда элементы размножаются по заданной грани (рис. 33).
Рис. 33. Размножение граней тела операцией «массив граней» (patterning)
В алгоритмах геометрического ядра повсеместно и активно используются многопоточные вычисления. Эта возможность была заложена в алгоритмы ядра изначально, так как является одним из основных инструментов повышения общей эффективности работы конечного приложения. При этом RGK поддерживает как внутреннее распараллеливание вычислений (когда параллельные потоки запускаются автоматически), так и внешнее (когда параллельные потоки создаются в прикладном коде за пределами функций ядра). Параллельные вычисления позволили на ряде сценариев получить многократный прирост производительности по сравнению с существующими геометрическими ядрами (рис. 34, 35).
Рис. 34. Пример работы алгоритмов булевых операций RGK
Рис. 35. Характерный график загрузки процессора на задаче с предыдущего рисунка
Похожее поведение наблюдается и на большинстве других вычислительно ёмких задачах. В частности, на задачах проверки пересечения тел в сборках, расчёта расстояний и построения проекций с удалёнными невидимыми линиями (рис. 36).
Рис. 36. Проекция с удалением невидимых линий сборки крана (9356 тел) и график загрузки процессора на этой задаче
В настоящее время комплект разработчика RGK (SDK) готов к передаче сторонним разработчикам для пробного использования. Желающие попробовать RGK могут обратиться в компанию «Топ Системы».
Помимо работы над самим ядром выполняются связанные работы в T-FLEX CAD 17. В частности, формат RGK (RGK_XML) теперь поддерживается в составе функций импорта/экспорта как через пользовательский интерфейс системы, так и при помощи Open API. Кроме этого, доступ к объектам модели (телам, кривым) в формате RGK можно получить, воспользовавшись новыми функциями в составе Open API T-FLEX CAD. Эти функции системы позволяют получить геометрические объекты CAD-системы в формате RGK наиболее удобным способом. Последнее обновление T-FLEX CAD 17 поддерживает эти новые возможности.
Работа над ядром идёт высокими темпами, так как компания «Топ Системы» ставит перед собой задачу в максимально короткие сроки достичь уровня существующих западных мировых лидеров в области геометрического моделирования, а возможно, и превзойти этот уровень.