Видеоадаптеры, классификация, особенности строения и работы

Устройство, которое называется видеоадаптером (или видеоплатой, видеокартой), есть в каждом компьютере. В виде устройства, интегрированного в системную плату, либо в качестве самостоятельного компонента – платы расширения. Главная функция, выполняемая видеокартой, это преобразование полученной от центрального процессора информации и команд в формат, который воспринимается электроникой монитора, для создания изображения на экране. Монитор обычно является неотъемлемой частью любой системы, с помощью которого пользователь получает визуальную информацию.

Стандартные типы видеоадаптеров
MDA (Monochrome Display Adapter - монохромный адаптер дисплея) - простейший видеоадаптер, применявшийся в первых IBM PC. Работает в текстовом режиме с разрешением 80x25 (720x350, матрица символа - 9x14), поддерживает пять атрибутов текста: обычный, яркий, инверсный, подчеркнутый и мигающий. Частота строчной развертки - 15 Кгц. Интерфейс с монитором - цифровой: сигналы синхронизации, основной видеосигнал, дополнительный сигнал яркости.
HGC (Hercules Graphics Card - графическая карта Hercules) - расширение MDA с графическим режимом 720x348, разработанное фирмой Hercules.
CGA (Color Graphics Adapter - цветной графический адаптер) - первый адаптер с графическими возможностями. Работает либо в текстовом режиме с разрешениями 40x25 и 80x25 (матрица символа - 8x8), либо в графическом с разрешениями 320x200 или 640x200. В текстовых режимах доступно 256 атрибутов символа - 16 цветов символа и 16 цветов фона (либо 8 цветов фона и атрибут мигания), в графических режимах доступно четыре палитры по четыре цвета каждая в режиме 320x200, режим 640x200 - монохромный. Вывод информации на экран требовал синхронизации с разверткой, в противном случае возникали конфликты по видеопамяти, проявляющиеся в виде "снега" на экране. Частота строчной развертки - 15 Кгц. Интерфейс с монитором - цифровой: сигналы синхронизации, основной видеосигнал (три канала - красный, зеленый, синий), дополнительный сигнал яркости.
EGA (Enhanced Graphics Adapter - улучшенный графический адаптер) - дальнейшее развитие CGA, примененное в первых PC AT. Добавлено разрешение 640x350, что в текстовых режимах дает формат 80x25 при матрице символа 8x14 и 80x43 - при матрице 8x8. Количество одновременно отображаемых цветов - по-прежнему 16, однако палитра расширена до 64 цветов (по два разряда яркости на каждый цвет). Введен промежуточный буфер для передаваемого на монитор потока данных, благодаря чему отпала необходимость в синхронизации при выводе в текстовых режимах. структура видеопамяти сделана на основе так называемых битовых плоскостей - "слоев", каждый из которых в графическом режиме содержит биты только своего цвета, а в текстовых режимах по плоскостям разделяются собственно текст и данные знакогенератора. Совместим с MDA и CGA. Частоты строчной развертки - 15 и 18 Кгц. Интерфейс с монитором - цифровой: сигналы синхронизации, видеосигнал (по две линии на каждый из основных цветов).
MCGA (Multicolor Graphics Adapter - многоцветный графический адаптер) - введен фирмой IBM в ранних моделях PS/2. Добавлено разрешение 640x400 (текст), что дает формат 80x25 при матрице символа 8x16 и 80x50 - при матрице 8x8. Количество воспроизводимых цветов увеличено до 262144 (по 64 уровня на каждый из основных цветов). Помимо палитры, введено понятие таблицы цветов, через которую выполняется преобразование 64-цветного пространства цветов EGA в пространство цветов MCGA. Введен также видеорежим 320x200x256, в котором вместо битовых плоскостей используется представление экрана непрерывной областью памяти объемом 64000 байт, где каждый байт описывает цвет соответствующей ему точки экрана. Совместим с CGA по всем режимам, а с EGA - по текстовым, за исключением размера матрицы символа. Частота строчной развертки - 31 Кгц, для эмуляции режимов CGA используется так называемое двойное сканирование - дублирование каждой строки формата Nx200 в режиме Nx400. интерфейс с монитором - аналогово-цифpовой: цифровые сигналы синхронизации, аналоговые сигналы основных цветов, передаваемые монитору без дискретизации. Поддерживает подключение монохромного монитора и его автоматическое опознание - при этом в видео-BIOS включается режим суммирования цветов по так называемой шкале серого (grayscale) для получения полутонового чеpно-белого изображения. Суммирование выполняется только при выводе через BIOS - при непосредственной записи в видеопамять на монитор попадает только сигнал зеленого цвета (если он не имеет встроенного цветосмесителя).
VGA (Video Graphics Array - множество, или массив, визуальной графики) - расширение MCGA, совместимое с EGA, введен фирмой IBM в средних моделях PS/2. Фактический стандарт видеоадаптера с конца 80-х годов. Добавлен текстовый режим 720x400 для эмуляции MDA и графический режим 640x480 с доступом через битовые плоскости. В режиме 640x480 используется так называемая квадратная точка (соотношение количества точек по горизонтали и вертикали совпадает со стандартным соотношением сторон экрана - 4:3). Совместим с MDA, CGA и EGA, интерфейс с монитором идентичен MCGA.
IBM 8514/а - специализированный адаптер для работы с высокими разрешениями (640x480x256 и 1024x768x256), с элементами графического ускорителя. Не поддерживает видеорежимы VGA. интерфейс с монитором аналогичен VGA/MCGA.
IBM XGA - следующий специализированный адаптер IBM. расширено цветовое пространство (режим 640x480x64k), добавлен текстовый режим 132x25 (1056x400). Интерфейс с монитором аналогичен VGA/MCGA.
SVGA (Super VGA - "сверх" VGA) - расширение VGA с добавлением более высоких разрешений и дополнительного сервиса. Видеорежимы добавляются из ряда 800x600, 1024x768, 1152x864, 1280x1024, 1600x1200 - все с соотношением 4:3. Цветовое пространство расширено до 65536 (High Color) или 16.7 млн. (True Color). Также добавляются расширенные текстовые режимы формата 132x25, 132x43, 132x50. Из дополнительного сервиса добавлена поддержка VBE. Фактический стандарт видеоадаптера примерно с 1992 г.
Устройство типовой видеокарты
Она состоит из четырех основных устройств: памяти, контроллера, ЦАП и ПЗУ.
Видеопамять служит для хранения изображения. От ее объема зависит максимально возможное полное разрешение видеокарты – A*B*C, где A - количество точек по горизонтали, B - по вертикали, и C - количество возможных цветов каждой точки. Например, для разрешения 640x480x16 достаточно 256 Кб, для 800x600x256 - 512 Кб, для 1024x768x65536 (другое обозначение - 1024x768x64k) - 2 Мб, и т.д. Поскольку для хранения цветов отводится целое число разрядов, количество цветов всегда является степенью двойки (16 цветов - 4 разряда, 256 - 8 разрядов, 64k - 16, и т.д.).
Видеоконтроллер отвечает за вывод изображения из видеопамяти, регенерацию ее содержимого, формирование сигналов развертки для монитора и обработку запросов центрального процессора. Для исключения конфликтов при обращении к памяти со стороны видеоконтроллера и центрального процессора первый имеет отдельный буфер, который в свободное от обращений ЦП время заполняется данными из видеопамяти. Если конфликта избежать не удается - видеоконтроллеру приходится задерживать обращение ЦП к видеопамяти, что снижает производительность системы; для исключения подобных конфликтов в ряде карт применялась так называемая двухпортовая память, допускающая одновременные обращения со стороны двух устройств.
Многие современные видеоконтроллеры является потоковыми - их работа основана на создании и смешивании воедино нескольких потоков графической информации. Обычно это основное изображение, на которое накладывается изображение аппаратного курсора мыши и отдельное изображение в прямоугольном окне. Видеоконтроллер с потоковой обработкой, а также с аппаратной поддержкой некоторых типовых функций называется акселератором или ускорителем, и служит для разгрузки ЦП от рутинных операций по формированию изображения.
ЦАП (цифроаналоговый преобразователь, DAC) служит для преобразования результирующего потока данных, формируемого видеоконтроллером, в уровни интенсивности цвета, подаваемые на монитор. Все современные мониторы используют аналоговый видеосигнал, поэтому возможный диапазон цветности изображения определяется только параметрами ЦАП. Большинство ЦАП имеют разрядность 8x3 - три канала основных цветов (красный, синий, зеленый, RGB) по 256 уровней яркости на каждый цвет, что в сумме дает 16.7 млн. цветов. Обычно ЦАП совмещен на одном кристалле с видеоконтроллером.
Видео-ПЗУ - постоянное запоминающее устройство, в которое записаны видео-BIOS, экранные шрифты, служебные таблицы и т.п. ПЗУ не используется видеоконтроллером напрямую - к нему обращается только центральный процессор, и в результате выполнения им программ из ПЗУ происходят обращения к видеоконтроллеру и видеопамяти. ПЗУ необходимо только для первоначального запуска адаптера и работы в режиме MS DOS; операционные системы с графическим интерфейсом - Windows или OS/2 - практически не используют ПЗУ для управления адаптером, хотя и могут иметь проблемы в работе при ошибках в программе BIOS, не найденных разработчиками.
На карте обычно размещаются один или несколько разъемов для внутреннего соединения; один из них носит название Feature Connector и служит для предоставления внешним устройствам доступа к видеопамяти и изображению. К этому разъему может подключаться телеприемник, аппаратный декодер MPEG, устройство ввода изображения и т.п. На некоторых картах предусмотрены отдельные разъемы для подобных устройств.
Видеоускорители (акселераторы)
Ускоритель (accelerator) - набор аппаратных возможностей адаптера, предназначенный для перекладывания части типовых операций по работе с изображением на встроенный процессор адаптера. Различаются ускорители графики (graphics accelerator) с поддержкой изображения отрезков, простых фигур, заливки цветом, вывода курсора мыши и т.п., и ускорители анимации (video accelerators) - с поддержкой масштабирования элементов изображения и преобразования цветового пространства.
Почти сразу после появления SVGA, видеоадаптеры стали оснащать акселераторами для аппаратного ускорения работы с графическими операционными системами – прорисовкой и заливкой “окон”, аппаратным курсором “мыши” и пр., а затем и ускорения некоторых простых, но сильно загружавших процессор операций работы с цифровым видео – MPEG. Вплоть до переноса на видеочип полного декодера MPEG.
В последнее время в области 2D-графики наметился некоторый застой – ничего нового в этой области уже не было придумано, все видеоплаты, вплоть до самых дешевых, почти выровнялись по скорости и качеству изображения. Однако рынок видеоплат был прямо таки взорван появлением АКСЕЛЕРАТОРОВ ТРЕХМЕРНОЙ ГРАФИКИ.
Основные понятия 3D-графики
* Артефакты (Artefacts)
Артефакт – недостаток, побочный эффект, изъян, присутствующий в изображении. Ниже приводятся названия распространенных артефактов (эти названия используются в описании понятий), и их английские эквиваленты. Названия в целом условны – у многих предметов нет стандартного названия.
Размытость Blur смазывание мелких деталей текстуры
Муар Moire pattern текстура с регулярной структурой получает инородный рисунок
Полосы мипмэппинга Mipmap bands видны границы между текстурами с разными мип-уровнями (на рисунке сверху и снизу)
Пикселизация Pixelization образование "квадратов" при сильном растягивании текстуры и отсутствии билинейной фильтрации
Шум Noise, sparkling текстура теряет свою структуру; при движении текстура не двигается, а "шумит"
Нестыковка текстур полигоны не стыкуются между собой, оставляя тонкие светлые или темные промежутки
Лестничный эффект Jaggies, stair-stepping зубчатость краев полигонов и диагональных линий
Z-алиасинг Z-aliasing неправильный расчет глубины
* Альфа-смешение (Alpha blending)
Альфа-смешение – техника создания эффекта полупрозрачности путем объединения исходного пиксела с пикселом, уже находящимся во фрейм-буфере. Каждому пикселу обычно ставится в соответствие значения красного, зеленого и синего компонентов цвета (R,G,B). Если ставится в соответствие еще альфа-значение, то говорят что пикселы имеют альфа-канал (компонент A в схеме RGBA). Альфа-значение определяет степень прозрачности конкретного пиксела. Объекты могут иметь различную прозрачность, например стекло имеет высокий уровень прозрачности (и таким образом низкое альфа-значение), а желе – средний уровень. Альфа-смешение есть процесс комбинирования двух объектов на экране с учетом их альфа-каналов.
Альфа-смешение используется для: антиалиасинга, прозрачности, создания теней, зеркал, тумана.
* Антиалиасинг (Anti-aliasing)
Алиасинг – результат сэмплинга, то есть преобразования непрерывного изображение в дискретное. Алиасинг ухудшает качество изображения, вызывая разнообразные артефакты: лестничный эффект, муар и шум. Антиалиасинг призван нейтрализовать подобные артефакты и улучшить качество изображения. По предназначению антиалиасинг делится на краевой и полный.
Краевой антиалиасинг – механизм борьбы с лестничным эффектом. Краевой антиалиасинг сглаживает края полигонов и диагональные линии. Краевой антиалиасинг применяется в 3D-ускорителях Voodoo Graphics, Voodoo 2, Verite V2000.


