Устройство видеокарты. Ее компоненты.


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

Устройство видеокаpты
Во первых, какого типа сигналы обрабатываются в видеоплате: аналоговые или цифровые? Вы наверняка понимаете, что любая информация в компьютере обрабатывается в цифровом виде, и видеоплата - не исключение. С другой стороны: монитор устройство сугубо аналоговое, он оперирует тремя каналами цвета (красный, зеленый, синий: RGB) и яркостью. Т.е. сигналы обрабатываются в цифровом виде, а выводятся на монитор в аналоговом, следовательно на видеоплате должен присутствовать цифроаналоговый преобразователь - ЦАП (или DAC - Digital to Analog Converter).

Видеоплата оперирует некоторыми объемами данных. Насколько эти объемы велики? Давайте прикинем. Пусть на экране у Вам типичные 800х600 точек, т.е. 480 000 точек. Сколько байт нужно для отображения каждой точки? Это зависит от количества цветов, которыми Вы хотите пользоваться. Если Вас устроит, чтобы каждая точка могла иметь всего два цвета, положим черный и белый, то вам соответственно необходимо на точку один бит информации. Тогда, положим ноль соответствует черному цвету, единица - белому. Но достаточно ли Вам двух цветов на экране. Разумеется, нет! А чем больше цветов, тем больше бит необходимо хранить для каждой точки. Положим, Вы дадите 1 байт (т.е. 8 бит) на информацию о цвете каждой точки. Сколько тогда будет РАЗНЫХ цветов возможно на экране? Столько же, сколько РАЗНЫХ значений может принимать 8-битное число, т.е. 256. Если Вам нужно более, чем 256 цветов, то одного байта на информацию о цвете точки мало. Минимальным количеством цветов, приемлемым для обычной работы за компьютером сегодня считается 65 536 цветов, для передачи информации о которых нужно 2 байта (16 бит) на каждую точку на экране. Такой цвет принято называть 16-битным. Если нужно больше цветов, то применяют 24-битный цвет (3 байта), количество цветов на экране соответственно 2 в степени 24 = примерно 16 млн. Иногда применяют и 32-битный цвет - 4 байта на точку. Теперь мы можем посчитать, какое количество информации в один момент времени храниться в видеоплате. Пусть на экране 480 000 точек (разрешение экрана 800х600), НА КАЖДУЮ ИЗ НИХ нужно какое то количество бит для передачи информации о цвете (хотя бы 2 байта), следовательно необходимый объем памяти, для хранения информации о том, что отображено на экране - примерно 1 Мбайт! (немало) в режиме 800х600х16 бит. А если разрешение экрана 1600х1200 точек и вы хотите 32-битный цвет, то информация об одном кадре будет занимать в памяти около 7.5 Мбайт. Но это не все. Изображение на мониторе не статическое. Оно изменяется, и частота этого изменения может достигать 100 и более раз в секунду (об этом мы еще позднее подробнее поговорим). Тогда видеоплата будет оперировать немалыми объемами данных.

Все это наводит на мысли о том, что на видеокарте установлена своя собственная видеопамять, предназначенная для хранения обрабатываемой и выводимой информации, и чем больше объем этой памяти, тем большее разрешение и глубину цвета можно отобразить на мониторе. Например, Ваша видеоплата оборудована 2 Мбайт памяти. Тогда, какую глубину цвета она покажет в каких разрешениях? Считаем: в 800х600 на экране 480 000 точек. Если на каждую по 16 бит, то всего нужно чуть менее 1 Мбайт памяти, т.е. 800х600х16 видеоплата с двумя Мбайт памяти поддерживает. Если цвет 32-битный, то нужно чуть менее 2 Мбайт памяти, т.е. и 800х600х32 поддержит такая видеоплата. А если разрешение 1024х768 точек? Тогда на экране 786 432 точек. Если на каждую 2 байта, то понадобиться примерно 1.5 Мбайт видеопамяти, А если использовать 32-битный цвет, то всего нужно 3 Мбайт памяти. Т.е., видеоплата с 2 Мбайт видеопамяти не поддерживает 32-битный цвет при разрешении 1024х768 из-за недостатка объема видеопамяти.

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

