Компания «Топ Системы» продолжает рассказывать о масштабной и разноплановой работе команды разработчиков геометрического ядра RGK за прошедший год. Изменения затронули как внешнюю функциональность API, так и базовые внутренние алгоритмы. В первой части статьи («САПР и графика» № 5’2026) были рассмотрены ключевые направления развития ядра. Во второй части авторы подробнее остановятся не только на новой функциональности, но и на важных внутренних улучшениях и алгоритмических решениях, которым была посвящена значительная доля усилий команды.
Оптимизация алгоритмов ядра
Помимо развития функциональности на всех уровнях разработчики RGK традиционно большое внимание уделяют оптимизации алгоритмов геометрического ядра. Как уже неоднократно говорилось, задачей разработки является получение промышленного инструмента высокого качества на замену подобных библиотек ведущих мировых разработчиков. Поэтому вопрос оптимизации как по скорости, так и по памяти является крайне важным и с течением времени занимает и будет занимать в будущем одно из центральных мест в процессе разработки. Приведем некоторые результаты, которые удалось получить в новой версии (рис. 62).

Рис. 62. Иллюстрация прогресса в ускорении наиболее ресурсоемких фаз булевых операций по сравнению с версией прошлого года
Достигнутые ускорения получены и за счет оптимизации вычислений «низкого» уровня — как тех, что приведены на рис. 63, так и за счет более аккуратной работы с точностями кривых и точек, получаемых алгоритмами для решения задач (рис. 64 и 65).

Рис. 63. Иллюстрация достигнутого прогресса при вычислении параметров на сплайн-поверхностях в сравнении с состоянием прошлого года и актуальной версией известного иностранного ядра

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

Рис. 65. Иллюстрация уменьшения «тяжести» кривых пересечения за счет оптимизации точности вычислений (экономится как память, так и время расчета)
Кое-что принципиально новое
Как уже упоминалось в начале статьи (см. часть 1), в новой версии разработан ряд принципиально новых инструментов, расширяющих область применения геометрического ядра. В первую очередь нужно рассказать о появлении в RGK поддержки «гибридной» геометрии. Речь идет о поддержке возможности использовать при моделировании в рамках общего формализма B-rep сеточных поверхностей и полилиний. Начиная с новой версии в RGK можно создавать и работать с гранями, представленными треугольными сетками, и с ребрами, представленными полилиниями. В отличие от подобных решений в других ядрах, в RGK разработана уникальная технология, позволяющая работать с такой геометрией при помощи ровно того же API, что и при «точном» моделировании. То есть с точки зрения внешнего приложения принципиально ничего не меняется — в теле те же ребра и грани, но под ними лежит геометрия в полигональной форме. Самым важным моментом в этом представлении является тот факт, что в одном теле (твердом или листовом) может быть одновременно геометрия обоих типов: и точная и сеточная. И ядро теперь умеет оперировать с такими гибридными телами ровно так же, как раньше работала с точными. Например, можно делать булевы операции над гибридными телами, строить проекции с удаленными невидимыми линиями, рассчитывать масс-инерционные характеристики, проводить анализ пересечения и т.д. Понятно, что, как частный случай, может быть создано полностью полигональное тело и, как и раньше, полностью «точное». Важно, что в гибридных телах работает вся та же логика толерантных ребер и вершин, что раньше была разработана для точных представлений. То есть удалось добавить в ядро поддержку полигональных геометрий совершенно естественным и прозрачным образом — без изменения API генераторов и принуждения прикладного ПО специально обрабатывать случай полигональной геометрии каким-то особым образом. Понятно, что с точки зрения практической полезности, работа с сетками не ограничивается функциональностью общего назначения — требуется и дополнительная функциональность, учитывающая специфику этого типа геометрии. Опять же скажем сразу, что речь идет о первой версии этой принципиально новой функциональности и часть полезных функций будет доступна в рамках ближайшего релиза, а часть — в будущих обновлениях ядра. Но сейчас предлагается рассмотреть более подробно и, как у нас принято, с иллюстрациями, что умеет делать RGK с гибридными телами в новой версии. В первую очередь можно создать «сеточное» тело из внешней сетки, причем сделать это разными способами. Например, есть возможность загрузить в ядро сетку в формате STL и позволить алгоритмам ядра декомпозировать ее на грани и ребра, то есть сформировать топологию тела. На рис. 66 показана работа такой функции на известном примере с формированием полностью корректного B-Rep представления твердого тела.

