Главная » 3D графика » OpenGL – что дальше ?

RSS

OpenGL – что дальше ?

Разбиение поверхностей

Современные интегрированные CAD-системы – это не только средства конструирования и визуализации. На построенных 3D моделях производят анализ технологических решений, автоматически выпускают прототипы. Такого рода задачи решаются численными методами, для которых требуется дискретизация модели в виде натянутой на ее поверхность сетки. Триангуляция (или в более общей форме разбиение) – процесс преобразования кусков параметрических поверхностей в набор треугольников.

Реализованные в OpenGL Optimizer методы разбиения представляют интерес прежде всего потому, что они рассчитаны на поверхности высокого порядка. OpenGL Optimizer – объектно-ориентированная система, поэтому кроме конкретных методов, реализованных в генераторах разбиения, в нем определен обобщенный механизм, с помощью которого пользователь может добавить свой собственный тип генератора. Генераторы разбиения – это объекты-действия C++, применяемые к графу сцены и при его обходе триангулирующие все входящие в него объекты. Каждый генератор опознает тот тип объектов-форм, на который он рассчитан, и добавляет производимые треугольники к графу сцены. В число генераторов разбиения входят следующие.

  • Обобщенный генератор: обработка всех типов параметрических поверхностей, включая определенные пользователем через механизм расширения.
  • Генератор разбиений Nurbs-поверхностей. Nurbs-поверхности могут быть обработаны обобщенным генератором, однако, поскольку это важная и часто используемая форма представления, OpenGL Optimizer имеет специально настроенный на них тип генератора. И тот, и другой генератор дают пользователю контроль за максимальным отклонением хорд триангулированной поверхности от аналитической. Это эффективная мера, гарантирующая качество результирующей сетки, в том числе и с точки зрения аппроксимации кривизны.
  • Генератор для инженерной и научной визуализации. Этот тип генератора применяется в задачах визуализации данных, представленных на пространственной решетке. Довольно часто они привязаны еще и к модели объекта, которую тоже нужно показывать. Например, при проектировании поддерживающего кронштейна неплохо отслеживать, как на нем распределены напряжения. Реализация этого типа генератора основана в OpenGL Optimizer на технике переопределения функций (overload). Генератор совершает преобразование абстрактных данных в геометрическую форму, которую уже можно визуализировать. Для приведенного примера, в каждой точке сетки числовые данные могут быть превращены в цвет, изображающий модуль напряжения, и в эллиптическую икону, представляющую собственные векторы и значения тензора напряжений.

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

Unigine Tropic

Инфраструктура мультипроцессирования

Одной из целей проекта OpenGL Optimizer было продвижение мультипроцессорной технологии, опробованной SGI в графических комплексах высшего класса, на настольные системы. Причем сделать это требовалось таким образом, чтобы средства распараллеливания основывались на стандартах и были мобильны. Это очень важный шаг – сосредоточение всех ресурсов обработки на одной задаче – визуализации. В сегодняшних ОС это не предусмотрено, в них есть только базовые примитивы распараллеливания и аппарат разделения ресурсов между несколькими задачами. Важно также понять, что любая графическая система многопроцессорна по умолчанию – имеет хост и графическую машину. Поэтому даже на однопроцессорном компьютере можно получить выигрыш от использования множественных процессов. К примеру, хост может производить отсечение в тот период времени, когда процесс OpenGL заблокирован и ожидает рассасывания графической очереди.

Аппарат OpenGL Optimizer создает инфраструктуру, упрощающую разработку задач с взаимодействующими процессами. На верхнем уровне можно выделить две группы средств:

  • диспетчеризации и управления процессами;
  • безопасной модификации графа сцены.

Создание мультипроцессорных программ заключается в следующем. Приложение формирует списки объектов-действий, реализующих требуемую функциональность. К примеру, сцена может быть разбита на несколько фрагментов, и рендеринг каждой из них поручен отдельному действию. Список действий передается диспетчеру, который помещает их в очередь. Продвижение действия по очереди управляется его приоритетом, и когда оно оказывается в голове очереди, начинается его выполнение.

Запуск действий вообще говоря происходит параллельно, и чтобы получить эффективную программу, необходимы средства для контроля и управления порядком их выполнения. Весьма вероятно, что придется реализовать зависимости между процессами типа: ‘выполнять A после B’ или ‘подождать окончания C’. В OpenGL Optimizer это осуществляется методами посылки и приема сообщений waitForRequests(), markRequests().

Для координации изменений графа сцены несколькими процессами, в OpenGL Optimizer применяется метод «одного хозяина». Один процесс (обычно это процесс рендеринга) контролирует все модификации. Другие процессы могут только читать из графа, но не могут его менять напрямую. Вместо этого они обращаются к Монитору Транзакций с запросами, включающими полный цикл считывания-обновления, которые помещаются в очередь и обрабатываются в порядке поступления.

Использование OpenGL Optimizer

Исходя из вышеизложенного, можно сделать вывод, что OpenGL Optimizer – многофункциональная система с большим количеством интероперабельных компонентов. Каким способом их лучше всего использовать? Все зависит от разрабатываемого приложения. Если, например, оно самостоятельно выполняет триангуляцию модели, то можно обойтись симплификатором для генерации ее упрощенных вариантов. Но система проявляется во всем своем блеске лишь в том случае, когда задействуются все средства.

Типичное приложение OpenGL Optimizer состоит из двух частей: подготовительной и интерактивной. Первая после загрузки модели может обратиться к OpenGL Optimizer: для извлечения топологических метаданных и для построения нескольких разбиений модели при различных разрешениях. Если в результате разбиения получено слишком большое количество полигонов, можно вызвать симплификатор с целью уменьшения объема геометрической информации. Завершает подготовку генерация пространственной организации сцены – операция, в значительной степени увеличивающая производительность интерактивной фазы.

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

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

Заключение

Не так давно подводились итоги прошедшего года. OpenGL Optimizer получил приз от Computer Graphics World Magazine как самая заметная инновация 1997 г. и вошел в десятку лучших программных продуктов по рейтингу журнала IEEE Computer Graphics and Applications. Представители отечественной компьютерной прессы не скрывают своего скепсиса по поводу множества расплодившихся премий однако в данном случае речь идет о наградах, выданных ведущими журналами по машинной графике.

Copyright © 2000 Виктор Коваленко

Страницы : 1 2 3 4 5 6

Таги: ,