Наконец, на видеоплате присутствует видео BIOS: постоянная память, в которую записаны экранные шрифты, служебные таблицы и т.п. ПЗУ не используется видеоконтроллером напрямую - к нему обращается только центральный процессор, и в результате выполнения им программ из ПЗУ происходят обращения к видеоконтроллеру и видеопамяти. ПЗУ необходимо только для первоначального запуска адаптера и работы в режиме MS DOS; операционные системы с графическим интерфейсом - Windows или OS/2 - не используют ПЗУ для управления адаптером - они работают через драйвера.

Кроме того на видеоплате обычно размещаются один или несколько разъемов для внутреннего соединения; один из них носит название Feature Connector и служит для предоставления внешним устройствам доступа к видеопамяти и изображению. К этому разъему может подключаться телеприемник, аппаратный декодер MPEG, устройство ввода изображения и т.п. Hа некоторых платах предусмотрены отдельные разъемы для подобных устройств.

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

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

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

Предположим, что второй видеопроцессор "умнее": он знает, что такое прямоугольник. Тогда процессор передаст в видеокарту только координаты вершин прямоугольника - только две координаты, а сам видеопроцессор построит прямоугольник. Затем процессор скомандует прямоугольник закрасить, и видеочип сам определит, какие точки должны быть закрашены и изменит цвет всех внутренних точек прямоугольника. Во втором случае, разумеется, производительность системы выше: во первых уменьшается объем передаваемых от процессора к видеопроцессору данных, во вторых обработка этих данных видеопроцессором будет происходить быстрее.

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

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

Компоненты видеоадаптера. Видеопамять
Как мы уже упоминали, в видеопамяти размещается та информация, которая будет выведена на дисплей, это так называемый кадровый буфер. Кроме этого, когда видеочип работает над построением трехмерной сцены, в локальной видеопамяти располагается значительно больше информации. Именно поэтому на сегодняшних видеоплатах устанавливают 16-64Мб видеопамяти, в то время как для хранения кадрового буфера даже в разрешении 1600х1200х32бит нужно немногим менее 8 Мбайт видеопамяти. О том, что хранят в видеопамяти при обработке трехмерных сцен, мы поговорим с Вами, когда будем рассматривать трехмерную графику, пока же отметим лишь, что объем видеопамяти, более 8 Мбайт не нужен пользователю, если он не пользуется трехмерной графикой (т.е., не играет на компьютере).

Какие типы видеопамяти используют в современных видеоплатах? В качестве видеопамяти нередко использовали те же технологии, что и в оперативной памяти. Использовали память типа FPM и EDO, затем применяли SDRAM (и применяют сейчас), в настоящее время все больше применяют DDR SDRAM. По сути, сегодня SDRAM и DDR SDRAM - единственные применяемые типы памяти. Однако еще во времена господства памяти типа EDO, возникали проблемы с производительностью видеопамяти, и были разработаны специальные типы памяти, которые были оптимизированы для обращений не центрального процессора, а видеопроцессора. Это такие типы памяти, как MDRAM, VRAM, WRAM.

VRAM (Video RAM - видео-ОЗУ) - так называемая двухпоpтовая DRAM с поддеpжкой одновpеменного доступа со стоpоны видеопpоцессоpа и центpального пpоцессоpа компьютеpа. Позволяет совмещать во вpемени вывод изобpажения на экpан и его обpаботку в видеопамяти, что сокpащает задеpжки и увеличивает скоpость pаботы.

WRAM (Window RAM - оконное ОЗУ) - EDO VRAM, в котором порт (окно), через который обращается видеоконтроллер, сделан меньшим, чем порт для центрального процессора.