Для реализации краевого антиалиасинга чаще всего используют технику усреднения по площади (area averaging). Цвет пиксела определяется на основании того, насколько каждый полигон перекрывает данный пиксел. Например, как показано на рисунке ниже, пиксел перекрывают два полигона: A и B. Метод усреднения по площади определяет видимые области, занимаемые полигонами, которые "прикасаются" к пикселу, и вычисляет результирующий цвет на основании видимых площадей перекрытия (то есть принадлежащих и пикселу, и полигону). Пусть полигон A занимает 40% площади пиксела, а полигон B – 60%. Результирующий цвет в этом случае определяется цветами A и B c весовыми коэффициентами 40% и 60% соответственно (то есть проводится операция альфа-смешения). Для линий и точек метод тот же самый, в данном случае считается, что линии и точки имеют ненулевую площадь.

К сожалению, альфа-смешение в краевом антиалиасинге приводит к появлению артефакта под названием bleeding (дословно "кровоточение"). Bleeding – окрашивание внутренних ребер в цвет фона, это связано с тем, что между гранями образуется тонкий просвет. Поэтому программа сама должна знать, какие ребра и линии нужно сглаживать. Из-за этого краевой антиалиасинг сложно программировать.

Полный антиалиасинг, в отличие от краевого, направлен на полную нейтрализацию алиасинга. Единственным представителем полного антиалиасинга является субпиксельный антиалиасинг. Субпиксельный антиалиасинг применяется в 3D-ускорителях PVNG, Intel740, nVidia Riva128 и TNT, а также во всех профессиональных OpenGL-ускорителях.
Субпиксельный антиалиасинг в Intel740 и nVidia Riva TNT базируется на технике суперсэмплинга. Суперсэмплинг означает, что вся сцена рендерится в каком-то большом виртуальном разрешении, а затем сжимается до фактического разрешения. В общем случае виртуальное и фактическое разрешения могут быть некратными. Техника суперсэмплинга возможна из-за того, что эти ускорители используют tile-based архитектуру. Ускорителю традиционной архитектуры потребовался бы большой объем памяти (для виртуального разрешения 1600x1200 – более 8 MB). Дело в том, что ускоритель tile-based архитектуры не работает с целым фреймбуфером, а с отдельными фрагментами (tiles). И все данные о субпикселах он хранит только для фрагмента, который рендерится в данный момент.

