3. Графический конвейер .

 Шесть этапов работы 3D-конвейера.

Графический конвейер.

Элементы трехмерной сцены. В общем виде трехмерную сцену можно представить как набор отдельных групп элементов: группы трехмер­ных объектов, группы источников освещения, группы применяемых текстурных карт, группы камер.

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

Источник освещения  может обладать следующим набором свойств (полностью или частично): координатами в пространстве сцены, ори­ентацией (направленностью), типом излучения (фоновым, точечным и т. п.), цветом и алгоритмом изменения светового излучения.

Камера  представляет собой точку, откуда наблюдатель обозревает трехмерную сцену. Почему же предпочитают использовать термин камера? Дело в том, что наблюдатель-человек обладает стереоскопи­ческим зрением, а камера имеет только один «глаз». Поэтому глубину сцены приходится имитировать на плоском экране с помощью раз­личных ухищрений. Плоскость, в которой расположена камера, назы­вается плоскостью проецирования , или картинной плоскостью. Камера обладает свойствами координат в пространстве сцены, целевой точкой, углом зрения, углом поворота. Линия, соединяющая камеру и целевую точку, называется линией визирования . Угол поворота рассчитывается относительно оси  линии визирования.

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

Аппаратные средства. В самом общем виде современный ускоритель ЗD-графики должен иметь блок геометрических преобразовании расчета освещения (геометрический процессор), блок механизма установки примитивов, блок обработки текстур и блок обработки буфера кадра. Геометрический процессор обрабатывает примитивы и строит   проекцию трехмерной сцены. Блок расчета освещения формирует данные о параметрах освещения для вершин примитивов.

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

Программные интерфейсы. Скорость и качество обработки трехмер­ной сцены во многом зависят от совершенства инструкций, передаваемых приложением графическому ускорителю. Такие инструкции объединены в специализированные прикладные программные библиотеки (Graphics API). С одной стороны, инструкции должны учитывать особенности построения аппаратной части графического адаптера. С другой стороны, конструкция графического адаптера должна соответствовать возможностям API.

     Точного соответствия между аппаратурой и API не бывает: иногда разработч­ики видеокарты опережают время и вводят функции, которые не поддерживаются действующими API. Часто в API появляются инструкции, которые не могут быть выполнены конкретным графическим адаптером. Поддержка API реализуется через драйвер видеокарты. Бывает, что разработчики игр пытаются использовать функции видеокарты, недоступные через стандартную версию API. В этом  они создают собственные мини-драйвер.

   Совокупность аппаратных и программных средств обработки трехмерных сцен

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

Шесть этапов работы 3D-конвейера.

 

Большинство приложений трехмерной графики, в том числе игр, при построении объемных сцен придерживаются определенной последо­вательности действий, в совокупности составляющей ЗD-конвейер. Итогом работы ЗD-конвейера является отрисовка (рендеринг) резуль­тирующего изображения на дисплее компьютера. Группу операции, выполняющих обособленные промежуточные действия, принято назы­вать этапом, или стадией ЗD-конвейера. Описываемая ниже после­довательность операций отнюдь не является жестко заданной, а ско­рее общепринятой в современных графических подсистемах. При конкретной реализации на программном и аппаратном уровнях могут появляться существенные отличия, однако смысловое содержание блоков практически не меняется. Итак, на сегодняшний день процесс  визуализации трехмерной сцены на экране компьютера выглядит  в общих чертах следующим образом.      

Первый этап. Здесь определяется состояние объектов, принимающих участие в сцене, которую необходимо отобразить. На первый взгляд к самой графике этот этап отношения не имеет. На самом деле он явля­ется определяющим, ибо состояние объектов и их взаимное положе­ние формируют логику последующих действий программы. Напри­мер, если вашего персонажа в игре уже «убили», какой смысл вообще выводить трехмерную сцену? С каждым объектом в сцене связана соответствующая текущему моменту геометрическая модель. То есть объект один (например, некий монстр), но с ним сопоставляются раз­ные геометрические модели в зависимости от состояния — жив, ранен убит, трансформировался в другой объект и т. д. Практически все опе­рации на первом этапе выполняет центральный процессор. Резуль­таты его работы пересылаются в графический чипсет посредством драйвера.

Второй этап. Происходит декомпозиция (разделение на примитивы) геометрических моделей. Внешний вид объекта формируется с помо­щью набора определенных примитивов. Чаще всего в роли примитива выступает треугольник как простейшая плоская фигура, однозначно располагаемая в трехмерном пространстве. Все прочие элементы состоят из таких треугольников. Таким образом, можно утверждать, что по большей части термины «полигон» и «треугольник» примени­тельно к игровой SD-графике суть синонимы.

Современные графические процессоры умеют выполнять дополни­тельные операции, например тесселяцию (Tesselation), то есть разде­ление исходных треугольников на более мелкие. Некоторые графи­ческие чипсеты могут аппаратно обрабатывать геометрические модели, построенные на основе параметрических поверхностей (меха­низм RT-Patches). Часть графических процессоров умеет превращать плоские треугольники в трехмерные поверхности путем «выдавли­вания» в третье измерение (механизм N-Patches).

Итоговый результат операций второго этапа пересылается в блок трансформаций и освещения (Transform&Lighting, T&L) геометри­ческого процессора.

Третий этап. В блоке T&L на аппаратном уровне к вершинам треуголь­ников применяют различные эффекты преобразований и освещенно­сти. Содержание операций блоков T&L новейших графических чип­сетов можно динамически изменять посредством вершинных шейдеров (Vertex Shaders) — специальных микропрограмм, включаемых в код игры. То есть сегодня персональный компьютер в дополнение к центральному процессору получил полноценный программируемый графический процессор. По завершении операций трансформации и расчета освещенности параметры вершин нормализуются и приводятся к целочисленному виду.

Четвертый этап. На данном этапе происходит так называемая уста­новка примитивов (Triangle Setup). Графический процессор пока ничего не знает о свойствах треугольников, поскольку обрабатывал вершины по отдельности. Теперь необходимо «собрать» вершины в треуголь­ники и преобразовать результаты в координаты и цвет каждого пик­села, а также отсечь невидимые области.