MDRAM (Multibank DRAM - многобанковое ОЗУ) - вариант DRAM, организованный в виде множества независимых банков объемом по 32 КБ каждый, работающих в конвейерном режиме.

Каждый из этих типов памяти был предназначен ускорить обмен видеопроцессор - видеопамять различными способами и применение такого типа памяти на видеоплате тех времен было признаком высокого качества платы и заслуживало всяческого уважения. С другой стороны с выходом SDRAM эти типы памяти отошли на второй план и сейчас совершенно не применяются.

Производительность видеопамяти, как мы уже говорили, весьма важная характеристика платы, от нее зависит, как быстро видеопроцессор будет получать данные для обработки. Большинство современных видеоплат сегодня имеют настолько быстрые видеопроцессоры, что применение с ними медленной видеопамяти SDRAM (!), а не DDR SDRAM может не позволить видеочипу раскрыть все свои скоростные возможности. С другой стороны, все это имеет значение, только при построении трехмерных сцен, к принципам построения которых мы с вами скоро перейдем.

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

Самым первым видеоадаптером первых PC был видеоадаптер стандарта MDA (Monochrome Display Adapter - монохpомный адаптеp дисплея). Работает только в текстовом режиме с разрешением 80x25 знаков (720x350 точек, каждый символ - матрица 9x14 точек), поддерживает пять атрибутов текста: обычный, яркий, инверсный, подчеркнутый и мигающий. Интерфейс с монитором - цифровой: сигналы синхронизации, основной видеосигнал, дополнительный сигнал яркости. В наши дни совершенно не применим :).

Адаптер HGC (Hercules Graphics Card - графическая карта Hercules) - расширение MDA с графическим режимом 720x348, разработанное фирмой Hercules. Это первый видеоадаптер для PC, поддерживающий графический режим. Однако, появившиеся впоследствии графические режимы были несовместимы с HGC, игры написанные в графических режимах последующих видеоадаптеров, не работали а адаптере HGC. Однако это была первая попытка, и ее можно считать вполне достойной (для своего времени :)). Интерфейс с монитором - цифровой, как и у MDA. В наши дни совершенно не применим :).

CGA (Color Graphics Adapter - цветной графический адаптер) - адаптер с графическими возможностями. Работает либо в текстовом режиме с разрешениями 40x25 и 80x25 (матрица символа - 8x8), либо в графическом с разрешениями 320x200 или 640x200. В текстовых режимах доступно 256 атрибутов символа - 16 цветов символа и 16 цветов фона (либо 8 цветов фона и атрибут мигания), в графических режимах доступно четыре палитры по четыре цвета каждая в режиме 320x200, режим 640x200 - монохромный. Т.е. возможности передачи цвета в графике - только в режиме 320x200, и при этом, несмотря на то, что адаптер поддерживал 16 цветов, одновременно на экране могли быть цвета только из одной палитры, следовательно одновременно адаптер отображал только 4 цвета. Интерфейс с монитором - цифровой: сигналы синхронизации, основной видеосигнал (три канала - красный, зеленый, синий), дополнительный сигнал яркости. В наши дни совершенно не применим :).

EGA (Enhanced Graphics Adapter - улучшенный графический адаптер) - дальнейшее развитие CGA, примененное в первых 286. Добавлено разрешение 640x350, что в текстовых режимах дает формат 80x25 при матрице символа 8x14 и 80x43 - при матрице 8x8. Количество одновременно отображаемых цветов - по 16, палитра расширена до 64 цветов (по два разряда яркости на каждый цвет). Совместим с MDA и CGA. Интерфейс с монитором - цифровой. В наши дни совершенно не применим :).