В 3D-ускорителях серии Glint от 3DLabs используется другой метод, основанный на хранении маски. Рассмотрим случай, когда 1 пиксел разбивается на 16 (4x4) субпикселов (эта техника называется мультисэмплингом), а полигоны рендерятся front-to-back (картинка снизу).

Когда рендерится полигон не переднем плане, субпикселы 2,3,4,7,8,12 окрашиваются в цвет переднего полигона. Причем запоминается, какие субпикселы попали в передний полигон, то есть маска. Эта маска проверяется когда рендерится задний полигон. Субпикселы 1,5,6,9 окрашиваются в цвет заднего полигона. Субпикселы 2,3, принадлежащие обоим полигонам, не изменяют цвет и таким образом остаются с цветом переднего полигона. В результате – никакого bleedingа.
Обратная сторона такого антиалиасинга – это необходимость хранения маски для каждого пиксела и требование сортировки полигонов front-to-back. Второе требование можно обойти, сохраняя z-координату для каждого субпиксела. Однако хранить z-координаты для всех субпикселей на экране невозможно, так как это требует гигантского объема видеопамяти. Поддержку субпиксельного антиалиасинга с z-буферизацией реализует техника аккумулятора. Суть его сводится к тому, что обработка ведется последовательно для каждого пиксела и при этом используется одна и та же память. Недостаток: из-за требования последовательной обработки невозможность аппаратного распараллеливания и как следствие уменьшение производительности в число раз, равное числу субпикселов в пикселе. Например субпиксельный антиалиасинг 4x4 снижает производительность в 16 раз, или другими словами увеличивает Fillrate в 16 раз.