В ходе «сборки» определяется видимость объектов с позиции камеры. Полигоны, находящиеся ближе к камере, могут загородить более уда­ленные полигоны. Для хранения информации о степени удаленности объекта от плоскости проецирования используют специальный буфер глубины (Z-буфер). Современные графические процессоры применяют различные механизмы отсечения невидимых полигонов на ранних эта­пах ЗВ-конвейера с тем, чтобы избежать излишних операций. Дан­ные буфера глубины обрабатываются специализированными блоками графического процессора. В конечном счете, на выходе блока геомет­рических преобразований получают проекцию трехмерной сцены на плоскость визуализации. Координаты и исходный цвет видимых пик­селов передаются в текстурный конвейер (Texture Pipeline).

Пятый этап. Графический  чипсет может иметь несколько параллель­ных текстурных конвейеров. В каждом из них происходит наложение текстур различного типа, в том числе и тех, которые сами не отобра­жаются (например, карты высот), а служат для модификации других текстур. На этом этапе в  современных   чипсетах возможно исполне­ние пиксельных шейдеров (Pixel Shaders) — специальных микропрог­рамм, определяющих порядок смешивания текстур, полученных на выходе из каждого конвейера. Здесь также учитывается информация (полученная на этапе установки примитивов) о принадлежности пик­села к определенному треугольнику. В целом указанные операции составляют суть процесса визуализации (рендеринга).

Шестой этап. На заключительном этапе работы ЗD-конвейера к полу­ченному в текстурном блоке плоскому изображению применяют опе­рации устранения дефектов (например, часто используют билиней­ные, анизотропные и другие фильтры). Операции конечной обработки применяют какой-либо эффект (например, туман) к целиком сформи­рованному изображению. Перед выводом в буфер кадра в последний раз проверяется видимость пикселов, и наконец изображение появ­ляется на экране.

Перечисленные этапы  в  конкретных графических  чипсетах могут быть переставлены, разделены, объединены, выполняться неоднократно (в несколько проходов), однако их физический смысл остается неиз­менным. Технологически некоторые элементы этапов или этапы цели­ком могут быть выполнены различными способами. Вариант реализа­ции зависит от особенностей приложения и видеокарты.

В зависимости от типа видеоускорителя часть этапов просчитывается программно, а часть — аппаратно. Самые современные ускорители имеют на борту графический процессор, способный аппаратно про­считывать этапы трансформации (преобразований) и расчета освеще­ния, наложения текстур.

Особенности первого этапа

Одним из ключевых критериев реалистичности сцены является каче­ство представленных в ней моделей. Как уже говорилось выше, каче­ство отображения, близкое к фотореализму, возможно при наличии 500 000 и более треугольников в сцене. Объем данных для обработки каждой вершины треугольника составляет, как минимум, 12 байт: 3 для координат вершины + 3 для параметров нормалей в вершинах + 3 для координат текстуры + 3 для параметров цвета. Для треуголь­ника в целом минимальный объем данных составит 36 байт. Если же применить различные эффекты, предусмотренные, например, в биб­лиотеке DirectX (карты окружения, анизотропную фильтрацию), то максимальный объем данных для одного треугольника достигает 768 байт. Принято считать, что средний объем данных на каждый тре­угольник составляет 180 байт. При наличии полумиллиона треуголь­ников в сцене общий объем данных составит около 90 Мбайт. Прием­лемая скорость смены кадров в играх — примерно 30 раз в секунду, то есть общий поток данных превысит 2,5 Гбайт/с.

Путем оптимизации моделей часто удается добиться совмещения вер­шин треугольников. Выдающимся считается коэффициент оптими­зации 0,5 — это снижает поток данных вдвое, в нашем случае при­мерно до 1,3 Гбайт в секунду. Для сравнения укажем, что пропускная способность шины AGP 4х составляет 1,066 Гбайт/с, а по специфика­ции 8х — вдвое больше. Напомним, что мы ведем расчет только для геометрических данных. При максимальных требованиях к качеству и скорости поток данных возрастает в пять-восемь раз! А ведь по шине AGP помимо «геометрии» необходимо передать и текстуры, и служеб­ные команды. Очевидно, что на современном этапе развития аппарат­ной составляющей графической системы ПК решение проблемы «в лоб» невозможно. Поэтому разработчики видеокарт и программисты начали искать другие способы.

Одним из методов улучшения формы трехмерных полигональных моделей и снижения потока данных служит применение трехмерных поверхностей высокого порядка. В этом случае исходный объект можно представить меньшим числом элементов, а детализацию выполнить средствами графического адаптера путем разбиения граней на мел­кие треугольники (тесселяция). В библиотеке DirectX версии 8 появи­лись средства описания поверхностей высокого порядка с помощью набора контрольных точек (Patshes).

Второй этап: борьба за качество

В общем случае после декомпозиции модели блок геометрического конвейера в качестве исходных данных получает данные о координа­тах вершин грани объекта и нормалях (векторах к освещаемой поверх­ности) в вершинах. В зависимости от заданной степени тесселяции исходный треугольник может различными способами разбиваться на более мелкие (от 4 до 64). Этот процесс эффективно обсчитывается в графическом процессоре. Тесселяция позволяет несколько повысить качество отображения объектов, однако не избавляет от коренного недостатка: сравнительно грубых исходных граней.

Параметрические поверхности. В библиотеке DirectX 8.1 появились инструкции для работы с поверхностями Безье — набор RT-Patches, которые поддерживаются ускорителями GeForce3, GeForce4.

Параметрические поверхности, описываемые типом RT-Patches (Rectangular and Triangular Patches) имеют прямоугольную форму. В библиотеке DirectX версии 8.1 использованы поверхности Безье пер­вого, второго и пятого порядка. Поверхность первого порядка пред­ставляет собой плоскость, а более высокого порядка — трехмерную структуру. Поверхность пятого порядка имеет большое число конт­рольных точек, что позволяет более точно моделировать сложные кри­вые, задающие поверхность.