MCGA (Multicolor Graphics Adapter - многоцветный графический адаптер) - введен фирмой IBM в моделях своих компьютеров, не стал общим стандартом. Добавлено разрешение 640x400 (текст), что дает формат 80x25 при матрице символа 8x16 и 80x50 - при матрице 8x8. Количество воспроизводимых цветов увеличено до 262144 (по 64 уровня на каждый из основных цветов). Помимо палитры, введено понятие таблицы цветов, через которую выполняется преобразование 64-цветного пространства цветов EGA в пространство цветов MCGA. Введен также видеорежим 320x200x256, в котором используется представление экрана непрерывной областью памяти объемом 64000 байт, где каждый байт описывает цвет соответствующей ему точки экрана. (как у современных адаптеров). Совместим с CGA по всем режимам и с EGA - по текстовым, за исключением размера матрицы символа. Интерфейс с монитором - аналогово-цифpовой: цифровые сигналы синхронизации, аналоговые сигналы основных цветов. Поддерживает подключение монохромного монитора и его автоматическое опознание - при этом в видео-BIOS включается режим суммирования цветов по так называемой шкале серого (grayscale) для получения полутонового чеpно-белого изображения. Суммирование выполняется только при выводе через BIOS - при непосредственной записи в видеопамять на монитор попадает только сигнал зеленого цвета (если он не имеет встроенного цветосмесителя). В наши дни совершенно не применим :).

VGA (Video Graphics Array - множество, или массив, визуальной графики) - расширение MCGA, совместимое с EGA, введен фирмой IBM в своих компьюетрах. Фактически стал общим стандартом видеоадаптера с конца 80-х годов. В режиме 640x480 используется так называемая квадратная точка (соотношение количества точек по горизонтали и вертикали совпадает со стандартным соотношением сторон экрана - 4:3). Совместим с MDA, CGA и EGA в смысле поддерживаемых режимов, но не в смысле подключения монитора: интерфейс с монитором идентичен MCGA.

IBM 8514/a - специализированный адаптер для работы с высокими разрешениями (640x480x256 и 1024x768x256), с элементами графического ускорителя. Не. поддерживает видеорежимы VGA, не стал стандартом, был весьма интересным решением в узкоспециализированных областях применнения. Интерфейс с монитором аналогичен VGA/MCGA.

IBM XGA - следующий специализированный адаптер IBM. Снова не совместим с VGA и не стал стандартом. Применялся только в системах, изготовленных IBM. Расширено цветовое пространство (режим 640x480x64k), добавлен текстовый режим 132x25 (1056x400). Интерфейс с монитором аналогичен VGA/MCGA.

SVGA (Super VGA - "свеpх"-VGA) - расширение VGA с добавлением более высоких разрешений и дополнительного сервиса. видеорежимы добавляются из ряда 800x600, 1024x768, 1152x864, 1280x1024, 1600x1200 - все с соотношением 4:3. Цветовое пространство расширено до 65536 (High Color) или 16.7 млн. (True Color). Также добавляются расширенные текстовые режимы формата 132x25, 132x43, 132x50. Фактический стандарт видеоадаптера примерно с 1992 г. Сегодня применяются только видеоадаптеры стандарта SVGA, выход нового стандарта не предвидится :).

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

Давайте сперва рассмотрим немного историю развития трехмерной графики на персональном компьютере от самых первых "трехмерных :)" игр и до наших дней. Затем мы поговорим с Вами о том, как строится трехмерное изображение на компьютере, а уже после поговорим собственно о современных видеоплатах и о том, какие возможности в этих платах реализованы.

Итак, сначала немного истории. Самые первые игры для персональных компьютеров условно можно было разделить на два типа - плоские и векторные. К первому относились незабвенные "Digger", "Arcanoid", "Тетрис". Все они предоставляли игроку поле для действия, размер которого обычно соответствовал размеру графического экрана, и все происходило в двух измерениях. Изображения движущихся объектов "перемещались" по экрану. Технология этого довольно проста. Запоминаем небольшой участок экрана, затем на этом участке рисуем объект. Как только требуется передвинуть объект - восстанавливаем старую картинку, запоминаем новый участок, рисуем наш объект на нем.

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

Два этих типа игр были просты в написании, а главное - были по силам тогдашним процессорам и видеокартам.

