Формирование 3D-изображений

В статье Видеосистема PC были рассмотерны оновные узлы видеокарт, которые участвуют в формировании изображения. Но рассматривали мы видеоадаптеры SVGA, которые могли только формировать цвета и выводить изображение, но не спосбны были сами его изменять, редактировать при переходе от одного кадра к другому. Изображение изменял центральный процессор (CPU). И, конечно, в таких условиях о 3D-изображениях речь не шла. В этой же статье мы рассмотрим формирование 3D-кадров в современных видеокартах.

Видеоадаптеры VGA (и первые SVGA) имели ограниченную палитру и низкое разрешение экрана и очень сильно загружали центральный процессор. Причин тому было несколько:

Эти недостатки и определили основные направления развития видеоадаптеров, приведших к появлению видеоакселераторов, которых мы сейчас называем видеокартами.

Как мы уже отмечали, RAMDAC аппаратно ограничивает количество цветов до 256, т.к. содержит только 256 регистров цвета. Каждый из цветов кодируется 8-разрядным числом, что определяет максимальное и минимально необходимый объем видеопамяти в 256 Кбайт (28=256). Большее количество видеопамяти может быть полезно только при большем разрешении. Тут то у производителей и появилась мысль использовать большее разрешение. Одновременно с увеличением объема видеопамяти пришлось использовать новые методы ее адресации, поскольку количество пикселей на экране превысило размер адресного пространства (128 Кбайт). Увеличение объема видеопамяти позволило повысить разрешение, но не привело к улучшению цветности изображения – размер палитры по-прежнему оставался равным 256 цветам.

Больших успехов в улучшении цветности производители добились, после выпуска RAMDAC нового типа:

На базе такого RAMDAC стали выпускаться видеокарты с объемом видеопамяти 1 Мбайт и более. Вместе с объемом видеопамяти возросла и разрядность ее ячеек (16 бит и более), а также разрядность и пропускная способность внутренней шины. Вместо разбиения видеопамяти на банки стала применяться линейная адресация всей видеопамяти. В этой схеме осуществляется переадресация видеопамяти в непрерывную область адресов, расположенную в расширенной (extended) области памяти. Для интерфейса ISA этот диапазон располагался ниже 16 Мбайт, а для PCI – в любой области расширенной памяти. Поэтому то в CMOS Setup и присутствует опция Memory hole at 15-16 M, для того чтобы никакие программы не могли записывать данные в область видеопамяти.

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

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

Аппаратное ускорение

Графический акселератор, пришедший на смену стандартному видеоадаптеру, является активным устройством и значительно повышает быстродействие всей системы в целом. Это достигается путем использования серьезных преимуществ графического процессора (сопроцессора). В такой системе большое количество функций выполняется на аппаратном уровне всего за несколько тактов работы акселератора. Акселератор использует команды высокого уровня для «общения» с остальными подсистемами, что разгружает шину ввода/вывода, т.к. значительно уменьшается поток команд. Кроме того, CPU освобождается от необходимости выполнения и передачи множества элементарных операций с содержимым кадрового буфера.