Рис. 66. Иллюстрация функции RGK, которая конвертирует STL-модель в сеточное тело, с которым можно выполнять различные операции
В данном случае стоит обратить внимание на правую часть рисунка, где сетка разрезана ребрами: каждый такой участок — это отдельная грань результирующего тела, а соответственно каждое ребро — ребро такой модели. Сетка разбивается на отдельные грани, близкие к плоским, в которых вместо традиционной поверхности лежит сеточная поверхность.
На рис. 67 приведен еще один пример работы алгоритма преобразования входной сетки STL в тело RGK.

Рис. 67. Пример работы функции преобразования неструктурированной сетки в твердое тело
Приведенные примеры показывают самый простой способ получения тела с сеточной геометрией. Как уже отмечалось, он не единственный. В этом смысле сеточная геометрия не сильно отличается от точной: фактически в ядро только добавился дополнительный тип геометрии наряду с традиционными типами. То есть помимо плоскости, сферы, тора, цилиндра, конуса и NURBS, есть еще и треугольная сетка. Например, можно удалить грань тела и вместо нее пришить сеточную грань или листовое тело, содержащее и сеточные и точные грани, полученные тем или иным способом (рис. 68).

Рис. 68. Пример работы операции сшивки листового «точного» тела и листового тела с «сеточными» гранями с формированием твердого «гибридного» тела
Модели с сеточной геометрией можно создавать преобразованием из точного представления через фасетер. Можно также использовать стандартные низкоуровневые функции создания топологии тела с передачей сеточной геометрии в качестве одного из стандартных типов геометрии. Например, можно всю сетку модели кролика передать в функцию создания граней и получить твердое тело с одной замкнутой гранью, а потом разрезать эту грань на произвольный набор граней при помощи операций проецирования и встраивания ребер. Важно, что это те же самые вызовы API, что используются для работы с любой другой геометрией. Стоит отметить, что если сетка не замкнута, то такие тела будут иметь топологию листового тела — точно так же, как в «точном» случае. После формирования такого тела ядро позволяет производить с ним булевы операции без ограничений. Причем операнды, как уже говорилось, могут быть сеточными, точными или гибридными телами — алгоритм булевых операций один и тот же для всех типов. Такой универсальности удалось добиться во многом благодаря мощной парадигме толерантного моделирования, которая изначально заложена в архитектуре ядра. Действительно, линия пересечения точного цилиндра и сеточной грани — это просто ребро с меньшей точностью, чем это было бы, если бы вместо сетки использовалась точная поверхность (рис. 69-71).

Рис. 69. Пример вычитания из сеточного тела набора точных тел-цилиндров

Рис. 70. Пример на замену граней тот же, что был выше, но в качестве заменяющей используется сеточная геометрия
Так как структурно модель тела не претерпела изменений при добавлении «гибридности», как и следовало ожидать, функциональность ядра общего назначения продолжает работать на таких телах без изменений, так сказать, «из коробки». На рис. 72 приведен пример работы функции вычисления масс-инерционных характеристик на модели, представленной на рис. 71.

Рис. 71. Чуть более экзотический пример булевой операции с получением гибридного тела

Рис. 72. Пример расчета характеристик твердого тела
Как можно предположить из вышесказанного, функциональность построения проекций с удаленными невидимыми линиями работает, в том числе, и с гибридными телами (рис. 73).

Рис. 73. Примеры работы функциональности проецирования с удаленными невидимым ребрами на телах с гибридной геометрией (красным цветом на исходной модели помечены аналитические поверхности)
Но есть и специфичные алгоритмы, разработанные для сеточных геометрий. Например, алгоритм затягивания дыры в полигональной грани — листовом теле (рис. 74).

Рис. 74. Пример работы алгоритма затягивания дыры на полигональной сетке в новой версии RGK
Этот алгоритм в настоящее время умеет затягивать не только односвязные «дыры». Ниже приведен простой пример работы этого алгоритма на многосвязной области. В конфигурации с так называемыми островами (рис. 75).

Рис. 75. Пример работы функциональности затягивания островной области на сеточных гранях
Разработанная функциональность обладает значительной гибкостью и позволяет решать различные задачи достраивания сеточных геометрий на основе существующей в модели сеточной геометрии. Приведем еще несколько примеров работы этих инструментов (рис. 76).

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

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

Рис. 78. Пример работы алгоритма затягивания области с полигональной разрывной границей
Важным моментом, который стоит отметить, является возможность фасетера ядра получать согласованную по границам сетку на гибридных телах. Это важная возможность, которая позволяет корректно использовать такие геометрии в различных приложениях, например в модулях CAE или CAM (рис. 79).

Рис. 79. Примеры работы фасетера на гибридных телах
Как уже говорилось ранее, разработка функциональности гибридного моделирования еще не полностью завершена. Соответственно, доработки будут вестись в двух направлениях. Во-первых, в направлении обеспечения поддержки сеточной геометрии в различных операциях ядра. Например, в построении оболочек, уклонов, замене граней и других операциях. Во-вторых, в развитии алгоритмов, специфичных для сеток. Важно отметить, что B-rep модель, используемую в RGK, удалось естественным образом обобщить с целью обеспечения поддержки сеточной геометрии. И это является в определенном смысле уникальным достижением команды разработки и показателем гибкости и общности архитектуры ядра в плане классов решаемых задач.
В статье «Геометрическое ядро RGK: открыто о сложностях и достижениях» («САПР и графика» № 6 и 7’2025) мы писали про технологию построения аппроксимирующей поверхности, как мощного инструмента RGK, разрабатываемого для решения различных задач поверхностного моделирования общего вида. За прошедший год эта работа продвинулась далеко вперед, несмотря на (в значительной степени) поисково-исследовательский ее характер. В связи с этим в новой версии ядра, помимо использования этой математики в различных внутренних алгоритмах для приложений, использующих ядро, стала доступна функциональность построения «поверхности-заплатки» заполняющей область между гранями тела с соблюдением заданных условий геометрической гладкости (G0, G1, G2) на границах, а также функциональность замены набора «гладко» состыкованных граней (в смысле допуска по углу уклонения нормалей или кривизны) одной поверхностью с заданной точностью. Рассмотрим более подробно полученные результаты в этой области. В первую очередь стоит отметить новый G2-решатель, который позволил повысить скорость и точность получаемых решений (рис. 80-82).

Рис. 80. Пример работы нового решателя в типовой задаче генерации поверхности

Рис. 81. Пример работы функции построения поверхности «заплатки» с разными условиями непрерывности на различных границах
На рис. 82 на диаграмме «зебра» заметно выполнение условий по G2 через верхние ребра, а также нарушение условий G1 на боковых ребрах — ровно так, как и было задано на генерацию.

Рис. 82. Пример работы функции построения поверхности «заплатки» с разными условиями непрерывности на различных границах на разрывном контуре
Приведем результаты улучшений по скорости генерации поверхностей «заплаток» в новой версии в сравнении с прошлой и конкурирующим решением (рис. 83 и 84).

Рис. 83. Иллюстрация изменения скорости генерации поверхности (2025 год)

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

Рис. 85. Примеры работы функции построения заменяющей поверхности с одновременным встраиванием ее в тело вместо заменяемых граней
И еще на одном аспекте в разработке новой версии RGK стоит остановиться особо. Вскользь об этом упоминалось в предыдущих статьях, но, возможно, стоит рассказать подробнее о технологии формирования тестов для ядра. Общая схема этой технологии не меняется несколько лет, но в новой версии она получила значительное расширение и развитие. Речь идет о получении тестовых скриптов для RGK из процесса пересчета моделей T-FLEX CAD. Схема довольно проста: в код параметрического пересчета операций T-FLEX CAD по определенным условиям вписано обращение к функциям RGK — аналогам функций ядра Parasolid. Полученные таким образом тестовые скрипты по реальным данным от пользователей служат основой тестовой базы RGK. Важно отметить, что это не некие unit-тесты, а именно реальная геометрия из промышленности, созданная при помощи одного из лучших промышленных ядер в мире. Нередко на пределе возможностей этого ядра. То есть, когда мы говорим при разработке RGK, что наша задача — соответствовать лучшим мировым технологиям, — это не пустые слова: мы в каждодневном режиме проводим сравнение с этими технологиями на реальных тестах. Такой подход в настоящее время позволяет начать работы по широкому внедрению ядра RGK в продукты компании «Топ Системы».
Вместо заключения
В ближайшее время новая версия геометрического ядра RGK станет доступной как для промышленного применения, так и для тестирования. Уточним, что за последнее время появились коммерческие продукты, которые используют RGK в качестве основного инструмента моделирования. В приведенной статье мы постарались продемонстрировать, что за прошедший год была проведена значительная и многоплановая работа. Были улучшены и оптимизированы как базовые алгоритмы ядра, так и различные инструменты высокого уровня. Но, с нашей точки зрения, произошло еще одно важное изменение в развитии этого инструмента — от парадигмы «догнать» мировых технологических конкурентов происходит плавный переход к парадигме «развить новые технологии». Появление гибридного твердотельного моделирования и значительный прогресс в алгоритмах создания сложных поверхностей показывают это качественное изменение. В рамках развития будущих версий просматривается еще несколько приятных для разработчиков приложений технологических «сюрпризов». Конуры некоторых из них можно угадать уже сейчас. Конечно, важно понимать, что работы еще много, но и цели остаются максимально амбициозными. Темп разработки от версии к версии сохраняется на высоком уровне, и это приносит свои плоды.