Графический процессор, поддерживающий RT-Patches, разбивает представленную приложением поверхность высокого порядка на сег­менты (треугольники и вершины), исходя из заданных разработчи­ком программы параметров. Каждый этап тесселяции увеличивает число сегментов вдвое. Тем самым обеспечивается адаптивная дета­лизация поверхностей высокого порядка, связанная с расстоянием до плоскости проецирования. Вблизи камеры можно применить подроб­ную детализацию, а на достаточном расстоянии задействовать мини­мум ресурсов.

Применение параметрических поверхностей позволяет моделировать живые объекты и динамически модифицируемые формы (например, колебания ткани платья в движении) на фотореалистичном уровне. Такая технология широко применяется в мощных программах трех­мерного моделирования. Однако в ЗD-приложениях рендеринг сцены идет продолжительное время, что совершенно неприемлемо для игр. Поддержка RT-Patches на аппаратном уровне открывает возможность использования в играх моделей, качество которых не хуже кинема­тографических персонажей, поскольку по шине AGP вместо огромного потока сведений о треугольниках достаточно передать формулы, зада­ющие поверхности Безье (объем передаваемых данных снижается на два порядка!).

Главными препятствиями на пути внедрения технологии RT-Patches в играх выступает трудоемкость их разработки и несовместимость с видеоадаптерами, не поддерживающими данную технологию. То есть разработчик игры должен либо создавать все модели на основе пара­метрических поверхностей (и тем самым исключить из круга потен­циальных покупателей владельцев «устаревшего» железа), либо вы­полнять двойную работу, создавая дополнительный комплект объектов из традиционных моделей, построенных на основе треуголь­ников.

Обработка RT-Patches на аппаратном уровне была впервые обеспе­чена в блоке Surface Engine геометрического процессора чипсета GeForce3. Однако отсутствие реальных приложений с моделями на основе параметрических поверхностей (в силу указанных выше при­чин), привели фирму nVIDIA к решению отказаться (быть может, вре­менно) от поддержки RT-Patches в чипсетах GeForce3/4 (путем отклю­чения этой функции в драйверах, начиная с версии 21.81).

Имитация параметрических поверхностей. Как говорилось ранее, каждая вершина полигона полностью описывается параметрами трех­мерных координат, нормали, цвета, текстурной координаты. При обра­ботке вершины блоком T&L или программой (вершинным шейдером) графический процессор не имеет какой-либо информации о соседних вершинах треугольника. Нормаль (вектор, перпендикулярный к моде­лируемой поверхности) также является атрибутом вершины, но не треугольника.

Трехмерные поверхности на основе N-Patches строят на базе конт­рольных точек, расставляемых графическим процессором на каждой стороне исходного треугольника. Суть N-патчей проста — из норма­лей можно «вытащить» информацию о кривизне поверхности. Для этого требуется выполнить два условия: получить данные о всех трех вершинах полигона и сгруппировать их («собрать» примитив).

Получив координаты вершин и значения нормалей в вершинах к создаваемой трехмерной поверхности, графический процессор, под­держивающий технологию N-Patches, рассчитывает положение кон­трольных точек, разделяя стороны треугольника на равные отрезки. Тем самым исходный треугольник разбивается на более мелкие тре­угольники (до 64). Значения нормалей в генерируемых контрольных точках получают методом линейной или квадратичной интерполяции.

Координаты контрольных точек рассчитываются методом их проеци­рования на плоскость, перпендикулярную к нормали в вершине исход­ного треугольника. Если все три нормали в вершинах будут перпен­дикулярны к плоскости исходного треугольника, он так и останется плоским, разбей его хоть на 1000 частей.

 

 

Если нормали в вершинах не перпендикулярны к плоскости треуголь­ника, контрольные точки тесселяции начнут «притягиваться» к ими­тируемой поверхности. Чем больше угол между нормалью в вершине и плоскостью исходного треугольника, тем более «притягательной» становится поверхность, перпендикулярная к данной нормали.

Очевидно, что при максимальном числе контрольных точек получают наилучшее качество трехмерной поверхности. Причем увеличение числа контрольных точек никак не сказывается на объеме геометри­ческих данных, поступающих через шину AGP, поскольку использу­ются обычные полигональные модели. В этом состоит основное (на сего­дняшний день) преимущество технологии N-Patches: она не требует коренной переработки существующих программ. Разработчикам до­статочно указать в программе, какие объекты сцены разрешается обра­батывать N-Patches, степень тесселяции, а остальное сделает геомет­рический процессор видеокарты.

Вместе с тем, у технологии N-Patches имеется ряд существенных недо­статков. Во-первых, это заметные искажения геометрической формы объектов на стыках полигонов. Ведь обработка N-Patches приводит к тому, что треугольники как бы «раздуваются». И если для многих моде­лей живой природы это только улучшает их представление, модели техники, где много прямоугольных стыков и прямых линий, выглядят комично. А существенное расхождение треугольников на стыках гра­ней приводит к появлению щелей.

Поэтому некоторые модели все же приходится дорабатывать под N-Patches, добавляя так называемые заглушки (Junction) на стыках граней. Второй недостаток связан с тем, что нормали исходной поли­гональной модели в принципе используют для манипулирования осве­щением, а не формой поверхности, и иногда интерполяция нормалей приводит к искажениям формы. Наконец, технология N-Patches явля­ется абсолютно бесперспективной (так как не приносит ничего нового в методы построения моделей), не поддерживает динамическую бес­ступенчатую детализацию и другие передовые решения.

Поддержка технологии N-Patches на аппаратном уровне была впер­вые обеспечена в чипсете Radeon 8500 фирмы ATI. Производители игр немедленно «проголосовали» за это нововведение, выпустив «заплатки» к популярным продуктам и зало­жив поддержку технологии в новые разработки.

Фирме nVIDIA ничто не мешает, с технической точки зрения, обеспе­чить функционирование N-Patches в своих графических адаптерах.Однако в чипсете GeForce4 такая возможность отсутствует, что объяс­няется исключительно «политическими» соображениями, связанными с конкурентной борьбой. В итоге страдают пользователи.

