Видеопамять, как и оперативная память, работает на какой-то определенной частоте. Само по себе количество видеопамяти на борту видеокарты не играет практически никакой роли. Если поставить на старенькую Riva TNT 256 Мб видеопамяти, ее производительность не увеличится ни на йоту — она просто не сможет с дополнительной памятью полноценно работать. В видеоподсистеме все должно быть сбалансировано. Однако современные игры с гигантскими текстурами требуют в видеокартах высокого класса установки большого объема видеопамяти — до 512 Мб. Видеокарта — это отдельное устройство. Первые видеокарты подключались к шине XT-bus через специальный слот. Ему на смену пришел слот ISA. Вскоре его скромных возможностей (16 бит, 8М Гц) стало не хватать, и IBM решила внедрить свою шину и слот для видеокарт и не только под названием MCA (Microchannel Architecture — микроканальная архитектура). Однако затея благополучно провалилась, потому что IBM пожадничала и решила сделать эту шину лицензируемой, то есть разработчики устройств должны были выплачивать ей солидные проценты от продаж. На смену ISA пришла шина VESA Local Bus (VLB), потом PCI и завершил это победное шествие порт AGP. Необходимость выделить под видеокарту отдельный порт назревала долго и упорно. Действительно, это устройство по требованиям к пропускной способности очень сильно отличается от всех остальных компонентов компьютера, его нельзя причесывать под одну гребенку с другими. Идея порта AGP (Accelerated Graphics Port) пришла в голову инженерам из Intel. Она проста до гениальности: видеокарта должна иметь возможность обращаться к оперативной памяти, минуя процессор. По тому же самому принципу работает технология DMA, благодаря которой винчестер может общаться с оперативной памятью в обход процессора. Возможно, через несколько лет устройства и их контроллеры станут настолько умными, что им вообще для работы не нужен будет процессор.
Кроме выделенного канала связи с оперативной памятью, видеокарта может также не заботиться о том, в какой именно ячейке памяти хранится нужная ему информация. С момента своего появления на свет стандарт AGP дошел до третьей версии. Разные версии порта обозначают на манер скоростей у приводов компакт-дисков: 2x у AGP 1.0, 4x у AGP 2.0 и 8x у AGP 3.0. Получается какая-то несуразица: почему у самого первого слота AGP скорость передачи сразу 2x? А дело вот в чем. Шина AGP 1.0 имеет частоту 66 М Гц и разрядность 32 бита. Значит, скорость передачи данных — 266 Мб/c. Однако шина может также работать в режиме, когда данные передаются и по переднему, и по заднему фронту синхросигнала, и тогда скорость передачи возрастает в два раза — до 532 Мб/c. Отсюда приписка “2x”. В стандарте AGP 2.0 скорость передачи данных выросла еще в два раза — до 1064 Мб/c, и появился новый механизм “быстрой записи” — Fast Write (FW). С его помощью управляющие команды записываются напрямую в AGP-устройство. Раньше в качестве промежуточного звена использовалась оперативная память. В AGP 3.0 частота возросла до 533 М Гц, а скорость обмена данными — до 2.1 Гб/c. В последние годы появился новый интерфейс - PCI express, PCIE -сокращенно. Эта шина полностью заменила шину PCI в новых компьютерах.
1.5 Видеосистема как часть компьютера
Видеокарта состоит из двух частей. Это графический процессор (самая большая микросхема видеокарты) и память. Практически это такая же память, как и оперативная. Правда, обычно она работает на большей частоте, чем оперативная (это требование графического процессора).Сам графический процессор тоже можно разделить на две части. Каждая его часть названа по виду изображения, которое она создает. Есть часть, отвечающая за 2-мерное плоское изображение (так называемое 2D) и часть, создающая 3 –мерное изображение(3 D).
Первая часть существовала даже в самых древних видеокартах. Собственно говоря, только она там и была. И за последние годы она практически не изменилась, проблема создания хорошего плоского изображения была решена еще в 386-х компьютерах. Главный пожиратель ресурсов видеокарты – это 3D часть графического процессора. Чтобы создать достоверное для глаза 3-мерное изображение, необходимо огромное количество вычислений. Но хотя самих вычислений много, они достаточно примитивные и однообразные и поэтому, чтобы не гонять эти данные по загруженной другими данными внутренней шине, вычисления производят в самой видеокарте, для этого и появился на ней свой собственный процессор. Самое сложное изображение можно разделить на элементарные составные части. Этих частей для достоверного изображения должно быть огромное количество, сотни тысяч на одном экране. Поэтому решено было (производителями компьютеров) разделить процесс создания 3-мерного изображения. Центральный процессор только подает команды на создание изображения, а самим созданием занимается видеокарта. Для создания изображения требуется гораздо меньше команд, поэтому графический процессор гораздо проще по своей структуре. Но главное его достоинство – возможность выполнять большое количество операций в секунду. Чтобы еще быстрее работать и давать более 30 достоверных кадров в секунду, в графическом процессоре были организованы несколько исполняющих модулей. Модули могут параллельно выполнять команды, одновременно создавая различные части изображения. А чтобы изображение формировалось еще быстрее, модули объединяют в так называемые конвейеры, чтобы одновременно работать на разных стадиях создания изображения. Но хотя процессор и формирует на лету элементарные фигурки, создающие реальное изображение, из этих фигурок получается только оболочка – каркас. Надо на этот каркас натянуть шкурку – текстуры, которые оживляют смоделированное компьютерное изображение. За этот реализм приходится платить немалую цену (в производительности), ведь текстуры в отличие от каркаса не смоделированы. Текстура – это реальное изображение реальной поверхности. Текстур требуется очень много, именно на создание их идет основная часть видеопамяти. Само изображение на экране, независимо от того 2D оно или 3D, занимает в памяти одинаковый объем. А вот если не хватает памяти для текстур, то центральный процессор начинает использовать для этой цели часть своей оперативной памяти и основная внутренняя шина сильно перегружается. Следствием является дерганее экрана и прочие неприятности с изображением. Поэтому на видеокарту стараются поместить как можно больше памяти, (это сдерживается только ценой). В первую очередь, в памяти располагается видеобуфер — специальный участок памяти, где хранится копия изображения, которое в следующее мгновение будет выведено на экран. В видеобуфере изображение как бы собирается по кускам и отправляется на обработку в RAMDAC. В случае если применяется двойная буферизация (double buffering), в видеобуфере хранится дополнительно предыдущее (“теневое”, или “заднее”) выведенное на экран изображение (все эти специальные термины будут рассмотрены в разделе, посвященном созданию трехмерного изображения). Наш глаз обладает некоторой инерционностью, то есть некоторое время продолжает видеть изображение, которое уже исчезло. Представьте себе, что все, что рисует видеокарта в видеобуфере, мгновенно попадает на экран. Рисуем линию — она рисуется поверх предыдущего изображения. Как бы быстро ни происходил этот процесс, глаз все равно будет замечать, что какие-то части изображения остались, какие-то изменились. Из-за этого игрок заметит крайне неприятное мелькание. Именно поэтому новый кадр сначала рисуется в теневой области видеобуфера (так называемый backbuffer), а затем этот кадр и тот, который был на экране, меняются местами. Благодаря этому создается впечатление гладкого и равномерного движения. Допустим, монитор находится в разрешении 1024х768 и в режиме 32 бита. Это значит, что цвет каждого пикселя определяют 32 бита, а количество всех возможных цветов — 232 = 4 294 967 296 — четыре с лишним миллиарда. Порог чувствительности человеческого глаза, к слову, немного ниже, то есть такая картинка будет восприниматься как абсолютно реальная (такой режим называется True Color как было отмечено ранее). В режиме 1024х768 на экране отображается 786432 пикселей. Нехитрые подсчеты показывают, что для хранения этого кадра в видеопамяти потребуется около 3 Мб. С учетом двойной буферизации получается 6 Мб. Но ведь в современном акселераторе в среднем стоит 128 Мб видеопамяти. Используются они в первую очередь на текстуры. Подгружать текстуры из оперативной памяти, а то и с жесткого диска в процессе рендера — неоправданно долго. Поэтому разработчики игр специальными командами дают задание акселератору подгрузить все или хотя бы часть необходимых ему текстур во время загрузки очередной карты или уровня. Средний размер текстуры — 1024х1024 при качестве 24 или даже 32 бита. Такая текстура будет занимать в памяти около 4 Мб. Значит, в видеопамять объемом 128 Мб влезет от силы 32 таких текстуры. Один путь — подгружать текстуры из оперативной памяти по мере необходимости, но тогда могут случаться задержки, вызывающие падение FPS. Другой путь — хранить текстуры в видеопамяти сжатыми, хотя бы простым алгоритмом. Одним из первых алгоритмов сжатия текстур был S3TC, разработанный в компании S3 Inc. Он стал индустриальным стандартом и поддерживается в DirectX, начиная с версии 6.0. Компания 3dfx разработала свой метод сжатия — FXT1, который отличается высокой степенью компрессии.