С появлением 386 процессоров программы начали использовать "защищенный" режим, обеспечивающий простой доступ к объемам памяти, большим чем пресловутый 640 килобайт. В связи с этим игры получили возможность создавать более сложные виртуальные миры.

Немного опередила развитие компьютеров фирма Id Software, которая выпустила сначала "Catacomb Abyss", а затем и "Wolfenstein 3D" - игры, которые считаются основоположниками жанра 3D-action. Игры эти шли еще на 286 процессорах, и являются ярким примером нового способа изображения виртуальности - ТЕКСТУРИРОВАНИЕ.

Во-первых, при этом способе, стены коридора, по которым бегает главный герой - это не просто одноцветные прямоугольники, а прямоугольные растровые картинки (то есть, состоящие из точек), например, рельеф кирпичной стены, или чей-нибудь портрет. Во-вторых, изображения врагов, которых игрок видел "глазами" персонажа, также были растровыми. Эффект присутствия в игре создавало масштабирование - при приближении к стене ее изображение увеличивалось, и соответствующим образом масштабировался рисунок ее текстуры. Но в этом же содержится и большой минус, который можно пояснить так: предположим, мы стоим лицом к стене на таком расстоянии от нее, на котором одна точка текстуры равняется одной точке экрана. Так как обычно для текстур использовались массивы 64х64 точки, в данном случае текстура на экране будет квадратом 64х64. Если уменьшать это расстояние, "подходить" к стене, точки текстуры должны "увеличиваться" - то есть, текстура должна занимать уже больший квадрат, прорисовывая одну и ту же точку несколько раз. Если уменьшить расстояние в два раза - каждая точка превратится в квадрат 2х2 пикселя, чтобы заполнить на экране квадрат 128х128. Ну а если подойти к стене вплотную, на экране мы увидим несколько больших разноцветных квадратов. Из-за этого и при удалении от стены или от любого монстра тот превращался в несколько маленьких квадратиков, что выглядело не очень красиво.

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

Со временем появлялись новые типы процессоров. 486 уже предъявляли повышенные требования к видеокартам, и те также начали развиваться в сторону увеличения быстродействия.

Появлялись новые типы игр - полутрехмерный "DOOM", полностью трехмерный "Descent", появилось понятие "z-buffer".

Это метод удаления невидимых поверхностей при изображении сложных трехмерных сцен. Работает примерно так: есть два массива, в одном из которых хранится изображение, выводимое на экран (буфер кадра), в другом - расстояние до объектов от плоскости экрана (буфер глубины). Каждый предмет в сцене разлагается в растр (представляется набором точек), и для каждой точки считается расстояние до нее от экрана. И в буфер кадра заносятся, естественно, те точки, расстояние от которых до экрана минимально. После этого буфер кадра выводится на экран, и цикл повторяется. Метод прост в реализации, и потому используется почти во всех трехмерных играх.

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

В один прекрасный для любителей IBM PC день, фирма 3Dfx Interactive, которая успешно делала видеочипы для игровых автоматов, решила расширить свой рынок, и перейти на PC. Это у нее получилось - да так хорошо, что только через полгода после выхода первого 3D-ускорителя, на выставке E3 этого года, некоторые фирмы смогли показать проекты своих ускорителей, которые только приближались по быстродействию к карте от 3Dfx. Настал век аппаратной поддержки игр. В чем преимущество аппаратного акселератора, т.е. видеочипа, который сам способен обрабатывать трехмерные объекты? Если все операции по обработке трехмерного мира до выхода аппаратных акселераторов делал процессор, то теперь большинство этих функций можно переложить на специализированный процессор, который, безусловно, лучше и быстрее будет справляться с задачами обработки трехмерного видео. Но выигрыш в скорости - только одна сторона медали. Есть и другая - КАЧЕСТВО. Дело в том, что специализированный чип акселератора умеет применять множество новых технологий и эффектов, нацеленных не только на ускорение расчета трехмерной сцены, но и на повышение качества получающейся на экране картинки. Применяемые технологии, например, позволили снять основную описанную выше проблему текстурирования (превращение текстур в несколько цветных квадратов при приближении наблюдателя к ним) а также позволяли многое другое.

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

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

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

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