Третий этап: борьба за скорость.

Современные графические ускорители (серий GeForce и Radeon) имеют геометрический конвейер сходной архитектуры, с аппаратной поддер­жкой T&L и вершинных шейдеров. Источником данных обычно явля­ется буфер вершин, который хранится в локальной видеопамяти. В бу­фер вершин параметры вершин треугольников поступают массивами (Triangle Strip, Triangle Fan), в последовательности, заданной прило­жением. Из буфера данные считываются в кэш (условно именуемый кэшем подготовки — Pre-T&L Cashe), обслуживающий блоки T&L и обработки вершинных шейдеров (Vertex Shaders ALU). Буфер вершин бывает двух типов: обычный и индексируемый.

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

В индексируемом буфере параметры вершин описываются индексами. Поэтому вершина с подходящими параметрами может использоваться в модели многократно, что существенно сужает поток данных. Индек­сируемый буфер вершин применен во многих современных графиче­ских чипсетах: Radeon 7500, Radeon 8500, GeForce2, GeForce3, GeForce4. Эффективность индексируемого буфера вершин зависит от особенно­стей реализации доступа к локальной видеопамяти и системы кэши­рования данных конкретного чипсета. Например, в чипсетах фирмы nVIDIA применена перекрестная (кроссовая) архитектура доступа к локальной видеопамяти. Каждый из четырех блоков управления памятью получает доступ к участку шириной 32 бита общей шины. При необходимости буфер вершин задействует все блоки, монопольно управляя шиной шириной 128 бит.

При считывании параметров вершин из оперативной памяти произ­водительность чипсета определяется полосой пропускания шины AGP.Тестирование видеокарт показывает, что максимальный поток геомет­рических данных по шине AGP составляет 650-770 Мбайт/с для видеокарт на базе GeForce3, GeForce4 и до 860 Мбайт/с для видеокарт на базе Radeon 8500.

Если все вершины поместились в кэш подготовки, то эффективность графического процессора ограничивается только производительно­стью блоков T&L и обработки вершинных шейдеров. Мощность блока T&L составляет для GeForce3 Ti500 около 5 миллионов вершин в секунду, для Radeon 8500 — около 12 миллионов (при восьми источниках света). Производительность блока вершинных шейдеров чипсета GeForce3 Ti500 достигает 12 миллионов вершин в секунду, а чипсета  Radeon 8500 — 23 миллионов (на оптимизированных инструкциях).

 

   

 

Вершинные шейдеры. Большинство графических чипсетов третьего поколения (GeForce256/2, Radeon 7500) располагают блоком расчета трансформаций и освещения (T&L), выполняющим фиксированные (заданные аппаратно) операции: установка параметров рендеринга освещения, текстур, матричные преобразования.

Шейдерами (Shaders) называют микропрограммы, задаваемые инст­рукциями API, которые динамически изменяют алгоритм работы гра­фического процессора видеокарты. Вершинные шейдеры (Vertex Shaders) определяют порядок трансформации вершин треугольников. Как уже говорилось выше, минимально необходимый объем данных для каждой вершины полигона составляет 12 байт. Следовательно изменение свойств вершины вызывает необходимость пересчета боль­шого объема данных, что сильно загружает центральный процессор и шину AGP. С появлением чипсетов, поддерживающих технологию вершинных шейдеров (GeForce3/4, Radeon 8500), задачи расчета трансформации вершин решаются графическим процессором, то есть объем геометрических данных, передаваемых по шине AGP, резко снижается. Например, вместо громадного массива новых параметров освещения вершин теперь достаточно передать несколько коротких инструкций API для графического процессора.

В спецификации DirectX 8.1 определено 17 инструкций для обработки свойств вершин, а длина шейдера ограничена 128 инструкциями. Ука­жем важнейшие операции, которые можно выполнять аппаратными средствами графического процессора:

 

-    межкадровая интерполяция вершин (Key Frame Interpolation), что существенно ускоряет анимацию;

 

-   наложение вершин (Vertex Blending) с использованием более чем

четырех матриц преобразования, что облегчает «скелетную» анимацию сложных моделей без их разбиения на несколько частей;

 

-   процедурная геометрия, то есть искажение свойств вершин каким-либо параметрическим объектом (например, волны на водной поверхности или перекатывающиеся под кожей мускулы персонажа);

 

-    сложные модели освещения, учитывающие свойства материала объектов.

 

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

 

Адаптивная детализация. Современные приложения трехмерной гра­фики позволяют создавать для игровых программ реалистичные объекты с высокой степенью детализации даже при использовании исключительно полигонов. Однако с практической точки зрения нера­ционально все объекты трехмерной сцены отображать с максималь­ной детализацией, так как человеческое зрение отказывается воспри­нимать мелкие детали удаленных объектов. Например, в армии давно выработаны эмпирические формулы, позволяющие по степени види­мости деталей объекта оценивать расстояние до него. То есть, иден­тифицировать объект как танк можно за два километра, а вот опре­делить его тип по характерным деталям — только за километр.

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

Таким образом, на каждый момент времени необходимо просчитать для всех объектов в трехмерной сцене так называемый LOD (Level of Detail — уровень детализации). Существуют два стратегических под­хода к управлению детализацией: статический и динамический LOD. В первом случае заранее создают упрощенные варианты максимально детализированного объекта. Предположим, что для модели танка, состоящей из 1200 полигонов, достаточно сделать упрощенные вари­анты из 600 и 300 полигонов. В ходе построения сцены просчитывается удаление модели танка от плоскости проецирования и выбирается вариант, соответствующий дальности.

В технологии динамического, или непрерывного, LOD используют различные алгоритмы, позволяющие плавно регулировать число» полигонов в объекте в зависимости от расстояния до картинной плоскости, обычно за счет тесселяции треугольников.

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

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

Четвертый этап: ухищрения сборки.