Акселерация возможна только в графическом режиме. Суть работы акселератора состоит в изменении цифрового образа изображения в видеопамяти по командам из CPU и ряду самостоятельных операций по преобразованию данных. Графический акселератор, в отличие от адаптера VGA, оперирует не пикселями, а так называемыми графическими примитивами, которые состоят из множества пикселов. Используя такие примитивы как треугольник, отрезок, окружность, можно конструировать достаточно сложные изображения значительно проще и быстрее, чем при модификации отдельных пикселов.

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

  1. Прорисовка графических примитивов (drawing). На операциях прорисовки основаны все современные GUI интерфейсы программ и ОС. Параметры примитивов задаются в виде координат в векторном виде. В отличие от растрового представления цифрового изображения они гораздо компактнее и не зависят от используемого разрешения. По координатам легко построить все изображение. К командам прорисовки также относится и простейшая заливка контура (fill) и заполнение его узором.
  2. Перенос блоков изображения на экрану  (BitBlt). Выполняется при перетаскивании GUI-объектов мышкой, скроллинге  и т.п. операций. Данная функция сводится к перемещению блока бит из одной области видеопамяти в другую.
  3. Аппаратная поддержка окон (hardware windowing). Дело в том, что каждое активное приложение в операционной системе отслеживает «свое» открытое окно и его координаты в одном кадровом буфере оперативной памяти. При использовании hardware windowing каждое приложение использует свой «кадровый буфер», равный размеру открытого окна, так что «перенакрывания» окон к памяти не происходит. Выигрыш в скорости обработки координат окон тем больше, чем больше видеопамяти у видеоадаптера.
  4. Масштабирование растровых изображений (scaling). Различают два вида масштабирования: дублирование и интерполяция (сглаживание). Первое сводится просто к увеличению размера пикселя (точнее количества одинаковых пикселей в данной точке), что приводит к появлению таких дефектов изображения как пикселизация и алиасинг. Для устранения этих искажений используется интерполяция. Эти две операции весьма трудоемки и требуют достаточно высокого качества акселератора.
  5. Аппаратный курсор. Эта технология обеспечивает аппаратную поддержку курсора мыши. Центральный процессор считывает из порта мыши текущие координаты указателя и посылает их акселератору, а тот в свою очередь, просто формирует изображение курсора в нужном месте экрана. Для формирования изображения курсора применяется технология спрайтов (sprites), которые временно заменяют участки растра изображением курсора, а затем при его перемещении в другое место их обратно восстанавливают.
  6. Преобразование форматов и декомпрессия. При обработки видеоинформации цифровые RGB-данные заменяются сигналами яркости и цветности в формате YUV, который занимает значительно меньше места. При воспроизведении сжатых видеоданных сначала необходимо каждый кадр декомпрессировать, а затем уже записывать в кадровый буфер.
  7. Построение 3D-изображений.  Эта категория операций наиболее обширна и сложна, и их описание займет целую книгу. Основы формирования 3D-изображений мы рассмотрим ниже.Первые шесть функций реализуются при ускорении 2D. Существуют также видеоадаптеры с аппаратной поддержкой DVD, TV-out, адаптивного деинтерлейсинга, HyperZ, блоки аппаратного обратного преобразования Фурье (IDCT). Все ускорители можно разделить на графические акселераторы и графические сопроцессоры. Последние, безусловно, являются более универсальными устройствами.

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

Видеоадаптер с графическим сопроцессором (GPU) – это интеллектуальное устройство, основу которого составляет арифметико-логическое устройство (АЛУ).  АЛУ фактически представляет собой микропроцессор, работающий по микроинструкциям из собственного ОЗУ. Главное отличие графического сопроцессора от графического акселератора состоит в том, что сопроцессор можно запрограммировать на выполнение различных задач, тогда как ускоритель работает по жесткому неизменному алгоритму. Акселератор состоит из нескольких узкоспециализированных блоков, обеспечивающих аппаратную поддержку только определенных функций. Кроме того, сопроцессор, в отличие от акселератора, является активным устройством, самостоятельно организующим обращения к памяти, управление шиной ввода/вывода. Наиболее ярко это проявляется при использовании шины AGP в режиме DiME, в котором преобразования выполняются не в кадровом буфере, а в системной памяти.

Память для видеоадаптеров

В видеоадаптерах используется динамическая память с произвольным доступом (DRAM). Этот тип памяти является самым простым и дешевым по исполнению, так как он реализуется на конденсаторах и транзисторах, но требует регенерации (перезарядки).  В связи с этим и скорость доступа к ней не очень высока (до 100 нс.). Современные видеоадаптеры оснащаются памятью SDRAM со скоростью доступа не более 10 нс. или более совершенной памятью DDR, время доступа к которой – от 3,5 нс.

Различают однопортовую и двухпортовую память. Последняя позволяет осуществить одновременное выполнение операций чтения и записи данных, так как к ней по двум различным адресам могут одновременно обращаться графический процессор и RAMDAC. К однопортовой относятся FPM, EDO, SDRAM, DDR. В настоящее время в профессиональных видеокартах могут использоваться две разновидности двухпортовой памяти – VRAM и WRAM.

VRAM (Video RAM) специально разработана для видеосистемы и позволяет одновременно выполнять операции чтения и записи. Естественно, она имеет и соответствующую «профессиональную» цену. Преимущества такой памяти особенно заметны при использовании высокого разрешения и режима True Color. WRAM (Window RAM) очень похожа на VRAM, но работает на частоте 50 МГц, что увеличивает быстродействие на 50% по сравнению с VRAM. Также здесь реализована технология двойной буферизации, в этой памяти имеется режим быстрой буферизации. Для работы предусмотрены 2 кадровых буфера.

Существует также ряд перспективных типов памяти. Среди них RDRAM, DDR SDRAM, DDRII SDRAM, DDR3 SDRAM, 3D RAM, CDRAM, ESDRAM. 3D RAM предназначена для обработки трехмерной графики. Память является двухпортовой и позволяет осуществлять конвейерную обработку данных. CDRAM представляет собой комбинацию из динамической памяти и скоростного буфера кэширования, выполненного на элементах статической памяти.

