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

RSS

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

Не нравитсяНравится   Рейтинг +4

Основные характеристики OpenGL Optimizer

Компания SGI развивала аппарат для работы с графом сцены в несколько этапов: IRIS Performer, Open Inventor, Cosmo 3D, в каждом из которых предполагалось использование в основном базовых средств. Последний шаг – OpenGL Optimizer [3,4] не отменяет этого подхода, но дополняет его рядом более сложных, но столь же необходимых для высокопроизводительного рендеринга функций:

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

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

OpenGL Optimizer – составная часть набора API с общей маркой OpenGL. Как и последний, он определяется независимым от оконной и операционной системы способом, что обеспечивает интероперабельность и переносимость приложений на OpenGL Optimizer. Это открытый стандарт, поддержанный ведущими отраслевыми экспертами: OpenGL Optimizer включен в реестр открытых промышленных стандартов MCAD, известный как LMVAC (Large Model Visualization API Consortium). Благодаря четко оговоренному механизму расширения API, участники LMVAC имеют возможность вводить новшества и развивать стандарт. В результате, развитие API происходит в интересах всей индустрии, а не только в интересах отдельных компаний, как бывает в случае частных, навязанных одним из производителей «стандартов». Такой подход хорошо зарекомендовал себя в прошлом, сделав OpenGL основным межплатформным графическим стандартом.

В уровневой модульной архитектуре OpenGL Optimizer (рис. 1) специально подчеркивается, что каждая составляющая подсистема может использоваться либо отдельно, либо в сочетании с другими. Например, в одной разработке можно применить только упрощение полигональной сетки, а в другой – высокоточную триангуляцию поверхностей.

Рисунок 1. Архитектура OpenGL Optimizer

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

Упрощение и уровни детальности

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

Хоть и не всегда, но нужно проводить рендеринг всех треугольников модели. Ясно, что для качественной визуализации объекта, находящегося вблизи точки наблюдения, требуется учесть во много раз больше треугольников, чем в ситуации, когда тот же объект расположен на удалении: его изображение вообще может состоять из нескольких пикселей. Рендеринг одного и того же множества вершин модели во втором случае нагрузит графический конвейер совершенно лишней работой, что особенно скажется на этапе преобразований. Разумно также использовать меньше деталей для движущихся объектов – и в этом случае подробная геометрия не столь важна.

Техника создания множественного представления объекта состоит в том, что в графе сцены формируется узел типа LOD – Level-Of-Detail и к нему подвешиваются различные варианты геометрии объекта с разной густотой разбиения. Обычно с увеличением индекса потомка LOD-узла разрешение падает и, соответственно, возрастает скорость его рендеринга. В предельном случае рендеринг объекта возможно вообще не нужно производить, но это уже другая операция – отсечение. Еще один тип узла – csLOD позволяет специфицировать правила выбора варианта геометрии. Эти правила задаются в форме набора диапазонов расстояния до объекта. В ходе выполнения действия обхода графа csLOD действует как переключатель, выбирающий потомка узла LOD по текущей дистанции наблюдения.

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

OpenGL 3.0 и AMD 2

OpenGL Optimizer содержит два типа симплификаторов: первый учитывает топологию объекта и пытается ее сохранить, а второй реализует более прямолинейный алгоритм. Действующий на основе топологии, симплификатор реализует алгоритм SRA – Successive Relaxation Algorithm. Принцип работы состоит в последовательном устранении вершин до целевого счетчика (либо до состояния, когда удалить уже ничего нельзя без нарушения ограничений). Вначале алгоритм пытается удалить вершины, отсутствие которых существенно не деформирует объект, и только потом удаляет значимые для формы вершины до достижения требуемого значения счетчика узлов.. Заметим, что данный тип упрощения полезен не только для специалистов моделирующих в CAD, но и для пользователей и разработчиков Web: по сети можно вначале передавать модель с низким разрешением, а по требованию повышать ее точность.

Более простой и быстрый, но потенциально сильнее искажающий модель симплификатор, базируется на методе, впервые предложенном Яреком Россиньяком (Jarek Rossignac). На вход алгоритма подается трехмерная решетка точек и каждая из вершин объекта переносится в ближайшую точку решетки. Те полигоны, у которых после выполнения операции стягивания оказывается менее трех различных вершин, отбрасываются. Этот метод быстр в силу своей линейности и легко реализуем. Как правило точность, с которой он воспроизводит модель, не отличима от оригинала, если размеры изображений одинаковы. Тем не менее симплификатор на основе пространственной решетки применять выгодно при условии правильного выбора дистанции наблюдения – результат будет вполне удовлетворительным.

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

Таги: ,