После трансформации, освещения и затенения вершины объединя­ются по три (этот процесс называется сборкой треугольников) для передачи блоку установки примитивов и последующей растеризации.. Так как треугольники часто имеют общие вершины, обычно требуется обработка лишь одной вершины для каждого нового треугольника.. Недостающие вершины считываются из второго кэша, который можно условно назвать кэшем постобработки (Post-T&L Cache). Если все вершины помещаются в кэш постобработки, производительность гра­фического чипсета определяется эффективностью блока установки примитивов. Для чипсета GeForce3 Ti500 мощность блока установки примитивов достигает 47 миллионов вершин в секунду, для чипсета Radeon 8500 — 67 миллионов.

Буфер глубины. Как уже было рассмотрено, в трехмерной графике одной из коор­динат является значение Z, которое обычно характеризует глубину сцены, то есть степень удаления объектов от камеры (плоскости про­ецирования). Очевидно, что проекция непрозрачных объектов, рас­положенных ближе к камере, будет частично или полностью перекры­вать проекцию удаленных объектов, исключая их видимость для наблюдателя. Кроме того, грани объекта, обращенные к плоскости проецирования, препятствуют видимости расположенных с тыла эле­ментов. Графический адаптер должен определить, какие объекты сле­дует отображать, а какие скрыть. Для этого координаты глубины помещают в Z-буфер.

Для оценки сложности сцены применительно к видимости ее элемен­тов по глубине применяют показатель перекрытия полигонов (Overdraw). Например, если значение Overdraw составляет три еди­ницы (что характерно для современных программ), это означает, что в сред­нем один видимый полигон перекрывает три полигона, расположен­ных глубже.

Для раннего определения видимости по глубине применяют различ­ные технологии. В частности, фирма nVIDIA в своих графических чип­сетах применяет механизм раннего отсечения невидимых поверхно­стей HSR (Hidden Surface Removal), а фирма ATI использует иерархическое представление данных в Z-буфере (механизм Hyper Z). В современных графических адаптерах также широко применяют кэширование Z-буфера, сжатие Z-координат без потерь и механизм быстрой очистки буфера глубины. По результатам тестов в сценах с большими значениями Overdraw, механизм Hyper Z действует лучше, чем технология HSR ранних версий. В чипсете GeForce4 этот недостаток был исправлен, и последняя реализация HSR обеспечивает хорошие результаты.

Пятый этап: проблемы закраски

Для ускорения обработки текстур используют параллельную работу нескольких (обычно 2—3) конвейеров. В этом случае операции комби­нирования двух-трех текстур выполняются за один цикл (проход). Следует учитывать, что применение технологий с наложением трех текстур (например, ЕМВМ) на двухконвейерных ускорителях все равно потребует двух проходов. Последние модели графических адап­теров имеют до четырех текстурных конвейеров, а также блок испол­нения пиксельных шейдеров.

Пиксельные шейдеры. Пиксельные шейдеры (Pixel Shaders) служат для динамического изменения свойств отдельных пикселов. Един­ственная задача пиксельного шейдера — вычислить цвет одиночного пиксела на основе исходных значений, полученных от вершинного шейдера (координаты текстур) и заданных параметров освещения. Выполнение программируемых пиксельных операций является завер­шающей стадией 3D-конвейера, после которой данные поступают в буфер кадра и на экран.

До появления пиксельных шейдеров цвет пиксела мог вычисляться на основе только двух текстур, причем оба текстурных модуля не были связаны между собой. Примером реализации такой технологии слу­жит механизм Shader Rasterizer графического чипсета GeForce2.

В чипсете GeForce3  впервые реализован механизм программируемо­го текстурного блока, способный оперировать с четырьмя текстурами по командам пиксельного шейдера  длиной до 12 инструкций. В чипсете Radeon 8500 можно использовать шейдеры длиной до 22 инструкций, а оперировать шестью текстурами.

В целом аппаратные ресурсы, выделяемые для пиксельных шейде­ров, весьма ограничены: два временных, восемь постоянных, четыре текстурных (в версии Pixel Shaders 1.4 — шесть) и два цветовых реги­стра. То есть программирование посредством пиксельных шейдеров по сути дела сводится к различным комбинациям значений текстур­ных регистров. Такой подход рационален с точки зрения производи­тельности графической подсистемы.

Например, в разрешении 1600x1200 точек в 32-битной цветовой палитре необходимо выводить в буфер кадра 7,32 Мбайт данных с частотой, по меньшей мере, 30 раз в секунду (поток 220 Мбайт/с). При обработке 4-6 текстур (размером до 4096x4096 точек!) это очень ресурсоемкая задача. Технология пиксельных шейдеров позволяет успешно решать проблему смешивания нескольких текстур, в том числе карт отражения, карт теней (освещения), объемных текстур и прочих. Только с появлением пиксельных шейдеров в играх появились текстуры, peaлистично имитирующие воду и облака.

 

 

 

 

 

Адаптивное текстурирование. Самым простым способом текстурирования является создание единственной текстуры среднего размера и наложение ее на полигоны объекта во всех случаях, когда требуется визуализация. Однако здесь возникают некоторые проблемы. Во-пер­вых, если текстура создана с высоким значением разрешения в пол­ной цветовой палитре (например, 4096x4096 пикселов при глубине цве­тового охвата 32 бит), то расход вычислительных ресурсов и памяти при наложении текстур на все объекты будет просто фантастиче­ским — никакой ускоритель не справится с таким потоком данных.

Во-вторых, если уменьшить размер (и тем самым детализацию) тек­стур, то объекты по мере приближения к плоскости проекции будут выглядеть все более грубо. В некоторых играх нередки эффекты, когда при максимальном приближении поверхность объекта предстает как набор огромных пятен — это означает, что на картинную плоскость попало всего несколько текселов (ТЕКстурных пикСЕЛОВ). То же самое касается и эффекта перспективы — одна и та же текстура, будучи наложена на близкий и удаленный участки объекта, вызывает иска­жение перспективы.