* Мипмэппинг (MIP-mapping)
Мипмэппинг (MIP-mapping) использует несколько версий одной текстуры с разной степенью детализации (LOD – level-of-detail), причем следующая версия меньше предыдущей в 4 раза (например 128x128, 64x64, 32x32 и т.д.). Такие версии называются мип-уровнями, а все версии одной текстуры – мип-каскадом.
Цели мипмэппинга:
o Уменьшение времени обработки – для объектов на далеком расстоянии обрабатывать текстуру с низким разрешением гораздо легче
o Избавление от шума и муара - добавление мип-уровней с низким уровнем детализации
Существует несколько видов мипмэппинга, но все они используют 1 либо 2 соседних мип-уровня. При мипмэппинге, каждый используемый мип-уровень либо увеличивается, либо уменьшается (соотвествие 1:1 статистически редко). Увеличение и уменьшение называются соответственно магнификацией (magnification) и минификацией (minification). И минификация, и магнификация имеет свои недостатки. Минификация приводит к underfilteringу (выражающемуся в муаре и шуме), магнификация - к overfilteringу (выражающемуся в пикселизации или заблюриванию). Чем меньше искажается мип-уровень, тем лучше выглядит текстура в конечном итоге.

Основные виды мипмэппинга:
o Простой мипмэппинг (nearest mipmapping) без билинейной фильтрации сейчас не используется.
o Простой мипмэппинг с билинейной фильтрацией. Самый применяемый метод сегодня. Похож на предыдущий метод, но между текселами выполняется интерполяция. При приближении или удалении объекта от наблюдателя выбирается подходящий мип-уровень. При приближении к наблюдателю выбирается мип-уровень с бОльшей степенью детализации, при удалении – с меньшей. Что же будет с мип-уровнем в конкретный момент – будет выполняться минификация или магнификация? Это зависит от конкретной реализации и от параметра, называемого LOD-bias. Если в рендеринге доминирует минификация, то на сцене присутствуют шум и муар. Если доминирует магнификация, то текстуры кажутся более размазанными, но муара/шума нет. Простому мипмэппингу присущ артефакт, выражающийся в резких переходах на текстурированной поверхности (так называемые полосы мипмэппинга). Это происходит при смене степени детализации, если мип-каскад нарисован некачественно.
o Трилинейная фильтрация (tri-linear filtering). Наиболее аккуратный способ вычисления цвета пиксела. Трилинейная фильтрация более сложна, нежели предыдущие методы. В отличие от простого мипмэппинга, в котором просто выбирается подходящий уровени детализации, здесь проводится интерполяция между двумя соседними мип-уровнями. Благодаря этому полосы мипмэппинга не образуются. При вычислении цвета пиксела используется 8 текселов (4 при билинейной фильтрации) и требует 7 операций смешения (3 при билинейной фильтрации). Использование трилинейной фильтрации дает гораздо более высокое качество изображения для движущихся объектов.
Адаптивная фильтрация частично решает проблему overfilteringа/underfilteringа. Программа выбирает как обрабатывать мип-уровни, отдельно верхний и нижний. Например интерполировать нижний мип-уровень, и не интерполировать верхний мип-уровень, а затем интерполировать полученные текстуры между собой, как при трилинейной фильтрации.
Мипмэппинг предполагает, что разработчик сам создает мип-каскад. Однако многие игры имеют лишь текстуры с одним разрешением. Для решения этой проблемы была придумана техника авто-мипмэппинга. Драйвер 3D-ускорителя сам вычисляет несколько мип-уровней, используя основную текстуру (она становится мип-уровнем с максимальной детализацией). Техника авто-мипмэппинга используется также для увеличения числа мип-уровней, если игра использует недостаточное их количество (например многие игры используют всего 3 мип-уровня для экономии текстурной памяти).
Мипмэппинг дает высокое качество для полигонов, преимущественно обращенных на наблюдателя (т.е. расположенных параллельно плоскости экрана), так как такие полигоны состоят из квадратных пикселов. Однако наклоненные полигонов состоят из неквадратных пикселов, и к проблеме размера пикселов добавляется проблема формы пикселов. При стандартном подходе фильтр, который хорошо работает с квадратными пикселами, дает сильный алиасинг на неквадратных. Решением этой проблемы является анизотропная фильтрация, которая является более сложным фильтром, чем трилинейная фильтрация. Анизотропная фильтрация работает с пикселами как с эллипсами и для получения одного пиксела обрабатывает большое количество текселов (до 32).


* Морфинг уровня детализации (LOD morphing)
Морфинг уровня детализации (LOD) весьма полезен в играх с большими открытыми пространствами. Его главная цель – обеспечение плавного появления объектов в области видимости игрока. Пример: автомобильный симулятор. Дома, деревья, которые внезапно появляются в области видимости "ниоткуда", вызывают неприятное впечатление. В данном случае, при реализации морфинга уровня детализации дома и деревья появляются полностью прозрачными, а по мере приближения к игроку приобретают очертания, становятся более плотными, и в непосредственной близости становятся полностью непрозрачными.
Другое, более сложное применение морфинга уровня детализации – реализация объектов с разным уровнем детализации. Создается несколько версий одного объекта с разной степенью детализации: самая низкая детализация для отображения объекта на очень далеком расстоянии, и самая высокая детализация для самого близкого расстояния. Чем выше детализация, тем из большего числа полигонов состоит объект. Это позволяет уменьшить число полигонов на сцене, и следовательно повысить производительность. Например, нет смысла отображать автомобиль во всей его красе на расстоянии, при котором игрок может различить только цвет автомобиля. Переходы между уровнями детализации осуществляется также варьированием прозрачности: смена детализации происходит не мгновенно, непрозрачная (старая) версия становится прозрачной, а прозрачная (новая) – более плотной.
Версии одного объекта для разных уровней детализации могут готовиться на стадии разработки, а могут просчитываться в реальном времени методом прогрессивных сеток (progressive meshes). Прогрессивные сетки поддерживаются Direct3D.