Тесселированные объекты задаются в некоторой канонической системе координат (С К), где их координаты постоянны. Перемещение объекта по сцене производится его отображением из канонической СК в СК сцены.

Как работает 3D-графика

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

* расчет сцены;
* обработку полигонов;
* рендеринг.

Этап 1. Расчет сцены
При расчете каждой сцены (geometry setup) производятся следующие действия:

1. Размещение объектов (transformation). Каждый объект, попадающий в кадр, отображается из своей канонической СК в СК сцены. Заметим, что СК сцены не статическая, а связана с игроком и перемещается вместе с ним.
2. Расчет освещенности (lighting). Производится для каждой плитки, исходя из расположения и интенсивности источников света, а также теней, отбрасываемых другими плитками. Обычно расчет производится только для вершин полигона, а освещенность всей плитки получается интерполяцией.
3. Отсечение (clipping) полигонов, выходящих за кадр.
4. Привязка текстур к полигонам - задается, какая текстура будет наложена на каждый полигон и относительное положение полигона относительно текстуры. Требуется только для динамической замены текстуры. Для статических объектов наподобие монстра, которые заданы в тесселированном виде, привязка уже выполнена.

Текстура (map, texture - ткань, рисунок) - квадратные рисунки, играющие роль обоев. Накладываются на полигоны для придания поверхностям реалистичности. Вы вероятно знаете, что элемент изображения на экране называется пиксел (Picture Element). Текстура тоже состоит из элементов, так как это - растровое изображение, элемент текстуры называется текселом (по аналогии с пикселом).

Расчет сцены иногда сокращенно называют TL по имени основных шагов (Transformation and Lighting). Заметим, что сцена рассчитывается полностью, прежде чем будет передана для дальнейшей обработки.

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

Вплоть до самого последнего времени расчет сцены выполнялся центральным процессором. Но в некоторых чипах последних поколений расчет выполняет графический сопроцессор (GPU)

Этап 2. Обработка полигонов
Обработкой полигонов (Polygon setup, иногда Triangle setup) занимается выделенный блок Polygon setup engine (движок обработки полигонов) 3D акселератора графического чипсета. На блок из основной памяти по шине AGP посылаются полигон за полигоном. Блок обрабатывает полигон и сразу отсылает его на блок рендеринга, работая как конвейер.

Производительность блока обработки полигонов называется Triangle throughput и представляет собой пиковую скорость обработки треугольников в секунду. Реальная скорость обработки треугольников может быть ниже, если, например, процессор не успевает рассчитывать и передавать необходимую видеоплате информацию. Т.е., медленный процессор замедляет работу 3D ускорителя.

Скорость обработки современных чипсетов составляет 15 млн. треугольников в секунду и более.

Обработка каждого треугольника включает:

1. Прием координат вершин треугольника и их атрибутов: освещенности, координат в текстуре (это называется текстурными координатами) и др.
2. Коррекцию перспективы треугольника. То есть фигура масштабируется в зависимости от ее удаленности.
3. Проектирование треугольника на плоскость XY экрана
4. Вычисление пикселов, входящих в проекцию треугольника.
5. Расчет для этих пикселов атрибутов. Расчет производится интерполяцией значений, задаваемых обычно на вершинах треугольника.
6. Посылку обработанного треугольника следующему блоку (рендеринг).

Этап 3. Рендеринг

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

Рендеринг производится выделенным блоком Fill engine (движок заполнения) 3D акселератора графического чипа, который обрабатывает "на лету" поток треугольников от предыдущего блока.

Производится попиксельное заполнение треугольника. Для каждого пиксела вначале вычисляется, является ли он видимым (обычно посредством z-буфера). Если пиксел невидим, то выводить его в буфер, очевидно, не нужно.

Далее производятся следующие действия:

1. Вычисляется накладываемый тексел (иногда весьма изощренно).
2. Производится наложение тексела с учетом освещенности пиксела.
3. Опционально на пиксел накладываются эффекты, увеличивающие реалистичность (туман, карта освещенности, карта рельефа, и т.д.).
4. Производится запись пиксела в буфер кадров.

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

Пиковую производительность блока заполнения пикселов называют Fill rate (скорость заполнения, прорисовки, растеризации), и измеряется она в количестве пикселов в секунду. Реальная скорость прорисовки много меньше, и тем меньше, чем больше текселов накладывается на один пиксел, поэтому рассчитывается для наиболее простого режима текстурирования.

Скорость заполнения у современных чипсетов составляет 400 млн. пикселов в секунду и более.

Заметим, что в ЗD-трафике, обязательны минимум 2 буфера кадров (БК), в отличие от 2D)-графики (это называете двойной буферизацией, double buffering). Дело в том, что обычно в процессе заполнения каждый пиксел многократно переписывается (например, при постобработке) пока не получится окончательный вид кадра. Поэтому па экран выводится законченный буфер кадров, а во втором готовится следующий кадр.

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

Другие важные параметры видеоплаты
Поддерживаемый режим AGP
Современная видеоплата может быть выполнена как в разъем PCI (уходящий вариант), так и в AGP. Помимо большой скорости передачи данных по шине, технология AGP позволяет также организовывать AGP-память - часть основной памяти для потребности 3D-гpaфики, причем 3D-чип может обращаться к ней напрямую (минуя процессор).

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

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

* пропускная способность локальной памяти в 3-6 раз выше, чем у AGP (достигая 3 Гбит/с);
* шина основной памяти обслуживает и другие запросы.

Параметром графического контроллера является максимальный объем видеопамяти, с которой он может работать (обычно это 32-64 Мбайт). Производитель обычно выпускает целую линейку карт, различающихся объемом видеопамяти и рассчитанных на различные сегменты рынка. Наиболее популярные сейчас объемы 16 и 32 Мбайт (и есть тенденция перехода к 64 Мбайт). Но, тем не менее, нужно помнить - несмотря на то, что объем видеопамяти - очень важный параметр, оценивать видеоплату ТОЛЬКО по объему ее видеопамяти сродни оценки автомобиля по комфортабельности салона, не говоря при этом, какой у Вас автомобиль. Безусловно, есть связь между комфортабельностью салона и маркой машины :), самую плохую машину не станут слишком "наворачивать", как и на видеоплату с плохим чипом не станут ставить много видеопамяти, но тем не менее, в первую очередь следует интересоваться, какой видеочип используется на видеоплате, а затем уже сколько видеопамяти установлено.

Параметры графического чипа и внутренней шины
Как и любой микропроцессор, графический чип имеет следующие параметры:

Внутренняя частота.

В настоящее время составляет 120-200 МГц. Как и центральный процессор, видеочип можно разгонять.

Технология изготовления.

Большинство чипов сделано по технологии 0,25 мкм, но уже начали появляться чипы с технологией 0,18 мкм. Уменьшение техпроцесса, как мы знаем, позволяет увеличить частоту и уменьшить тепловыделение.

Шина видеопамяти.

Чип связан с локальной видеопамятью внутренней шиной. Ее ширина является важным скоростным параметром и, разумеется, совпадает с шириной интерфейса чипа и памяти. В настоящее время у большинства чипов составляет 128 бит, у дешевых изделий - 64 бита, у последних изделий - 256 бит. Этот параметр часто включается в название чипа (подробнее - позже). Кроме того, видеопамять характеризуется типом и частотой. Как мы уже говорили, сегодня применяют только SDRAM и DDRSDRAM, частота видеопамяти обычно не меньше частоты чипа и составляет в настоящее время 125-220 МГц. Видеопамять, как и оперативную память системы, также можно разгонять.
Категория: