Видеоадаптеры, классификация, особенности строения и работы
Рефераты >> Программирование и компьютеры >> Видеоадаптеры, классификация, особенности строения и работы

· Карта смещений UV (UV-dispmap). Каждому пикселу ставится в соответствие вектор DuDv. Карта смещений UV используются для получения environment map с пертурбацией. Пертурбация означает, что environment map искажается определенным образом, чтобы передать рельефность. Полученный environment map также накладывается на основную текстуру альфа-смешением. Этот метод симулирует рельефность глянцевой или зеркальной поверхности отражением окружающей среды.

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

Bumpmapping

· Z-буферизация (Z-buffering)

Z-буферизация – самый надежный метод удаления скрытых поверхностей. Z-буфер – область видеопамяти, в которой для каждого пиксела хранится значение глубины. Когда рендерится новый пиксел, его глубина сравнивается со значением, хранимом в z-буфере, точнее с глубиной уже срендеренного пиксела с теми же x и y координатами. Если новый пиксел имеет значение глубины выше значения в z-буфере, это значит что новый пиксел невидим, и он не записывается во фрейм-буфер, если ниже – то записывается. Z-буфер обычно расположен во фреймбуфере, поэтому при отключении аппаратной z-буферизации место под z-буфер освобождается, что позволяет 3D-ускорителю работать в более высоких разрешениях. Ради получения этих высоких разрешений некоторые игры с несложной графикой используют не Z-буферизацию, а более простые методы удаления скрытых поверхностей. Тем не менее отключение z-буферизации может приводить к артефакту, известному как z-алиасинг.

Главный аттрибут z-буфера – разрещающая способность. Она критична для высококачественного рендеринга сцен с большой глубиной. Чем выше разрешающая способность, тем выше дискретность z-координат и точнее выполняется рендеринг удаленных объектов. 24-разрядный z-буфер дает разрешающую способность 16 млн, 32-разрядный – 2 млрд, а 16-разрядный – только 64 тыс. Если при рендеринге разрешающей способности не хватает, то может случиться, что 2 перекрывающихся объекта получат одну и ту же z-координату, в результате аппаратура не будет знать какой объект ближе к наблюдателю, что опять же ведет к z-алиасингу.

Z-буферизация

При использовании z-буферизации надо позаботиться о том, чтобы глубины были корректны с точки зрения перспективы. Допустим, ускоритель рендерит треугольник с заданными z-координатами трех его вершин. Он должен рассчитать z-координаты для всех точек, лежащих внутри треугольника. Если их просто интерполировать, то результат получится некорректным с точки зрения перспективы, поэтому их надо корректировать. Но современные 3D-ускорители используют технику, называемую w-буфером. W-координата – величина с плавающей точкой, обратная к z-координате. Всем вершинам ставятся в соответствие именно w-координаты, которые можно интерполировать без перспективной коррекции.

Поколения 3D-акселераторов

Вообще-то, функции, ускоряющие расчет трехмерной графики, начали появляться в массовых видеочипах давно – с 1995 года. Такие микросхемы, как S3 Virge и ATI Rage, имели в списке своих возможностей аппаратное ускорение некоторых операций растеризации 3D-изображения. Однако они были крайне медленными и в то время еще не появилось стандартных API, а фирменные API практически не были поддержаны разработчиками программного обеспечения.

В 1996 году появляются видеочипы с серьезными заявками на гордое звание “3D-ускоритель” – Verite1000 от фирмы Rendition, Matrox MGA-1064SG и nVidia NV1 (крайне интересный продукт – чип работал на основе расчета не полигонов, а криволинейных поверхностей Безье; имел затенение по Фонгу, а не по Гуро (это вытекало из неполигонной технологии); у него была поддержка билинейной фильтрации текстур, мипмэппинга, альфа-смешения, попиксельного тумана – кое-что из этого только начинает внедряться в самых последних или только анонсированных видеочипах). Но они снова были практически не востребованы производителями программ – на горизонте возникли громада Microsoft с ее API DirectX (Direct3D) и фирма, всколыхнувшая рынок массовой 3D-акселерации и фактически создавшая его заново – 3DFX.

Чипсет фирмы 3DFX - Voodoo Graphics (VooDoo1) надолго определил стандарты качества, скорости и принципов 3D-графики на PC. Voodoo Graphics состоял из двух микросхем, снабжаемых раздельными банками памяти - Pixel FX и Texel FX. Первая была предназначена для работы с буфером кадров и Z-буфером. Она осуществляла закраску треугольников, используя для этого данные, поступающие со второго кристалла, который контролировал буфер текстур и отвечал за все операции по получению данных и их интерполяции. Судя по всему, первоначально эта архитектура разрабатывалась для более серьезных, неигровых применений, и первые мощные платы Obsidian (позже и Obsidian II на базе чипсета Voodoo2) использовались военными. Тактовая частота — до 60 МГц. Поддерживалась только память типа EDO (время доступа — 30—35 нс), при этом размер буфера кадров мог достигать 4 Мб, а буфера текстур — 8 Мб. Максимальное разрешение — 800х600 точек, у платы с буфером кадров емкостью 2 Мб — 640х480. Скорость заполнения — 50—60 млн пикселей в секунду. Производительность — около 500 тыс. треугольников в секунду. Вывод трехмерных сцен в окне Windows не поддерживался (была возможна работа только на полный экран). Также необходимо отметить ещё несколько особенностей. Первое – это был внешний 3D-ускоритель, обычная 2D-видеокарта соединялась с картой на базе VooDoo Graphics посредством скозного кабеля, а та, в свою очередь, соединялась с монитором, пропуская ее видеосигнал через себя. Когда программа начинала использовать 3D-функции, тогда VooDoo просто блокировал сигнала обычной видеоплаты и работал сам. Второе – это масштабируемость (массово эта технология стала применяться только в Voodoo2), т.е. можно соединить две карты в одну и при этом увеличивается максимальное разрешение и, конечно, скорость. И третье - удобный для программирования API Glide, который поддерживался только картами от 3Dfx и до сих пор еще поддерживается разработчиками программного обеспечения.

К тому же, 3DFX не стала лениться и добилась широкой поддержки своего продукта разработчиками игр – путем личных бесед с программистами и руководителями фирм, поставки вариантов своих карт для проверки работоспособности программ и создания (без проволочек и задержек) SDK (Software Development Kit) для Glide и бесплатной рассылки его почти всем девелоперским фирмам.

Только почти через год, к концу 1996-нач. 1997 года появился конкурент этому чипсету. И стал им новый продукт фирмы nVidia – Riva128. Фирма учла свой неудачный опыт с NV1 и пошла по уже накатанной 3DFX колее в архитектуре своего чипсета. Новый ускоритель работал с принятой всеми разработчиками программного обеспечения полигонной технологией но, кроме повторений некоторых идей 3DFX, имел и свои плюсы. Сразу отметим вдвое большую разрядность шины памяти. Первый плюс. Второй плюс заключается в интеграции 2D/3D ускорителей на одной микросхеме. Также, очень неплохой являлась работа с вводом/выводом композитного видеосигнала (конечно для видеоплаты, у которой эти функции не являются основными). Микросхема стала одной из первых, кто был совместим с новой графической шиной AGP (не теряя поддержки PCI) и была первой, корректно и осмысленно реализовавшей естественную для AGP архитектуру DIME (Direct Memory Execution), которая позволяет отводить часть оперативной памяти компьютера под хранение текстур (AGP Memory). Таким образом буфер кадров и Z-буфер находятся в локальной памяти платы, а большая часть текстур хранится в системной памяти компьютера. Поддерживала работу только с 16 битным цветом. Riva128 была сильно процессорозависимым чипом - максимальные характеристики были достижимы только на недавно появившихся тогда процессорах класса PentiumII. Fillrate составлял 100 млн. пикселей в секунду. Геометрия – до 5 млн. треугольников в секунду. Также существовал несколько доработанный вариант Riva 128ZX с увеличенным объемом памяти до 8 Мб (у обычной Riva 128 – 2-4 Мб).


Страница: