4.
Видеоподсистема компьютера
4.2. Принципиальное устройство графического ускорителя.
Для работы с трехмерной графикой обычно используют
специализированные прикладные программные библиотеки (Graphics API). Нам они важны потому,
что производительность и качество работы видеоадаптера во многом зависит от
поддерживаемых им библиотек. Итак, рассмотрим самые распространенные прикладные
программные библиотеки для работы с трехмерной графикой.
Direct3D —
библиотека является частью программного интерфейса Microsoft DirectX и
поддерживается практически всеми ускорителями. Начиная с версии 6 технология Direct3D является по своим возможностям
достойным конкурентом OpenGL.
Принципиальное отличие Direct3D
от OpenGL заключается
отнюдь не в инструкциях, а в подходе к стандартизации и масштабируемости. Если
функции OpenGL
прирастают главным образом за счет расширений, которые должны доказать свою
полезность, чтобы попасть в число стандартных в следующей «инкарнации»
библиотеки, то в Direct3D никаких подключаемых
модулей не предусмотрено.
В связи с этим новый набор функций легализуется только с
появлением очередной версии DirectX
(где функции Direct3D стоят в одной очереди за
«сертификатом» на стандартизацию с Directsound и другими библиотеками программ). Например,
вершинные и пиксельные шейдеры были легализованы только в DirectX версии 8. Очевидно, что
производителям железа и программ нет никакого смысла включать в программы и
аппаратуру новейшие функции: а вдруг Microsoft не утвердит их в следующей версии DirectX? Вместе с тем жесткая
стандартизация уже имеющихся функций позволяет использовать их с наибольшей
пользой и создавать эффективный код.
В последние годы популярность Direct3D значительно выросла благодаря двухуровневой системе взаимодействия с приложениями: Direct3D Immediate Mode (непосредственный режим) и Direct3D Retained Mode (дистанционный режим). В непосредственном режиме приложение полностью опирается на функции Direct3D и не использует никаких других расширений. В дистанционном режиме приложение оперирует только частью базовых инструкций, в основном ввода-вывода, а в остальном опирается на собственный графический движок. Такой подход позволяет реализовать в играх новые эффекты, не дожидаясь выхода версии DirectX с их поддержкой.
Вершинные шейдеры версия
1.1 |
Пиксельные шейдеры до
версии 1.4 вкл. |
Процедурная геометрия |
Попиксельное освещение |
Смешивание вершин |
Полноценное затенение по Фонгу |
Скиннинг и морфинг |
Анизотропное освещение |
Генерация текстур |
Специальные виды рендеринга |
Интерполяция по ключевым кадрам |
Попиксельное отражение по Фреснелю |
Рендеринг систем частиц |
Объемные эффекты |
Модификация перспективного вида |
Новые карты рельефа |
Новые модели освещения |
Процедурные текстуры |
Простые карты смещения |
|
Новые возможности
DirectX 9
- Вершинные шейдеры Vertex Shader 2.0
- Пиксельные
шейдеры Pixel Shader
2.0
- Адаптивная тесселяция
Adaptive Tesselation
- Минимум 10 бит на
каждый канал цветности
- Поддержка карт смещения Displacement Map
OpenGL — библиотека пришла на платформу PC из сферы рабочих станций фирмы Silicon Graphics во многом благодаря игре Quake, использовавшей ее несколько упрощенный вариант. Наличие поддержки этой библиотеки у видеоадаптера очень желательно, так как многие программы оптимизированы под OpenGL.
Библиотека OpenGL имеет сравнительно небольшой набор базовых функций для реализации стандартных эффектов и многочисленные специализированные расширения, теоретически позволяющие изобразить на экране что угодно, лишь бы эти расширения поддерживались приложениями и видеокартами. В связи с этим нередко возникают проблемы из-за несовместимости функций, задействованных в приложениях (чаще всего в играх) и реализованных в драйверах и BIOS конкретной видеокарты.
В самом полном виде расширенные функции поддерживаются с помощью инсталлируемого драйвера клиента (OpenGL Installable Client Driver), однако разработка такого драйвера связана с большой трудоемкостью. Быстрее и проще разработать драйвер с усеченными возможностями — мини-клиент (OpenGL Mini Client Driver), который поддерживает не все функции и не всегда оптимизирован по коду. Часто в качестве альтернативы применяют драйвер-минипорт (OpenGL Miniport Driver), созданный для поддержки какой-либо конкретной игры. Наконец, иногда можно встретить так называемый раппер (OpenGL Ripper) — драйвер-минипорт, транслирующий инструкции OpenGL в код другого API.
В настоящее время ожидается выход OpenGL 2.0 с поддержкой новых функций обработки графики.
OpenGL 1.3 |
OpenGL 2.0 |
Трансформации |
Объекты |
Масштабирование |
Процессор упаковки/распаковки донных |
Наложение текстур |
Управление памятью |
Мультитекстурирование |
Процессор обработки вершин |
Туман |
Процессор фрагментов |
Массивы вершин |
Вершинные шейдеры |
Операции с буфером кадра |
Буфер внешних данных |
Управление синхронизацией |
Управляемый буфер кадра |
Освещение |
Буфер отрисовки |
Обрезка по кадру |
Пиксельные шейдеры |
Конвейер фиксированных операций |
|
Glide — собственная библиотека фирмы 3DFx, временно завоевавшая популярность благодаря бурному распространению ускорителей Voodoo Graphics. Она слабо поддерживается другими ускорителями и, видимо, в ближайшее время окончательно сойдет со сцены.
Fahrenheit — с 1997 года компании Silicon Graphics, Microsoft, Intel и Hewlett-Packard ведут разработку нового графического API, получившего название Fahrenheit, призванного вытеснить OpenGL и заменить Direct3D, став единым стандартом для разработчиков программ и видеокарт. Эффективность нового API обеспечивается разделением функций между тремя частями разного уровня. На первом уровне (Fahrenheit Low Level) поддерживаются первичные функции ввода-вывода, затенения и прочие, воздействующие непосредственно на полигоны и отдельные пикселы, что похоже на нынешние инструкции Direct3D и OpenGL. На уровне композиции сцены (Fahrenheit Scene Graph) функции API управляют камерами, источниками света и другими объектами, которые не относятся к отдельным полигонам. Для управления моделями предназначены функции верхнего уровня (Fahrenheit Large Model). Принятый в Fahrenheit способ построения и расчета сцен позволяет формировать гибкие алгоритмы взаимодействия приложений, API и железа на видеокартах. Очевидно, что и пользователю не надо будет ломать голову над проблемой совместимости видеокарт с приложениями, драйверами и разными API.
Современный видеоадаптер (графический чипсет) включает
следующие основные компоненты:
- BIOS;
- 2 D -ускоритель;
- блок обработки
(ускоритель) ЗD-графики;
- блок обработки
видеосигналов;
- контроллер
памяти;
- видеопамять;
- интерфейс шины AGP;
- интерфейс
внешнего порта ввода-вывода;
- цифроаналоговый
преобразователь RAMDAC.
В качестве дополнительных компонентов на видеокарте могут присутствовать формирователь телевизионного сигнала с выходным разъемом (TV-Out), блок обработки (ускоритель) сигналов телевидения высокой четкости (HDTV), блок обработки DVD, цифровой выход для ЖК-мониторов (DVI), телевизионный тюнер.
Цифро-аналоговый преобразователь отвечает за формирование
окончательного изображения на мониторе, то есть преобразует цифровое
изображение, поступающее из буфера кадра, в уровни интенсивности, подаваемые
на соответствующую электронную пушку (красную, зеленую, синюю) трубки монитора.
Аппаратная структура RAMDAC практически описана в его названии, где RAM — это Random Access Memory (память
с произвольной выборкой), а DАС
— это Digital to Analog Converter
(цифро-аналоговый преобразователь). Память в модулях RAMDAC построена на статических
элементах, поэтому по быстродействию примерно соответствует кэш-памяти
процессоров.
Один из первых RAMDAC был разработан фирмой IBM в 1985 г. и обеспечивал вывод
изображения с разрешением 320x200 точек при цветовом охвате 8 бит. В дальнейшем
схемотехника RAMDAC
быстро развивалась, и сегодня стандартным считается RAMDAC, обеспечивающий разрешение 1600x1200
точек при 32-битном цвете на частоте 75~85 Гц. В режиме Direct Color обеспечивается прямой
доступ к элементам DAC.
Это позволяет создавать независимые таблицы для каждого цвета и, тем самым,
компенсировать цветовые искажения. Такой эффект «правки» цвета получил название
гамма-коррекции.
Качество получаемого изображения в решающей степени зависит от таких характеристик RAMDAC, как его частота, разрядность, время переключения с черного сигнала на белый и обратно, варианта исполнения (внешний или внутренний). Частота RAMDAC говорит о том какое максимальное разрешение при какой частоте кадровой развертки сможет поддерживать видеоадаптер. Например, при разрешении 1024x768 точек и частоте кадровой развертки 70 Гц необходимо выводить единичный пиксел примерно за 13 нс (с учетом времени на обратный ход луча по горизонтали и вертикали). Следовательно, в этом режиме RAMDAC должен поддерживать собственную частоту около 75 МГц. Современными можно считать RAMDAC с частотой не ниже 200 МГц.
Разрядность RAMDAC говорит о том, сколько цветов теоретически способен воспроизводить видеоадаптер. Большинство микросхем поддерживает представление 8 бит на каждый канал цвета, что обеспечивает отображение около 16,7 миллионов цветов. За счет гамма-коррекции исходное цветовое пространство расширяется еще больше. В последнее время появились RAMDAC с разрядностью 10 бит по каждому каналу, охватывающие более миллиарда цветов.
Обычно не афишируемым параметром является Slew Rate. Это время, в течение которого электронный луч пушки кинескопа включается, достигает максимальной яркости на заданном пикселе и выключается (переключение сигнала на белый — белый пиксел на черном фоне) и наоборот (черный пиксел на белом фоне). Случается, что не успевший полностью погаснуть луч уже переводится на следующий пиксел или не достигший требуемой яркости луч перескакивает дальше. В результате соседний пиксел уже задействован, а предыдущий еще не «остыл», поэтому его цвет как бы размазывается на соседние элементы. Такой эффект с чьей-то легкой руки получил название «за-мыливание» и встречается, к сожалению, частенько. При этом у RAMDAC с меньшей частотой параметр Slew Rate может быть лучше, чем у высокочастотных собратьев.
Следует обратить внимание на то, как именно выполнен модуль RAMDAC на видеокарте — внутренним или внешним. Обычно в массовых изделиях он совмещен на одном кристалле с видеоконтроллером. Понятно, что соседство с другими интенсивно работающими контурами кристалла ему на пользу не идет и влияет на стабильность работы, в том числе и на показатель Slew Rate.
В некоторых версиях видеокарт устанавливают два независимых RAMDAC, обеспечивающих вывод разных изображений на два устройства, например — монитор и телевизор. Частота встроенного RAMDAC на современных видеоадаптерах составляет 350 МГц (в чипсете Radeon 8500 — 400 МГц).
Можно считать, что сейчас выпускаются видеокарты на базе четвертого поколения графических чипсетов. Это поколение характеризуется полностью программируемым графическим процессором. Разработчики программ получают возможность описывать способы обработки графики с помощью команд, все более похожих на операторы языков программирования высокого уровня, например C++. Поддержка программируемых графических процессоров предусмотрена в API DirectX версии 9. Четвертое поколение можно считать поколением Х9 поскольку и архитектура чипсетов, и функции API DirectX9 разрабатываются в тесном взаимодействии.
Рассмотрим технические данные видеокарты на примере одного из лидеров на рынке графических чипсетов – компании ATI. Итак видеокарта RADEON 9800 XT (R360).
Приведем характеристики, с которыми RADEON 9800 XT был анонсирован:
-Технология производства: 0.15 микрон;
-Число транзисторов: 115 миллионов;
-Тактовая частота ядра: 412 МГц;
-Шина памяти: 256 бит DDR II ;
-Максимальный объем локальной памяти: 256 Мб;
-Тактовая частота памяти: 375 DDR (730) МГц, пропускная способность около 24 Гб/сек;
-Интерфейсная шина: AGP 8x/4x, пропускная способность 2 Гб/сек;
-Полная поддержка основных возможностей DX9:
-Плавающие 64 и 128 бит форматы данных для текстур (включая объемные и кубические текстуры) и кадрового буфера (векторы из 4 компонент F16 или F32);
-Пиксельные конвейеры с плавающей арифметикой (формат вычислений F24[4] или F24[3+1]);
-Пиксельные шейдеры версии 2.0;
-Четыре независимых вершинных конвейера;
-Вершинные шейдеры версии 2.0;
-Аппаратная тесселяция N-Patches с картами смещения (Displacement Mapping) и, по желанию, адаптивным уровнем детализации;
-Новая технология F-буфера позволяет исполнять пиксельные шейдеры практически неограниченной длины.
-Восемь независимых пиксельных конвейеров
-Восемь текстурных блоков (по одному на пиксельный конвейер), способных производить трилинейную фильтрацию без потери скорости, а также комбинировать анизотропную фильтрацию с трилинейной.
-Четырехканальный (4 канала по 64 бита) контроллер памяти, связанный с ядром ускорителя и AGP коммутатором "каждый-с-каждым";
-Технология экономии пропускной полосы памяти HyperZ III+ (Быстрая очистка и сжатие буфера глубины на основе блоков 8х8, иерархический Z-буфер для быстрого определения видимости);
-Дополнительные оптимизации для скоростной работы двустороннего буфера шаблонов.
-Ранний Z-тест (пиксельный шейдер выполняется только для видимых пикселей);
-Аппаратное ускорение распаковки и сжатия MPEG 1/2, возможность произвольно обрабатывать видеопоток с помощью пиксельных шейдеров (технология VIDEOSHADER);
-Два независимых CRTC;
-Два встроенных 10 бит 400 МГц RAMDAC с аппаратной гаммакоррекцией;
-Встроенный TV-Out;
-Встроенный DVI (TDMS трансмиттер) интерфейс, разрешение до 2043*1536.
-Встроенный цифровой интерфейс общего назначения для подключения внешнего RAMDAC или DVI трансмиттера, а также для сопряжения с TV тюнером.
-FC корпусовка (FlipChip — с перевернутым открытым кристаллом).
Графический
процессор R360
Итак, характеристики, очень близки к предыдущему флагману — R300. Основным аппаратные отличия кроются в двух областях — оптимизации производительности работы с двусторонним буфером шаблонов — которая может дать прирост в играх на движке DOOM III и им подобных, интенсивно использующих динамические тени на основе буфера шаблонов, и наличие специальной логики в пиксельных процессорах.
Эта дополнительная возможность позволяет сохранять в локальной памяти ускорителя не только финальные значения цвета, рассчитанные пиксельным шейдером, но и промежуточные значения параметров, возникающих, по ходу расчета. Такой подход называется F-буфером и требует наличия относительно несложной аппаратной поддержки в чипе (запись и восстановление потока параметров) а также специального компилятора. Все вместе это позволяет аппаратно исполнять практически неограниченные по длине шейдеры, разбивая их на куски, каждый из которых отрабатывает отдельно, над целой зоной экрана, для каждого пиксела из этой зоны записывая промежуточные параметры, передаваемые следующему куску шейдера в буфер параметров (F-буфер). Следующий кусок шейдера считывает параметры в той же последовательности, в которой они были записаны, продолжает вычисления, и снова записывает уже новые параметры. Этот подход в большинстве случаев будет более выгодным с точки зрения производительности, чем многопроходное построение изображения. Однако пока, поддержка этой технологии планируется только в OpenGL драйвере.
Разумеется, эта технология нацелена в первую очередь на реалистическую графику и DCC — в играх пока еще далеко до полного освоения возможностей даже стандартных ограниченных 64 вычислительными командами пиксельных шейдеров 2.0.