Чтобы обойти такие проблемы, была разработана технология, полу­чившая название MIP-mappingIP-текстурирование). Ее суть заключается в предварительном или динамическом создании набора текстур с различным разрешением и уровнем детализации на основе базовой текстуры максимального разрешения. Цвет каждого тексела текстуры с более низкой детализацией выбирается путем аппрок­симации цвета четырех ближайших текселов текстуры предыдущего (более высокого) уровня детализации. При построении трехмерной сцены определяется удаленность полигона от картинной плоскости и в соответствии с этим значением накладывается текстура с заданным разрешением.

Для выбора конкретного уровня детализации сегодня используют в основном динамический расчет LOD. Например, если проецирование текстуры вызывает наложение одного тексела на пиксел, то уровень LOD определяется как нулевой и выбирается текстура с наивысшей детализацией. Если на пиксел пришлось 4 тексела, уровень LOD составляет 1, поэтому выбирается следующий уровень М1Р-mapping, которому соответствует текстура с меньшей детализацией. Расчет уровня LOD обычно ведут для каждого тексела.

Как известно, текстуры могут храниться в специально отведенной для них области видеопамяти и подгружаться динамически. Технология MIP-mapping позволяет снизить нагрузку на шину памяти, так как одни объекты удалены от плоскости проекции, другие приближены, в среднем объем загружаемых текстур существенно меньше, чем потребовалось бы при решении проблемы «в лоб».

 

 

 

 

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

 

Билинейная фильтрация. Для улучшения отображения текстур используют билинейную фильтрацию. В этом случае считается, что проекция представляет собой круг, а цвет пиксела рассчитывается путем аппроксимации цветов четырех текселов, как бы образующих данный круг. При сильном приближении объекта к плоскости проеци­рования случается, что в круг попадает меньше четырех текселей, тогда изображение выглядит чрезмерно размытым. Если же плоскость полигона повернута относительно плоскости проецирования, круг уже не соответствует реальной форме проекции (овалу, эллипсу или иной фигуре) и эффект перспективы хотя и присутствует (все-таки сказы­вается аппроксимация по четырем точкам), но все равно существенно искажен. Для определения цвета одного пиксела требуется считывать цвета четырех текселов, что увеличивает нагрузку на шину памяти. Поэтому билинейную фильтрацию сейчас применяют редко.

 

 

 

 

 

Трилинейная фильтрация. Для повышения качества отображения объектов, имеющих перспективу по глубине, разработана технология трилинейной фильтрации. По сути, она представляет собой комбина­цию технологий MIP-mapping и билинейной фильтрации. Как известно, в MIP-mapping применяют текстуры с разной степенью детализации (и разным разрешением) в зависимости от удаленности полигона от плоскости проецирования. При трилинейной фильтрации берутся две соседние текстуры, одна из которых содержит текселы, попадающие в проекцию, а другая является ближайшей к ней по удаленности, и к каждой применяют билинейную фильтрацию.

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

 

 

Анизотропная фильтрация на сегодняшний день считается одной из лучших технологий отображения текстур. Существуют различные алгоритмы анизотропной фильтрации, суть которых — в возможна более точном учете формы проекции при различном положении текстурированного полигона по отношению к проецируемой плоскости. Вокруг центра проекции строится виртуальный куб из наложенных  друг на друга текселов текстур разного уровня детализации, которые  теоретически пересекает проекция. В зависимости от размера грани куба может быть обсчитано от 8 до 32 текселов для определения цвета единственного пиксела. При анизотропной фильтрации велики требования к эффективности графического процессора.

 

 

Анизотропная фильтрация

·   ·   Морфинг уровня детализации (LOD morphing)

 

Композитные текстуры. Текстуры высокого разрешения занимают в памяти много места. Учитывая широкое распространение программ с глу­биной цветности 32 бит (текстура 2048x2048, 32 бит, занимает 16 Мбайт!), становится понятным, что никакой видеопамяти, при слож­ности сцены хотя бы в 10 000 полигонов, не хватит. Придется «подка­чивать» текстуры из оперативной памяти, что сильно нагружает шину AGP. Технологии MIP-mapping и анизотропной фильтрации сами по себе также весьма требовательны к ресурсам.

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

Для построения композитных текстур был придуман пошаговый ме­тод. Он основан на механизме МIР- mapping и мультитекстурировании. С помощью механизма LOD определяется уровень МIР-каскада  для выборки соответствующей детальной структуры (напомним, что базовая текстура остается неизменной). Затем детальная структура накладывается на базовую, и результат отправляется в буфер кадра. Очевидно, что при такой методике уровень детализации меняется дискретно, скачками.

Смешение с помощью альфа-канала позволяет организовать динамическое изменение уровня детализации. Реализовать этот алгоритм  достаточно просто, построив функцию зависимости степени прозрачности детальной текстуры от уровня LOD и направления движения объекта (к картинной плоскости или в глубину).

 

 

Объемные текстуры. Элемент трехмерной текстуры представляет собой виртуальный монолитный куб. Конечно, на самом деле трехмер­ный объект в компьютерной графике состоит из конечного числа то­чек (текселов), и потому его удобно представлять как конечный набор слоев (плоских текстур), текселы которых образуют узловые точки трехмерной текстуры. Каждая точка внутри текстурного куба имеет присвоенный ей цвет.

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

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

Технология трехмерного текстурирования позволяет применять для имитации освещения единственную текстуру, тогда как традицион­ный метод предусматривает генерацию уникальной карты освещен­ности для каждого полигона. Затраты вычислительных ресурсов при трехмерном текстурировании примерно совпадают с таковыми для технологии трилинейной фильтрации.

Важным свойством трехмерных текстур является способность реа­листично имитировать материалы с характерной внутренней струк­турой. Например, для моделирования деревянной конструкции до­статочно создать ее полигональную модель, затем разработать трехмерную текстуру, имитирующую фактуру дерева, и присвоить ее полигонам. Заботиться о рисовании текстур для каждого полигона и о «сшивании» их на границах уже нет необходимости.

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

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

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

Разработчики чипсетов для видеоадаптеров с давних пор пытаются приспособить различные методы сжатия данных для текстурных карт. Здесь существенны два требования: сжатие практически без потери качества и обработка данных «на лету», в процессе преобразования и наложения текстур.