* Мультитекстурирование (Multitexturing)
Мультитекстурирование – метод рендеринга с использованием нескольких текстур за минимальное число проходов. Текстуры накладываются на объект последовательно, с использованием разного рода арифметических операций. Мультитекстурирование позволяет конвейеризировать наложение текстур с использованием нескольких (обычно двух) блоков текстурирования. Рисунок наглядно демонстрирует выполняемые действия. Первый блок накладывает на пиксел текстуру Tex0, используя операцию Op0, передает пиксел второму блоку. Этот пиксел передается второму блоку, который натягивает на него текстуру Tex1, используя операцию Op1. В это время первый блок не ждет, а переходит к обработке следующего пиксела, и т.д. Мультитекстурирование похоже на конвейеризацию в микропроцессорах, только мультитекстурирование гораздо проще, здесь нет никаких ветвлений и т.п. Операции наложения тумана и альфа-смешения с фрейм-буфером не относятся к мультитекстурированию и выполняются после всех стадий.

Мультитекстурирование может использоваться для эффективной реализации таких эффектов как:
o карты освещенности (lightmaps)
o отражения (reflections)
o морфинг текстур (texture morphing)
o текстуры с детализацией (detailed textures)

* Рендеринг (Rendering)
Рендеринг – процесс визуализации трехмерных объектов и сохранение изображения в фрейм-буфере. Рендеринг выполняется по многоступенчатому механизму, называемому конвейером рендеринга. Конвейер рендеринга может быть разделен на 3 стадии: тесселяция, геометрическая обработка и растеризация. Принцип конвейеризации является фундаментальным понятием, в соответствии с ним работают и 3D-ускорители, и 3D-API, – благодаря конвейеру можно рассмотреть работу любого из них. Если взять произвольный 3D-ускоритель, то он не будет ускорять все стадии конвейера, и даже более того, стадии могут лишь частично ускоряться им. Далее мы рассмотрим подробнее стадии конвейера в контексте работы 3D-ускорителей. Традиционно каждую стадию обозначают буквами.
Стадия "T". Тесселяция (триангуляция) – процесс разбиения поверхности объектов на полигоны (треугольники или четырехугольники). Эта стадия проводится полностью программно вне зависимости от технического уровня и цены 3D-аппаратуры. Тем не менее тесселятор (программный код, отвечающий за тесселяцию) должен учитывать особенности того или иного 3D-ускорителя, так как они могут иметь разные требования к полигонам-примитивам:
o произвольные треугольники
o треугольники с горизонтальной нижней или верхней гранью
o треугольник или четырехугольник с описанием уравнений ребер (бесконечные плоскости)
Также тесселятор должен учитывать, умеет ли работать с сетками (meshes) разных типов. Если 3D-программа разрабатывается на высокоуровневом 3D-API, например Direct3D RM или PowerRender, то ей не надо заботиться обо всех этих деталях, так как такой API имеет свой тесселятор.
Стадия "G". Геометрическая обработкаделится на несколько фаз, и может частично ускоряться 3D-ускорителем.
o трансформация (transformation) – преобразование координат (вращение, перенос и масштабирование всех объектов)
o отсечение (clipping), выполняемое до и после преобразования координат
o освещение (lighting) – определение цвета каждой вершины с учетом всех световых источников (решение уравнения освещенности)
o проецирование (projection) – преобразование координат в систему координат экрана
o setup – предварительная обработка потока вершин (перевод из плавающей точки в фиксированную точку данных о вершинах, а также сортировка вершин, отбрасывание задних граней, субпиксельная коррекция)
Наиболее часто люди путаются именно с геометрической обработкой. Это усугубляется тем, что сами производители путают терминологию. (Например 3Dlabs заявляет, что Glint Delta – геометрический сопроцессор, что вообще говоря неверно, Delta – это setup engine.) Большинство существующих 3D-ускорителей ускоряют только последнюю фазу – setup, при том делают это с разной степенью полноты. Говорят, что 3D-ускоритель имеет полный setup engine, если он может переводить в фиксированную точку все данные о вершине. В зависимости от типа примитивов, с которыми работает 3D-ускоритель, речь ведется о triangle setup или о planar setup.
Геометрический процессором называется ускоритель, который ускоряет всю стадию геометрической обработки, в том числе трансформацию и освещение. Реализация геометрического процессора довольно дорого, и как уже было сказано, он является объектом рекламных спекуляций. Определить реализован ли геометрический процессор довольно легко – надо выяснить, поддерживает ли 3D-ускоритель операции с матрицами. Без такой поддержки не может идти речь об ускорении фазы трансформации. Геометрическими процессорами являются например Glint Gamma и Pinolite.
Стадия "R". Растеризация – наиболее интенсивная операция, обычно реализуемая на аппаратном уровне. Растеризатор выполняет непосредственно рендеринг и является наиболее сложной ступенью конвейера. Если стадия геометрической обработки работает с вершинами, то растеризация включает операции, проводимые на пиксельном и суб-пиксельном уровне. Растеризация включает в себя удаление скрытых поверхностей, текстурирование, альфа-смешение, z-буферизация, затенение, антиалиасинг, dithering.

* Текстурирование (Texture mapping)
Текстурирование – основной метод моделирования поверхностей. Текстура – изображение, накладываемое на поверхность. Использование текстур требует гораздо меньше ресурсов, нежели моделирование поверхности с помощью полигонов. Текстуры хранятся в текстурной памяти, отдельные тексели (точки текстуры) используются для покрытия текстурой пикселей перед записью во фрейм-буфер. В зависимости от конкретного метода текстурирования, разное число текселей требуется для обработки одного пиксела.

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

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

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

Fillrate – скорость текстурирования, измеряемая в пикселах в секунду, является очень важной величиной, и именно ее указывают как основную характеристику 3D-чипсета. Fillrate 100 млн пикселей/сек означает, что 3D-ускоритель может обработать 100 млн пикселей в секунду, накладывая на них текстуры. На fillrate влияет множество факторов, таких как тип фильтрации, глубина цвета, альфа-смешение, туман и антиалиасинг.

Туман (Fog)
Туман используется для создания атмосферных эффектов. Туман используется для создания дымки и скрытия удаленных объектов. В первом случае повышается реалистичность сцены, во втором – понижается ее сложность.
С туманом объекты могут рендериться с разной степенью детализации в зависимости от расстояния до наблюдателя. Туман работает по принципу: чем дальше объект, тем больше туман его поглощает. Поэтому для удаленных объектов разумно использовать меньше полигонов, чем для близких. Туман также скрывает и переходы между уровнями детализации.
Туман можно разделить на полигонный (per-polygon) и пиксельный (per-pixel). Полигонный метод линейно интерполирует уровень тумана по значениям в вершинах для получения уровня тумана в каждой точке полигона. Этот метод хорош только для маленьких полигонов. Пиксельный метод рассчитывает уровень тумана для каждого пиксела, и для больших полигонов дает более реалистичное изображение.
Туман также можно разделить и по другому признаку – на линейный и экспоненциальный (или табличный). При линейном тумане степень поглощения объекта туманом линейно зависит от расстояния до наблюдателя, а при экспоненциальном тумане – рассчитывается на основании таблицы.


Удаление скрытых поверхностей (Hidden Surface Removal)
Удаление скрытых поверхностей (hidden surface removal – HSR) – комплексный механизм, служащий дл\я уменьшени\я числа треугольников, которые будут участвовать в рендеринге, а также правильном рендеринге с точки зрени\я глубины.
Прежде всего надо отбросить все треугольники, которые заведомо не видны.
Отсечение (clipping). Отбрасываютс\я все треугольники, которые не попадают в объем отсчечени\я (clip volume), который ограничен шестью плоскост\ями по трем координатам. Это важнейший метод HSR, который выполн\яетс\я всегда.
Отбрасывание задних граней (backface culling). Выполняется проверка, куда "смотрит" треугольник. Это возможно, так как у каждой вершины есть нормаль и поэтому все треугольники являются ориентированными в пространстве. Если треугольник смотрит "на наблюдателя", он считается видимым, а если "от наблюдателя" – то невидимым. Это позволяет снизить вдвое число видимых треугольников, например для вывода сферы, состоящей из треугольников, необходимо срендерить только треугольники, составляющие полусферу, которую видит наблюдатель.
BSP-деревья. Программный метод HSR для статической геометрии, например уровней в 3D-шутере. Цель BSP-деревьев – упорядочение треугольников спереди назад (front-to-back) и определение тех треугольников, которые полностью закрываются другими.
После того, как осталось минимум треугольников, надо их отрендерить, причем так, чтобы видимые пикселы были видимы, а невидимые – невидимы.
Z-буферизация (z-buffering).
Z-сортировка (z-sorting). Z-сортировка – менее аккуратный программный метод удаления скрытых поверхностей по сравнению с z-буферизацией, также известный как алгоритм Паинтера. Объекты сортируются сзади наперед (back-to-front). Более удаленные объекты рендерятся в первую очередь, за ними следуют менее удаленные. Если объекты пересекают друг друга, то ближайший накладывается на дальнего, то есть происходит z-алиасинг.


* 3D-программные интерфейсы (3D API)
API (программный интерфейс) – интерфейс для написания программ, поддерживающий оборудование определенного типа и операционную систему. 3D API позволяет программисту создавать трехмерное программное обеспечение, использующее все возможности 3D-ускорителей. API обычно включают в себя функции, глобальные данные, константы и другие элементы, позволяющие разработчику избегать непосредственного взаимодействия с оборудованием.
3D API делятся на универсальные и специализированные.
Универсальный 3D API позволяет абстрагироваться от конкретного оборудования. Без универсального API, поддерживающих широкий спектр 3D-ускорителей, разработчиками пришлось бы портировать игры под множество плат. Наиболее известные универсальные 3D API – OpenGL и Direct3D.
Специализированный 3D API (Native 3D API) предназначен для одного конкретного семейства 3D-ускорителей и ограждает программиста от низкоуровнего программирования с помощью прямого доступа к регистрам и памяти. Примеры специализированных 3D API – Glide (от 3Dfx), RRedline (от Rendition), PowerSGL (от Videologic), RenderGL (от Intergraph).
Direct3D – 3D API компании Microsoft, предназначенный для использования преимущественно в играх. Direct3D существует только в Windows 95, в скором будущем появится в Windows NT 5.0. Direct3D имеет два режима: RM (retained mode) или абстрактный и IM (immediate mode) или непосредственный. IM состоит из тонкого уровня, который общается с аппаратурой и обеспечивает самое высокое быстродействие. Абстрактный режим – высокоуровневый интерфейс, покрывающий множество операций для программиста, включая инициализацию и трансформацию. У обоих режимов есть достоинства и недостатки, большинство Direct3D-игр используют IM.
OpenGL – открытый 3D API, созданный компанией SGI и контролируемый ассоциацией OpenGL Architecture Review Board, в которую входят DEC, E&S, IBM, Intel, Intergraph, Microsoft и SGI. OpenGL реализует широкий диапазон функций от вывода точки, линии или полигона до рендеринга кривых поверхностей NURBS, покрытых текстурой.
Использование универсального 3D API предполагает использование драйверов для этого API. На сегодняшний день наличие драйверов Direct3D и OpenGL является обязательным требованием ко всем 3D-ускорителям.
Direct3D-драйвер реализует так называемый уровень аппаратной абстракции, HAL (Hardware Abstraction Layer) – интерфейс, который взаимодействует непосредственно с оборудованием и позволяет приложениям использовать возможности 3D-ускорителя с маскимальным быстродействием. HAL имеет низкоуровневый доступ к 3D-чипу и реализует 3D-функции на аппаратном или программно-аппаратном уровне. В отличие от HAL, уровень эмуляции, HEL (Hardware Emulation Layer) является программным растеризатором.
OpenGL-драйвер может быть реализован в двух вариантах: как ICD и как MCD. ICD (Installable Client Driver) полностью включает все стадии конвейера OpenGL, что дает максимальное быстродействие, но ICD довольно сложно программировать. MCD (Mini Client Driver) разработан для внесения абстракции в конвейер OpenGL. MCD гораздо легче программировать, так как разработчик программирует только те участки кода драйверы, которые он считает нужным оптимизировать для своего чипсета. Однако MCD уступает ICD в быстродействии, плюс ко всему MCD работает только в Windows NT. Для широкого внедрения OpenGL на платформе Windows 95 сейчас разрабатывается 3D Graphics Device Driver Kit (Комплект разработчика драйверов устройств для 3D-графики). Новый DDK будет включать переработанный SGI ICD DDK и Direct3D DDK и позволит поставщикам графических микросхем и плат разрабатывать OpenGL-драйверы для Windows 95, Windows NT 4.0, а также Windows 98 и Windows NT 5.0.

* Наложение рельефа (Bump mapping)
Наложение рельефа, или bumpmapping, – продвинутая методика моделирования рельефных поверхностей. Суть bumpmappingа в следующем: в реальном времени рассчитывается рельефная карта, которая используется для симуляции рельефности. Такой рельефной картой может быть карта освещенности или карта смещений UV. Общий вид рельефной карты – DuDvL, где Du/Dv – дельты текстурных координат environment map, L – освещенность.
Прежде всего программист готовит карту высот (height map), которая описывает рельеф в виде множества высот, либо карту смещений нормалей (normal dispmap), которая описывает рельеф в виде нормалей. Для того, чтобы например подчеркнуть показать бугорки и впадины рельефа с помощью светотени, надо затемнить либо осветлить стенки этих бугорков и впадин. Таким образом существенными для bumpmapping являются не сами высоты, их дифференциалы.
Рассмотрим два вида рельефных карт по отдельности.
Карта освещенности (lightmaps). Каждому пикселу ставится в соответствие значение освещенности L. Карта освещенности рассчитывается с учетом источников света. Полученная карта освещенности накладывается на основную текстуру альфа-смешением. Этот метод симулирует рельефность матовой поверхности игрой света и тени.
* Карта смещений UV (UV-dispmap). Каждому пикселу ставится в соответствие вектор DuDv. Карта смещений UV используются для получения environment map с пертурбацией. Пертурбация означает, что environment map искажается определенным образом, чтобы передать рельефность. Полученный environment map также накладывается на основную текстуру альфа-смешением. Этот метод симулирует рельефность глянцевой или зеркальной поверхности отражением окружающей среды.
Используя комбинацию карты освещенности и карты смещений UV, можно получать очень красивые модели.


* 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-координаты для всех точек, лежащих внутри треугольника. Если их просто интерполировать, то результат получится некорректным с точки зрения перспективы, поэтому их надо корректировать. Но современные 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 Мб).
В конце 1997-нач. 1998 г. (вообще, с тех пор именно это время почему-то стало у фирм любимым временем представления новых 3D-продуктов) появились ускорители следующего поколения.
Первым вышел новый чипсет от 3DFX – VooDoo2. Это было трехчиповое решение – чипсет имел 2 микросхемы Texel FX2, работавших под управлением схемы Pixel FX2. Карты на его основе продолжали традиции VooDoo Graphics и были дополнительными картами для основной видеоплаты. В связи с наличием двух текстурных процессоров, стало возможным наложение двух текстур за один проход - “бесплатное” мультитекстурирование (“бесплатное” в том смысле, что производительность в режиме мультитекстурирования не падала, по сравнению с однотекстурным режимом, так как в этом случае второй текстурный процессор просто не работал). Тактовая частота кристалла возросла до 100 МГц. Имел 192-битную архитектуру, скорость работы с памятью – 2,2 Гб/с, fill rate – 90 Mpixels/sec, способен обсчитывать 3млн. полигонов/с. Именно в этом чипсете была полностью реализована для массового пользователя технология SLI (Scan Line Interleave). По этой технологии 2 карты VooDoo 2 устанавливались в систему и соединялись для параллельной работы (одна считала четные строки изображения, а вторая – нечетные). При этом теоретическая производительность вырастает вдвое (реально чуть меньше). За счет этого Voodoo2 удавалось долго держаться на плаву.
Позже появился и главный конкурент – 3D-чип Riva TNT (TwiN Texel) от фирмы nVidia. Он тоже имел два текстурных конвейера и мог делать однопроходное мультитекстурирование и трилинейную и анизотропную фильтрацию. Имел 24(16)-битный Z-буфер и 8-битный буфер шаблонов (через который можно было делать интересные эффекты, вроде “правильных” теней). Fill rate – 250 Mpixels/sec (125 – в режиме мультитекстурирования), 6 млн. полигонов/с. Обладал прекрасными 2D- возможностями – имел RAMDAC 250 MHz, акселерацию для распаковки видео форматов MPEG-1 и MPEG-2 (для проигрывания DVD).
Чуть позже TNT, 3DFX выпустил на рынок первый свой 2D/3D-чипсет Voodoo Banshee. Это был вариант Voodoo 2, но без одного Texel FX2 процессора и со встроенной в чип 2D-графикой. Был медленнее Voodoo2 в режиме мультитекстурирования, который фактически вытеснил однотекстурный к этому времени, но все равно обладал неплохой скоростью и качественной графикой, поэтому, хотя и не стал лидером продаж, нашел свою долю рынка.
Вышедшие через год чипсеты 3DFX Voodoo 3 и nVidia Riva TNT2 являлись эволюционным развитием предшественников и были, по существу, вариантами Banshee и TNT - сделанными на новом технологическом процессе, с исправленными ошибками, добавлением второго текстурного процессора (для Voodoo3), работающие на более высоких частотах чипа и памяти, и с некоторыми мелкими улучшениями и нововведениями. Так, технологический процесс уменьшился с 0,35 мкм до 0,25-0,22 мкм, частоты возросли от 100 до 143-183 MHz, выросло количество адресуемой памяти – до 32 Мб и режимы 32-битной 3D-графики приобрели вполне рабочую скорость в высоких разрешениях (но не Voodoo3 – 3DFX считала, что 32-битный цвет никому не нужен и не интересен).
В настоящий момент главные игроки на поле трехмерной акселерации – фирмы nVidia и 3DFX поменялись ролями (теперь 3DFX выступает в роли более слабого конкурента nVidia) выбрали себе разные пути развития, по которым и пытаются повести весь мир за собой.
NVidia выбрала путь создания устройств менее процессорозависимых, способных выполнять весь цикл рендеринга самостоятельно – устройств с аппаратным расчетом трансформации, отсечения и освещения, так называемым hardware T&L (TCL). У нее уже вышло два чипсета с поддержкой T&L – GeForce256 и GeForce2 GTS. Их характеристики впечатляют – хотя они и не намного (GeForce2 GTS – всего в 2,5-3 раза) быстрее чем устройства, которые для этих расчетов используют центральный процессор PC, но зато при этом они почти полностью освобождают его от работы над графикой (все занимается специальный графический процессор – GPU) и позволяют использовать ЦП для программирования физики или искусственного интеллекта противников в играх, для обработки красивого окружающего звука, процедурных текстур (текстур, расчет которых идет с использованием фрактальной математики) и пр.
К сожалению, пока их новые идеи и продукты слабо поддержаны разработчиками, но такие программы уже появляются, а поддержка hardware T&L в DirectX7 и OpenGL дает все основания думать, что даром усилия фирмы nVidia не пропадут и что она движется в правильном направлении. К тому же, там где hardware T&L не поддерживается, новые акселераторы могут работать как обычные (но более быстрые) и все равно являются лидерами по производительности.
3DFX пошла по пути увеличения fill rate и использования полноэкранного сглаживания. Она разработала архитектуру VSA-100, одночиповое решение с поддержкой 32-битного цвета, которое можно масштабировать, объединяя до 32 чипов (каждый со своей собственной памятью), а по некоторым данным и до 128 чипов, добиваясь при этом fill rate более 3,5 Гигатекселей в секунду! А еще, при использовании более 2-х чипов на плате, становится доступным использование их новейшей технологии T-Buffer.
Технология T-Buffer была создана инженерами компании 3dfx с тем, чтобы повысить уровень реализма визуализации 3D графики в персональных компьютерах. Достигнуть этого можно при условии избавления от различных дефектов изображения, возникающих при воспроизведении компьютерной 3D графики. Конечная цель заключается в приближении качества создаваемого изображения на компьютерных системах к качеству изображений, получаемых с помощью фото или видеокамер.
Технология T-Buffer, на которой решила сконцентрироваться компания 3dfx, должна способствовать обеспечению более качественной визуализации компьютерной 3D графики за счет наложения различных цифровых эффектов в режиме реального времени на сформированное в результате рендеринга изображение. Самыми важными среди предлагаемых к использованию эффектов являются: full-scene spatial anti-aliasing (сглаживание всей сцены, т.е. удаление неровностей линий и границ полигонов на всем пространстве видимой сцены, чаще называемым просто full-scene anti-aliasing), motion blur (эффект размытости контуров быстро движущихся объектов, аналогичный тому, который возникает при съемке фотокамерой движущихся объектов) и depth of field (эффект облегчающий визуальное восприятие конкретных объектов сцены за счет фокусировки только на конкретном объекте или части сцена, а все остальная сцена остается не в фокусе, т.е. размывается). Эффект depth of field позволяет использовать такой параметр, как расстояние между объектами. Делается это за счет введения различных уровней четкости или величины фокусировки для каждого объекта сцены. Объект или часть сцены, на которых сделана фокусировка, выглядят более четко, а все остальные объекты или окружающая сцена выглядят более размытыми. Таким образом, внимание наблюдателя может концентрироваться как на близких, так и на удаленных объектах или частях сцены.
Пока компания запаздывает с выпуском своих новых продуктов на VSA-100 – видеоплат серий Voodoo4 и Voodoo5, но уже стало известно, что хотя они и имеют fill rate более высокий (не намного), чем чипы GeForce256 и GeForce2 от nVidia, но включение функций T-Buffer сильно тормозит их работу (а для карт серии Voodoo5 6000, которые несут в себе четыре чипа VSA-100 и могут работать с T-Buffer на нормальных скоростях, установлена чрезвычайно высокая цена – более 600 долларов!).
К тому же, все эффекты новой технологии можно использовать на любой видеоплате, которая имеет хорошую скорость – например, уже имеются драйвера с полноценной (и вполне работоспособной по скорости) поддержкой full-scene spatial anti-aliasing для видеокарт на базе GeForce. А разработчики программного обеспечения новую технологию пока не поддерживают никак, только антиалиасинг можно использовать в любых, даже старых, программах, а новые эффекты должны быть сразу запрограммированы в программах. Так что, похоже, T-Buffer, в том виде, как его преподносит 3DFX, не нужен никому и этот путь ведет фирму в никуда.
Я почти не коснулся в своей работе продукции других фирм-производителей видео чипсетов – таких как ATI, Matrox, S3, Intel, NEC (Videologiс), 3DLabs и других. Все они либо шли по проторенной nVidia и 3DFX дороге (и при этом не слишком преуспели в скорости и качестве своих продуктов по сравнению с главными конкурентами), либо (зачастую, к сожалению, совершенно не заслуженно) их инновации не пришлись “ко двору” и были или совсем не востребованы (как, например, тайловая архитектура чипов Videologic), или позднее выпущены в новых продуктах гигантами индустрии.
Вот, вкратце, и вся история, классификация и особенности строения и работы видеоадаптеров персональных компьютеров.

Использованные материалы:
1) материалы статей и обзоров сайта iXBT Hardware (ixbt.stack.net)
2) материалы статей и обзоров сайта 3D News (www.3dnews.ru)
3) материалы статей и обзоров журнала и сайта “Компьютерра” (www.computerra.ru)
4) материалы статей и обзоров журнала и сайта “Мир ПК” (www.pcworld.ru)
5) материалы статей и обзоров журнала и сайта “PC Magazine: Russian Edition” (www.pcmagazine.ru)
6) материалы журнала фирмы “Пирит” “Upgrade” №№7 и 8
7) Е.Рудометов, В.Рудометов. Архитектура ПК, комплектующие, мультимедиа.- СПб: “Питер”, 2000



4