3D-акселераторы

Акселераторы трехмерной графики стали высшей степенью развития видеоадаптеров. Они предназначены для моделирования трехмерного изображения и его расчета. Первоначально 3D-акселераторы размещались на отдельных платах и соединялись с видеоадаптером кабелем типа Pass-Trough. Поэтому ускоритель 3D-графики воспринимался как самостоятельное устройство и получил такое название. Все современные видеоадаптеры содержат мощный графический процессор, в состав которого помимо традиционного аппаратного ускорителя 2D-графики, входит 3D-акселератор. Так как термин 3D-акселератор потерял свое первоначальное значение, то все вышеописанное устройство следует называть видеоадаптером с графическим процессором с 3D-акселератором, хотя его иногда называют просто 3D-акселератором.

Графический процессор (англ. Graphics Proccesing Unit, GPU) — устройство, выполняющее матефатический обсчет кадров и их графический рендеринг. Современные графические процессоры благодаря специализированной конвейерной архитектуре намного эффективнее в обработке графической информации, чем типичный центральный процессор.

Отличительными особенностями (по сравнению с ЦПУ) являются:

Каждый графичекий процесор имеет свое кодовое наименование. Примером может служить чип R520 от ATI или G70 от nVidia. Чаще всего имеют MIPS архитектуру.

Соответсвие названий современных видеокарт и названий их графических чипов:

nVidia

9800
Кодовое имя процессора G92

9500 GT/ 9600 GT/ 9600 GSO
Кодовое имя процессора G96/ G94/ G92

9300 GЕ/ 9300 GS/ 9400 GT
Кодовое имя процессора G98

8800/ GS 8800/ GТ 8800/ GТS 8800/ GТS 512 8800/ GTХ 8800 Ultra
Кодовое имя процессора G92/ G92/ G80/ G92/ G80/ G80

8600
Кодовое имя процессора G84

8200/ 8300/ 8300/ GS 8400/ GS 8400/ GS rev2 8500 GT
Кодовое имя процессора С78/ С78/ G86/ G86/ G98/ G86

7800/ 7900/ 7950
Кодовое имя процессора G70/ G71/ G71

7600
Кодовое имя процессора G73

7025/ 7050/ 7100/ 7100 GS/ 7150/ 7200 GS/ 7300 SE/ 7300 LE/ 7300 GS/ 7300 GT
Кодовое имя процессора С73/ С73/ С73/ NV44/ С73/ G72/ G72/ G72/ G72/ G73

ATI

HD3870 - RV670
HD3850 - RV670
HD3690 - RV670
HD3650 - RV635
HD3470 - RV620
HD3450 - RV620
HD2900- R600
HD2600- RV630
HD2400- RV610
X1950 - R580+
X1950 - RV570
X1900 - R580
X1800 - R520
X1650 XT - RV560
X1650 Pro - RV530 / RV535
X1600 - RV530
X1550 - RV515 / RV516
X1300 - RV515 / RV505
X1050 - RV370

Синтез 3D- изображений

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

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

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

  1. построение геометрической модели поверхности объекта, путем задания опорных точек и уравнений линий (каркаса, wireframe)
  2. разбиение поверхности полученного объекта на элементарные плоские элементы, чаще всего треугольники (тесселяция, tessellation). На этом этапе объект представляет собой совокупность трехмерных координат вершин треугольников (вертексов, vertex)
  3. трансформация (transformation) сводится к преобразованию координат вертексов для моделирования перемещения объекта и изменения его формы
  4. расчет освещенности (lighting) и затенения (shading) поверхности объекта состоит из расчета освещенности каждого треугольника, но при этом поверхность объекта становится угловатой, состоящей из маленьких плоских граней разной заливки. Для устранения этого дефекта используются различные методы интерполяции
  5. проецирование на плоскость экрана использует две существующие координаты точек и запоминает расстояние от вершин до плоскости проецирования в z-буфере
  6. обработка координат вершин (triangle setup) элементарных треугольников представляет собой сортировку вершин и отбрасывание задних невидимых граней (culling)
  7. удаление скрытых поверхностей (HSR) – удаление из проецирования невидимых поверхностей  объекта
  8. текстурирование, или закраска элементарных треугольников выполняется путем наложения текстур (texture mapping) – квадратных растровых картинок, состоящих  из текселов на каркас. Это первый этап, выполняемый с растровой графикой, при котором каждый треугольник заменяется частью текстуры, а пиксели – текселами. На этом же этапе применяется MIP-mapping – коррекция перспективы, фильтрация
  9. моделирование эффектов прозрачности – коррекция цвета пикселей.
  10. антиалиасинг (anti-aliasing) – устранение дефектов картинки из-за угловатых границ
  11. дизеринг (dithering) – интерполяция недостающих цветов
  12. формирование кадра и пост-обработка в кадровом буфере в локальной памяти видеоадаптера

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

Этапы 1-6 представляют геометрическую стадию 3D-конвейера. Во время этой стадии выполняются интенсивные тригонометрические вычисления, используются числа с плавающей точкой. Эти вычисления в старых видеоадаптерах выполняются в CPU, а в современных мощных – в GPU. Как известно, эра настоящих графических процессоров началась с nVidia GeForce 256 и ATI Radeon 256.

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

API

Еще одним очень важным фактором, отличающим видеоадаптеры различных фирм, является поддержка адаптером различных интерфейсов прикладного программирования (API). Надо сразу сказать, что эти API не только унифицируют работу прикладных программ с видеочипсетом, но и увеличивают производительность данной работы. Дело в том, что каждая видеокарта использует свои команды низкого (аппаратного) уровня. Под эти команды и создаются уникальные для каждого производителя драйвера, которые транслируют обращения прикладных программ к устройству. Если создавать графическую программу, учитывая особенности архитектуры каждой возможной видеокарты, то такая программа будет очень громоздкой, её будет тяжело настраивать пользователю под конкретный видеоадаптер, да и программисты не захотят выполнять столько работы. Для этого и был придуман API, который занимает промежуточное положение между высокоуровневыми прикладными программами и низкоуровневыми – драйверами акселератора, унифицирую подход прикладных программ к любым видеоадаптерам. Это означает, что, например, программист, создающий Photoshop, не обязан знать, как обратиться к конкретной видеокарте, а должен лишь знать, как работать с универсальной API.

Существует несколько универсальных API, таких как DirectX и OpenGL. Но также иногда используются так называемые “native API”, создаваемые производителями непосредственно для своих графических чипсетов. Среди таких можно привести Glide компании 3Dfx (для семейства Voodoo), MeTAL компании S3 (для Savage), RenderGL и другие.

Геометрический процессор стал поддерживаться только в Direct3D (часть DirectX) версии 7.0, поэтому более ранние версии использовать не рекомендуется. Впрочем, версия 7.1 поставляется с Windows ME, так что вам следует лишь обновить её до 8.1. Недавно появился DirectX 9.0, но имейте в виду, что он может обеспечивать прирост производительности видеоакселераторов, поддерживающих её на аппаратном уровне (Radeon 9500, 9700, GeForce FX), кроме того, она пока не очень стабильна, так что без особой нужды DirectX 9.0 ставить не следует.

Архитектура 3D-акселератора

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

Геометрический процессор предназначен для ускорения геометрической стадии 3D-конвейера, которая требует сложных математических расчетов при обсчете вертексов. До чипсетов GeForce и Radeon в дешевых видеокартах использовались геометрические сопроцессоры, которые помогали CPU в расчетах, а иногда и они отсутствовали.

Механизм рендеринга (прорисовки), или как его еще часто называют, конвейер рендеринга является основной частью современного 3D-акселератора и включает в себя, как минимум, два элемента: механизм обработки участков текстур (Texel Engine) и механизм обработки итогового кадра (Pixel Engine). Каждый из этих блоков использует свой участок видеопамяти, называемый буфером текстур и кадровым буфером соответственно. Кадровый буфер нам уже знаком, так как он перешел сюда из стандартной архитектуры VGA/SVGA. Появился лишь отдельный буфер для хранения обрабатываемых текстур. Кроме этого, в локальной памяти акселератора обычно выделяется область еще для нескольких буферов. Z-буфер необходим для корректного удаления скрытых поверхностей, a-буфер необходим для выполнения альфа-смещения, а второй кадровый буфер используется при двойной буферизации. Блок рендеринга у некоторых производителей называется TMU (Texture Mapping Unit) – блок наложения текстур.

Размер кадрового буфера, по аналогии с видеоадаптером VGA, определяет максимально возможное разрешение изображения и размер палитры. В большинстве акселераторов используется метод двойной буферизации, в соответствии с которым кадровый буфер разбивается на две части передний (front buffer) и задний (back buffer) буферы. В то время как происходит считывание и построение RAMDAC’ом изображения из переднего буфера, GPU строит следующий кадр в заднем. Такая «подкачка» обеспечивает плавность смены кадров, ведь после отображения на экране буфер очищается.

Интерфейс 3D- акселераторов

Для лучшей прорисовки кадров необходимо использовать текстуры больших размеров, а для этого требуется не менее 8 Мбайт видеопамяти. Чтобы иметь возможность передавать такой поток данных через свой интерфейс, она должна иметь высокоскоростную шину графического порта. Такой шиной стала AGP (Accelerated Graphics Port). Эта 32-разрядная шина имеет базовую частоту 66 МГц, но может работать в режиме 4x (266 МГц) и передавать 1Гб/с. При этом используется пониженное в 2 раза питание видеокарт 1,5 В, соответственно и видеокарта должна удовлетворять этому критерию. Новый, недавно введенный и пока еще мало используемый, режим 8x (Revision 3.0) реализован в новейших видеоадаптерах. Реально пока ни одна графическая программа не способна использовать его в полной мере.

Стандарт AGP имеет ряд важных особенностей, которые значительно увеличивают эффективную пропускную способность шины. Pipelining – пакетная (конвейерная) передача данных, когда следующий код адреса выставляется на шине сразу, не ожидая появления данных предыдущего адреса, т.е. коды адреса как бы выстраиваются в очередь. Данные последовательность адресов, которых была передана, также пересылаются по шине в виде пакета. В результате, задержка выдачи данных после выставления адреса на шине отсутствует.

Кроме того, в AGP, в отличие от PCI, используется режим SBA (Side Band Addressing), в котором для передачи адреса используются 8 дополнительных линий, т.е. адрес и данные передаются по разным линиям.

И, наконец, помимо режима DMA в стандарте AGP используется DME (Direct Memory Execution) – режим, в котором локальная память видеокарты и системная память равноценны и являются одним адресным пространством, так что операции с текстурами могут выполняться как локальной, так и в системной памяти. В этом режиме обмен идет короткими пакетами, так что достигается значительное ускорение операций с текстурами.

PCI Express или PCIe или PCI-E, (также известная как 3GIO for 3rd Generation I/O; не путать с PCI-X или PXI) — компьютерная шина, использующая программную модель шины PCI и высокопроизводительный физический протокол, основанный на последовательной передаче данных.

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

Кроме того, шиной PCI Express поддерживается:

Шина PCI Express нацелена на использование только в качестве локальной шины. Так как программная модель PCI Express во многом унаследована от PCI, то существующие системы и контроллеры могут быть доработаны для использования шины PCI Express заменой только физического уровня, без доработки программного обеспечения. Высокая пиковая производительность шины PCI Express позволяет использовать её вместо шин AGP и тем более PCI и PCI-X, ожидается, что PCI Express заменит эти шины в персональных компьютерах.

Для подключения устройства PCI Express используется двунаправленное последовательное соединение типа точка-точка, называемое lane; это резко отличается от PCI, в которой все устройства подключаются к общей 32-разрядной параллельной однонаправленной шине.

Соединение между двумя устройствами PCI Express называется link, и состоит из одного (называемого 1x) или нескольких (2x, 4x, 8x, 12x, 16x и 32x) двунаправленных последовательных соединений lane. Каждое устройство должно поддерживать соединение 1x.

Пропускная способность, с учётом двунаправленной передачи, для шин PCI Express с разным количеством связей указана в таблице:

Используется связей 1x 2x 4x 8x 12x 16x 32x
Пропускная способность PCI Express 1.0, ГБ/c 0,5 1 2 4 6 8 16
Пропускная способность PCI Express 2.0, ГБ/c 1 2 4 8 12 16 32

Cпецификация PCI Express 2.0 определяет максимальную пропускную способность одного соединения lane как 5 Гбит/с, при этом сохранена совместимость с PCI Express 1.1. Идет работа над PCI-Express 3.0. Он будет обладать пропускной способностью в 8 Гбит/с. Планы на PCI-Express 3.0: утверждение в 2009 году, а первые продукты на основе нового интерфейса — в 2010 году.

Поделиться в соц. сетях

Опубликовать в Google Plus
Опубликовать в LiveJournal
Опубликовать в Мой Мир
Опубликовать в Одноклассники
Опубликовать в Яндекс

(Посещений: 4, из них сегодня: 1)

Понравилась публикация? Почему нет? Оставь коммент ниже или подпишись на feed и получай список новых статей автоматически через feeder.

Комментарии

Комментов еще нет.

Оставьте коммент

(required)

(required)