Первой по-настоящему общепризнанной технологией сжатия текстур стала S3TC (S3 Texture Compression). В зависимости от характера тек­стуры степень сжатия здесь достигает 6:1. Упаковка и распаковка тек­стур производится «на лету» и выполняется как программными, так и аппаратными средствами. Это обстоятельство привлекло фирму Microsoft, и она лицензировала новую технологию у фирмы S3, вклю­чив механизм сжатия текстур в библиотеку DirectX (технология по­лучила обозначение DXTC).

Вскоре появились технологии сжатия, альтернативные S3TC. В пер­вую очередь это технология FXT1 от фирмы 3Dfx, объявленная от­крытой. Ее преимущества заключаются в лучшем коэффициенте сжа­тия, достигающем 8:1, и меньшей потере качества при компрессии текстур. Поддержка технологии FXT1 реализована на аппаратном уровне в чипсете VSA-100. Другие производители также обеспечива­ют аппаратную поддержку FXT1, но в разной степени. Например, чип­сет Savage 2000 может только распаковывать текстуры.

Несколько особняком стоит технология VTC (Volume Texture Compression) от фирмы nVIDIA. Она ориентирована исключительно на сжатие трехмерных текстур. Известно, что ЗD-текстуры являют­ся самыми требовательными к объему видеопамяти, однако взамен они обеспечивают великолепное качество изображения, близкое к фотореалистичному.

В ближайшем будущем на повестке дня встанет вопрос о сжатии гео­метрических данных. Самые сложные игровые приложения уже на­считывают в отдельных сценах около 50 000 полигонов. Чем ближе программы ЗD-графики будут приближаться к рубежу 500 000 поли­гонов в сцене, тем острее будет проблема обмена огромными объемами данных между геометрическим процессором и локальной памятью на видеокарте.

Рельефное текстурирование. Технология Bump mapping (наложение рельефа) призвана повысить реализм моделей путем применения по­мимо текстурной карты дополнительной карты высот (карты рельефа). Сами по себе обработанные по данной технологии текстуры оста­ются плоскими. Карта высот содержит лишь двухмерный массив данных, где максимальное значение числа означает наибольшую от­носительную высоту. В отличие от географических карт, где возмож­ны отрицательные значения высот (так как за точку отсчета принят уровень моря), карта рельефа в компьютерной графике содержит только положительные числа.

Широко распространенным методом наложения карт рельефа явля­ется так называемое диффузное смешение (embossing — тиснение). Суть его заключается в следующем. Берется карта высот, и на ее ос­нове строится инвертированная (обратная) копия. Далее карте релье­фа присваиваются координаты (х, у) вершины полигона, на который накладываются текстуры. Из вершины на плоскость полигона строится единичный вектор, направленный на источник света. Затем он умножается на некоторое число, а итоговый вектор служит для смещения относительно карты рельефа координат инвертированной копии. Затем обе карты суммируются. Важным в данном методе яв­ляется подбор числа, на которое умножается единичный вектор све­та, так как величина смещения инвертированной карты высот не дол­жна приводить к нежелательным эффектам. При недостаточном смещении эффект наложения высот не заметен, при излишнем сме­щении изображение двоится и размывается.

Если к базовой текстурной карте попеременно применять разные кар­ты высот или одну карту, но со смещением на каждом последующем шаге, то мы получим динамическую картину изменения освещенно­сти объекта. Очевидно, что в этом случае термины «наложение рель­ефа» и «расчет освещенности» по физическому смыслу являются си­нонимами.

Для реализации технологии наложения рельефа требуется обрабо­тать три текстурных карты: базовую, рельефа и инвертированную. Необходимо не только вычислить вектор света, но и нормализовать его к поверхности полигона. В итоге для полноценного преобразова­ния требуется три прохода конвейера блока рендеринга. Если в ви­деокарте реализованы два конвейера, способные работать параллель­но, потребуется два прохода.

Недостатком технологии наложения рельефа, помимо большого рас­хода вычислительных ресурсов, считается не слишком качественная  по сегодняшним меркам итоговая сцена. Поэтому разработчики шли дальше и предложили более совершенные методы, в частности наложение рельефа методом скалярного произведения.

Метод скалярного произведения основан на так называемой математической модели света. Она существенно отличается от физической модели. В математической модели освещенность с расстоянием  не изменяется. Свет рассматривается как единичный вектор, направленный на источник. Вторым вектором выступает вектор камеры (точки обзора наблюдателя). Используется также вектор нормали, представляющий собой сумму векторов света и камеры, приведенную к единице.                                                                                              

С помощью указанных векторов вычисляются значения для диффузного (рассеянного) и зеркального (бликового) света. Методикой ска­лярного произведения предусмотрено использование так называемых «карт возмущенных нормалей». Для этого берется карта рельефа и рассчитывается значение нормали в каждой точке в локальной системе координат. Результат записывается как отдельная текстурная карта (функция «возмущения» нормали картой рельефа), которая накладывается путем скалярного произведения на базовую текстуру.

Для полноценной реализации данного метода требуется: рассчитать для каждой вершины полигона в локальной системе координат вектор единичного света и вектор нормали, поместить результат как исходную карту освещенности; рассчитать карту возмущенных нормалей; загрузить базовую текстуру; наложить все текстуры друг на друга методом скалярного произведения. Многие графические процессоры умеют выполнять такую операцию, что в итоге дает высокое качество изображения при однопроходном текстурировании.

Карты окружающей среды. Environment Map Bump Mapping (карта окружающей среды, иногда ее называют картой отражения) служит для отражения в объекте визуальных свойств окружающего простран­ства. Карты отражения либо создают заранее, во время разработки игры (обычно используют сферические карты среды), либо в ходе по­строения трехмерной сцены (кубические карты среды).

Визуальные свойства карт окружающей среды можно сделать зави­симыми от направления линии визирования (что соответствует пра­вилам физической оптики). С целью ускорения обработки трехмер­ной сцены разработчики иногда не предусматривают изменения карты среды в зависимости от направления линии визирования. Более качественным является метод создания кубических карт окружающей среды в ходе построения трехмерной сцены. По сути дела, для этого необходимо предварительно выполнить рендеринг сцены относительно объекта, к которому применяется технология ЕМВМ. Затем попиксельное состояние окружения записывается в трехмерную текстурную карту, которая и накладывается на объект. В результате можно добиться качественного изображения эффектов, практически невыполнимых другими способами.

Шестой этап: борьба с дефектами.

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

Локальные методы применяют к краям объектов, то есть текселы тек­стуры, являющиеся краевыми в полигоне, обрабатываются таким об­разом, чтобы исключить лестничный эффект. Глобальные методы применяют ко всей области картинной плоскости.

В современных SD-ускорителях самой популярной является техно­логия полноэкранного сглаживания дефектов сцены (FSAAFull scene anti-aliasing), основанная на масштабировании изображения. То есть, рендеринг сцены выполняется с разрешением, превосходящим необходимое экранное разрешение, а затем изображение уменьша­ется, при этом каждый пиксел обрабатывается на основе маски, соот­ветствующей коэффициенту масштабирования.

Например, при маске 2x2 и экранном разрешении 800x600 точек не­обходимо выполнить рендеринг сцены в разрешении 1600x1200. За­тем каждому пикселу в реальном изображении будет присвоен цвет, получившийся в виртуальном разрешении в результате смешения цветов соседних пикселов маски 2x2.

Другой метод FSAA был впервые реализован в технологии Т-Buffer фирмы 3Dfx. Каждый пиксел на изображении делится на две части (субпиксела) — левый и правый. Один из процессоров VSA-100 при этом играет роль головного (ведущего), а другие — ведомых. Каждый процессор VSA-100 в собственном кадровом буфере производит об­работку (рендеринг) полной сцены, но опираясь на свои (левый или правый) субпикселы. Таким образом осуществляется взаимное сме­щение обрабатываемых кадров. Сейчас метод разделения исходного пиксела на более мелкие составляющие (сэмплы) путем рендеринга в высоком разрешении получил название суперсэмплинг.

При использовании технологии мультисэмплинга сглаживание осуществляется лишь на границах объектов. Среди названий мультисэплинга, придуманных маркетинговыми отделами компаний, можно встретить, например, Quincunx AA (фирма nVIDIA) — технологию  поддерживаемую чипсетами GeForce3 и старше. Конкурент (ATI, чипсет Radeon 8500) использует собственный метод Smooth Vision.

 

 

Имитация движения.

Для борьбы с непреднамеренными эффектами анимации используют технологию Motion Blur, которая рассмотрена подробно, а также ме­тод аппроксимации нескольких фаз движения объекта в одном кадре итогового рендеринга сцены.

Проведите такой эксперимент — на улице резко поверните голову от одного плеча к другому, стараясь не двигать глазами. Вы наверняка заметите, что зрительная картина приобретает некоторую «смазанность», направление которой зависит от направления перемещения взгляда. Такой же эффект возникает, если смотреть из окна быстро движущегося поезда или автомобиля на близко расположенные объек­ты, которые иногда сливаются в одну полосу.

Причем описанный зрительный эффект имеет место не только при фланговой линии визирования — точно так же в движении на боль­шой скорости происходит размытие изображения при фронтальном наблюдении. Этот эффект широко используется в художественной фо­тографии, видеопродукции и компьютерной графике. В англоязычной литературе он получил название Motion Blur. Достаточно сказать, что одноименный фильтр имеется даже в программе обработки двухмер­ных изображений Adobe Photoshop.

Разработчики игр и мультимедийных продуктов давно поняли, что эффект Motion Blur способен значительно повысить восприятие, «ощу­щение» движения в трехмерных сценах. Однако лишь сравнительно недавно возможности аппаратуры позволили в полной мере приме­нять в современных продуктах эффект размывания изображения в движении.

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

Так как результирующие кадры, по сути, содержат несколько фаз движения, изображение получается размытым, со смещением границ в сторону, противоположную направлению движения. Чем больше  принятый коэффициент Motion Blur, тем дальше отодвигается граница размытости изображения. В принципе, коэффициент должен быть прямо пропорционален скорости перемещения камеры.

вокселы и тайлы.

Хотя полигональные модели могут использовать трехмерные тексту­ры, внешне похожие на воксельные объекты, на самом деле полиго­нальная и воксельная технологии в корне различны. Вокселом (от Voxel, Volume pixel — объемный пиксел) называют монолитный эле­ментарный объект кубической формы, имеющий одинаковую окрас­ку всех плоскостей. Трехмерная модель конструируется из набора вокселов практически так же, как дети строят свои игрушки из куби­ков.

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

Сама отрисовка (рендеринг) воксельного объекта происходит по иной методике, нежели при текстурировании полигональной модели. Вок­сельному кубу в объекте в каждый момент времени соответствует куб с локальными координатами в пространстве сцены. Вокселы сорти­руются по удаленности от плоскости проекции (картинной плоскости) для определения степени видимости и последовательно на нее про­ецируются. В зависимости от удаленности воксела от плоскости про­екции будут различаться и размеры самой проекции вокселов. При­менение воксельной технологии позволяет отказаться от многих стадий 3D-конвейера. Очевидно, что существенно экономится память, а скорость обсчета сцен возрастает. Однако воксельная технология об­ладает и врожденными, трудноустранимыми недостатками, препят­ствующими ее распространению.

Тайлами называют участки (как правило, одинаковые по размерам), на которые разбивается проекция трехмерной сцены при рендеринге. Каждый такой участок сразу анализируется на предмет видимости объектов, и невидимые элементы из обработки исключаются. Графи­ческий чипсет (например, Куго фирмы STM), поддерживающий тай-ловую технологию, должен иметь специфическую архитектуру, по­скольку ЗD-конвейер в нем поставлен «с ног на голову»: сначала идет сортировка по глубине, а затем все остальные стадии. Кстати, в по­давляющей части игр сцена выводится «как есть», без сортировки объектов по глубине. Поэтому в реальных приложениях более простой и дешевый тайловый чипсет мало уступает в скорости «богатым» собратьям.

 

Hosted by uCoz