Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
A_K_4-2.doc
Скачиваний:
3
Добавлен:
18.11.2019
Размер:
2.51 Mб
Скачать

199

4.12 Устройства отображения информации - дисплеи

4.12.1 Видеоконтроллеры

Развитие видеоконтроллеров связано с историческими этапами совершенствования самих РС.

К стандартным видеоконтроллерам РС относятся:

  • монохромный дисплейный адаптер (Monochrome Display Adapter – MDA);

  • цветной графический адаптер (Color Graphics Adapter – CGA);

  • монохромный графический адаптер (Monochrome Graphics Adapter – MGA);

  • улучшенный графический адаптер (Enhanced Graphics Adapter – EGA);

  • видеографическая матрица (Video Graphics Array – VGA);

  • лучшая видеографическая матрица (Super Video Graphics Array – SVGA) и др.

Одним из основных элементов любой видеоситемы является собственная память, которая хранит информацию, выводимую на монитор (регенерируемую на экране с частотой кадровой развертки). Хотя видеопамять (или оперативная память для хранения изображения), как правило, физически находится на плате видеоадаптера, она составляет часть общей памяти компьютера, т.е. эта память лежит в адресном пространстве базового микропроцессора. В IBM PС совместимых компьютерах для нее зарезервирован диапазон адресов:

A0000h – BFFFFh (128 Кбайт).

В графическом режиме для каждого пиксела отводится от одного (для монохромного режима) до нескольких бит (в цветном режиме от 4 до 24). Графический режим часто называют режимом с адресацией всех точек (All Points Addresable), потому что в этом случае имеется доступ к каждой точке изображения.

Максимальное разрешение и количество воспроизводимых цветов видеосистемы зависят от объема видеопамяти и количества бит, приходящихся на один элемент изображения (пиксел).

Таблица 4.8– Минимальный объем видеопамяти (в МБ) в зависимости

от разрешения и количества цветов

Разрешающая способность

Бит на пиксел (количество цветов)

4 (16)

8 (256)

16 (64К)

24 (16М)

640 *480

0,25

0,5

1,0

1,0

800 * 600

0,25

0,5

1,0

1,5

1024 * 768

0,5

1,0

1,5

2,5

1280 * 1024

1,0

1,5

2,5

4,0

1600 * 1200

1,0

2,0

4,0

6,0

VGA – ВИДЕОГРАФИЧЕСКАЯ МАТРИЦА

VGA в текстовом режиме отображает 80 символов по 25 строк (размер матрицы символов 14 * 8 точек) или 80 символов по 43 строки, а в графическом режиме имеет разрешающую способность 640 * 480 точек с использованием 16 цветов (выбранных из палитры 4096 оттенков) или 320 * 200 точек при воспроизведении 256 цветов в каждой точке.

Отличительная особенность этого видеоадаптера – формирование аналоговых выходных сигналов управления яркостью каждого из трех основных цветов – R, G, B. Поэтому изображение на экране монитора приближается по качеству к обычному телевизионному.

Более современные адаптеры VGA имеют повышенную разрешающую способность:

  • VGA Vagic, VGA-16, TVGA-16 и др. – 800 * 600 точек при 256-ти цветной палитре;

  • VGA Profeccional, Genoa VGA и др. – 800 * 600 точек при 256-ти цветной палитре и 1024 * 786 точек при 16-ти цветной палитре.

  • Super VGA (SVGA) – 800 * 600 и более точек при палитре в 224 цветовых оттенков в каждой точке;

  • XGA – разрешение 1024 * 768 точек;

  • SXGA – разрешение 1280 * 1024 точек;

  • и др.

Хотя общий объем памяти и ограничивает количество цветов, которые может создавать видеоадаптер, сам спектр оттенков, получаемых на экране монитора, зависит от используемого RAMDAC (см. рис. 4.19). Например, в адаптере VGA 8-ми битовое значение цвета используется как адрес для выбора одного из 256 регистров (RAM) в таблице цветов RAMDAC.

Каждый из регистров цвета RAMDAC является 18-ти разрядным и состоит из 6 битов для красной, 6 для зеленой и 6 для синей составляющей. Каждая 6-ти битовая составляющая цвета преобразуется в аналоговые сигналы своим цифро-аналоговым преобразователем (DAC). Значения регистров в этой таблице программируются процессором.

Таким образом, выходной каскад VGA (RAMDAC), по сути, является 18-ти разрядной системой цветопередачи и позволяет отображать: 218 = 262 144 оттенка цветов, но поскольку объем памяти ограничивает использование только 8 бит на пиксел, то одновременно могут отображаться 256 цветов.

В SVGA-контроллерах сигналы для поддержки режимов HIGH-COLOR (15 или 16 бит для кодирования цвета каждого пиксела) или TRUE-COLOR (24-х разрядное кодирование цвета) формируются в обход таблицы цветов RAMDAC и поступают непосредственно на цифро-аналоговые преобразователи (DAC) цветов.

H DR

На данный момент принята цветовая модель передачи изображений RGB (red, green, blue), которую еще называют LDRi (Low Dynamic Range image). Она разрабатывалась для современных устройств, таких как телевизоры, мониторы и т. д. Суть этой схемы состоит в том, что любой оттенок можно выразить сочетанием трех основных цветов – красного, зеленого и синего – с правильно подобранной интенсивностью свечения, которая представляется в виде 256 градаций на цветовой канал. Само число 256 появилось как компромисс между производительностью видеоподсистемы, требованиями к реалистичности изображения и двоичной природой компьютерных вычислений (256 = 28). В результате исследований было выявлено, что 16,7 млн (256x256x256) оттенков вполне достаточно для правильной передачи изображений фотографического качества.

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

Именно для получения правдоподобной графики и предназначена модель HDRi (High Dynamic Range image), где каждая точка изображения описывается реальными физическими параметрами. Если одна точка в действительности ярче другой в два раза, то и на картинке она должна быть именно вдвое ярче. Основным отличием HDRi от RGB является манипулирование вещественными, а не целыми числами, и здесь уже не обойтись одним байтом на канал цвета. Естественно, это приводит к возрастанию требований к графическим акселераторам и снижению уровня fps.

Новая технология задействуется в так называемом HDR-рендеринге. Суть процесса состоит в том, что при применении чисел с плавающей запятой получается намного более реалистичный результат, нежели при расчетах с целочисленной моделью RGB. В современных играх преобладает формат OpenEXR, разработанный студией Industrial Light and Magic. С учетом использования 16-битовых вещественных чисел на каждый канал в итоге получается 48 битов на пиксел, что, согласитесь, немало. И именно благодаря этому мы видим на мониторе не блеклое грязно-желтое солнце и сероватое небо, а яркую картинку, очень приближенную к реальности.

Стоит упомянуть, что применение HDR-рендеринга и формата Open-EXR допустимо только в случае поддержки игровым акселератором Shader Model 3.0 и выше.

SHADER MODEL 3.0

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

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

Довольно долгое время разработчики довольствовались Shader Model 2.0, но на данный момент все большую популярность приобретает расширенный набор инструкции из пакета DirectX 9.0 – Shader Model 3.0. В нем имеется поддержка последовательностей длиной в 65 535 команд (против 96 у предыдущей модели), реализованы плавные динамические переходы, есть возможность применения шейдеров при включении антиалиасинга, интерполяция и рендеринг изображений с использованием чисел с плавающей запятой в диапазоне до 32 битов (в то время как Pixel Shader 2.0 работает только с целыми числами и 8-битовым диапазоном).

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

Direct3D 10

DirectX занимает важное место в архитектуре Windows. Этот набор системных компонентов отвечает за все мультимедийные задачи в системе: видео, звук, графику. Наибольшие изменения появились в десятой версии Direct3D – компонента, ответственного за трехмерную графику. Тем более что в Microsoft Vista на его плечи легла визуализация графического интерфейса операционной системы – Aero.

В Microsoft Vista значительным, даже кардинальным изменениям подвергся только Direct3D. Прочие крупные компоненты (а из актуальных их теперь лишь два: Directlnput и DirectSound) остались без изменений, еще несколько уже довольно давно считаются устаревшими (DirectDraw, DirectMusic и DirectPlay) либо предназначенными для мультимедийных, а не игровых задач (DirectShow).

Хотя такой компонент, как Direct3D (D3D), адресован разработчикам ПО и игр, а обычные пользователи напрямую с ним не работают, знать о нем им не помешает. Ведь каждая новая версия D3D устанавливает некую планку технических возможностей, которые должен поддерживать 3D-aкceлератор аппаратно (т. е. без эмуляции видеодрайвером), чтобы называться совместимым с ней, – и эта информация поможет в выборе модели видеокарты. К тому же по поддержке той или иной игрой определенной версии Direct3D можно примерно судить о техническом потенциале графического движка игры, по крайней мере на переходном этапе между версиями (т. е. в ближайшие год-полтора), так как в первую очередь новую версию D3D стараются поддержать наиболее технологичные и современные проекты. И наконец, та или иная игра делается в расчете на определенную минимальную версию Direct3D и без поддержки ее системой (ОС и видеокартой) просто не запустится – это может послужить толчком к апгрейду либо уберечь от покупки несовместимой игры для старого компьютера.

Direct3D 10 стал первым крупным обновлением данного API за последние четыре года – со времен появления D3D 9.0 в 2002 г. И это первый случай, когда его новая версия поддерживается только самой последней операционной системой Microsoft Vista. Поддержка D3D10 в Windows XP официально не планируется, к тому же она трудно осуществима технически. Причина кроется в значительном изменении архитектуры дисплейного драйвера, т.е. уходе от принципа его совместимости с прошлым семейством Windows NT 5.x (Windows 2000, XP, 2003 Server). Новая архитектура называется WDDM (Windows Display Driver Model), и переход на нее во многом вызван появлением нового графического интерфейса в Vista – Aero, базирующегося на Direct3D и в немалой степени «нагружающего» 3D-акселератор. Aero не использует для рендеринга GUI старый двумерный GDI API, применявшийся в Windows для этих целей еще с первых версий, и при использовании которого перерисовываются только части экрана, изменившиеся или «затертые» другими окнами, например, при их перемещении. Многие эффекты Aero являются динамическими и истинно трехмерными, что GDI не под силу. В Aero пересмотрена сама концепция рендеринга интерфейса программ: вместо непосредственного рисования на экране происходит сборка изображения из отдельных частей с применением эффектов на лету, несколько раз в секунду, как это осуществляется в играх. В свою очередь рендеринг трехмерного изображения параллельно несколькими программами, а также самой ОС без возникновения задержек требует лучшего управления его ресурсами, что и достигается с помощью WDDM-совместимых драйверов.

От общеархитектурных изменений в Vista для поддержки D3D10 перейдем к новым возможностям этого API и акселераторов, аппаратно совместимых с ним. На рис. 4.20 изображена общая схема 3D-конвейера в Direct3D, округлые блоки являются гибко программируемыми с помощью шейдеров, прямоугольные же по-прежнему управляются путем установки набора состояний, задающих режим их работы.

Input Assembler (IA) предназначен для задания набора входных данных, размещенных в видеопамяти, для использования их последующими этапами конвейера и интерпретации нужным образом. Следующий за ним этап вершинного шейдера (vertex shader, VS) не претерпел особых изменений по сравнению с прошлой версией и служит для трансформации информации отдельных вершин-точек ЗD-объектов, изменяя такие их параметры, как координаты или освещенность.

Одним из самых интересных и наиболее мощных нововведений D3D-10 являются геометрические шейдеры (geometry shader, GS). Вершинные шейдеры ничего не знают о связях отдельных вершин объекта, над которым работают, т.е. геометрической топологии объекта, и не могут вмешиваться в эти связи, добавляя или удаляя вершины.

В отличие от них геометрические шейдеры работают уже с целыми примитивами (точка, линия либо треугольник) и их связями с соседними примитивами, но главное – могут более произвольно с ними обращаться, генерируя на выходе новые примитивы на лету в любом количестве либо пропуская ненужные, в зависимости от входных данных и своего алгоритма. Такие богатые возможности в обращении с геометрией позволяют перенести полностью на GPU многие вещи, которые ранее делались частично под управлением CPU, что снижало скорость параллельной работы процессора и видеокарты за счет частых блокировок 3D-pecypcoв для произведения операций над ними на CPU. К примеру, стало возможным полностью перенести на GPU системы частиц, расчет теневых объемов для ряда алгоритмов динамических теней, реализовать наконец честный displacement mapping, некоторые прогрессивные техники motion blur, визуальные эффекты (мех, волосы, растительность), однопроходное создание кубических карт отражения (cubemap).

Рис. 4.20 – Схемы конвейеров Direct3D

Стадия геометрического шейдера в ЗD-конвейере является опциональной и расположена между этапами вершинного шейдера и растеризации. Кроме того, как видно из схемы, выход геометрического шейдера может быть отправлен и просто в буфер памяти, а затем повторно подан на вход конвейера в произвольный момент, даже на другом кадре. Это позволяет, к примеру, однократно вычислить скелетную анимацию или морфинг для очень сложной модели, сохранить результат операции в видеопамяти, после чего многократно подавать ее на рендеринг на том же или последующих кадрах, реализуя таким образом новый метод инстансинга (instansing) объектов.

Все прочие стадии конвейера не являются чем-то новым: растеризатор преобразует трехмерную сцену в двумерное изображение с учетом перспективы и вызывает пиксельный шейдер (pixel shader – PS) для расчета цвета и Z-глубины каждого пиксела. После чего на последнем этапе сборки и вывода производятся окончательные проверки на глубину (Z test) и соответствие буферу шаблонов (stencil test, может применяться для самых разных алгоритмов, чаще для теней и отражений), в случае успеха результат пиксела сохраняется в буфер кадра или текстуру (render target).

В Direct3D 10 используется очередное поколение шейдеров – Shader Model 4.0 (SM 4.0). Среди новых возможностей: целочисленные и побитовые команды для лучшего управления логикой шейдера, снятие ограничений на количество инструкций в шейдере, увеличение лимитов на количество используемых шейдером текстур. Разработчики отказались и от поддержки низкоуровневого ассемблерного языка программирования шейдеров, теперь все шейдеры должны быть написаны на высокоуровневом языке HLSL. Сама функциональность HLSL в четвертой версии разбита на некую базовую, которую поддерживают все три типа шейдеров (VS, GS и PS), и специфическую для каждого из них.

Легко видно, что такие изменения, как введение третьего типа шейдеров и унификация их базовой функциональности, лишний раз послужили толчком к переходу в новом DЗD-10-совместимом поколении акселераторов к унификации архитектуры GPU, когда в зависимости от нагрузки на ту или иную часть 3D-конвейера отдельные вычислительные блоки GPU временно берут на себя функции по работе над одним из трех типов шейдеров. И хотя подобная архитектура GPU не является непременным требованием со стороны спецификаций Direct3D, она оказалась вовремя поддержанной как NVIDIA в GeForce 8 series, так и AMD/ATI в R600.

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

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

Кроме того, в десятой версии наконец ликвидированы пережитки, которые оставались еще с шестой-седьмой версии. Так, произошел окончательный отказ от механизмов Fixed Function Pipeline (FFP) – конвейера с фиксированной функциональностью, методики рендеринга «дошейдерной» эпохи. Это был большой набор состояний, флагов и функций для их установки, который и так уже долгое время в новых акселераторах эмулировался с помощью шейдеров и существенно «раздувал» как код видеодрайвера, так и саму библиотеку Direct3D. Под нож пошла и «развесистая» система опроса драйвера видеокарты через сам D3D о возможностях и ограничениях аппаратуры – capabilities (или кратко – caps). Зачастую данные, полученные подобным образом, были неполны или просто неверны.

Разработчикам также приходилось нередко использовать всевозможные «хаки» как для отдельных поколений графически чипов, так и для некоторых особенностей архитектур видеокарт ATI и NVIDIA. Microsoft пытается в очередной раз привести все к единому, поддерживаемому всеми стандарту, и видеокарты, которые хотят называться DЗD-10-совместимыми, должны попросту поддерживать все возможности, оговоренные в документации на Direct3D от и до, без отклонений в сторону меньшей функциональности. Были исключены медленные вызовы рендеринга объектов из системной памяти (DrawPrimitiveUp), как и весь механизм работы с пулами памяти.

На практике даже в играх топ-компаний часто злоупотребляли этими возможностями, что сильно снижало производительность. Теперь все ресурсы должны быть явно размещены в видеопамяти перед использованием. Исчезла давно критикуемая концепция «потери и восстановления устройства» (device lost & restore) – к такому состоянию Direct3D приходил после нажатия Alt+Tab, Win+L (блокировка сессии) или Alt+Enter (переключение между полноэкранным и оконным режимами). При возникновении подобной ситуации игра должна была освободить все занятые ею ресурсы Direct3D, произвести сброс устройства, затем пересоздать эти ресурсы заново. Что происходило, во-первых, медленно, во-вторых, код обработки описанной ситуации (иногда достаточно сложный) был рассредоточен по всему графическому движку, и в случае допущенной где-то ошибки игра просто «падала» после Alt+Tab. С такой проблемой, наверное, сталкивался каждый.

Сейчас из Direct3D выделен отдельный модуль под названием DXGI (DirectX Graphics Infrastructure), который отвечает за общие вопросы управления 3D-адаптерами, дисплеями и экранными режимами, гаммой, презентацией финального изображения, а также обработку ситуаций переключения режима пользователем по Alt+Enter. И наконец, за счет избавления от всех устаревших возможностей, а значит, облегчения Direct3D runtime, вместе с переносом многих проверок правильности данных с этапа рендеринга на этап создания ресурсов, были облегчены многие вызовы Direct3D, т. е. теперь можно выводить на экран больше объектов в каждом кадре при прежней производительности.

Итак, мы видим, что Microsoft учла многие недостатки и ограничения прошлых поколений своего 3D API и постаралась их исправить, зачастую путем простого отказа от накопленного «балласта». Особое внимание было уделено повышению гибкости программирования ЗD-конвейера, перспективе обеспечения еще большего параллелизма между CPU и GPU, снижению объемов передаваемых в видеокарту данных, улучшению менеджмента ее ресурсов.

Таблица 4.9 – Даты выхода различных версий DirectX

Версия DirectX

Операционная система

Дата выпуска

DirectX 1.0

Windows 95a

30 сентября 1995

DirectX 2.0/2.0a

Windows 95 0SR2 и NT 4.0

5 июня 1996

DirectX 3.0/З.0а

Windows NT 4.0 SP3 (последняя версия с поддержкой DirectX для Windows NT 4.0)

15 сентября 1996

DirectX 4.0

-

-

DirectX 5.0

Была доступна в бета-версии под Windows NT 5.0, инсталлировалась под Windows NT 4.0

16 июля 1997

DirectX 5.1

Windows 95/98/NT 4.0

1 декабря 1997

DirectX 5.2

Windows 95

5 мая 1998

DirectX 6.0

Windows 98/NT 4.0

7 августа 1998

DirectX 6.1

Windows 95/98/98SE

3 февраля 1999

DirectX 7.0

Windows 95/98/985E/2000

22 сентября 1999

DirectX 7.0a

Windows 95/98/98SE/2000

1999

DirectX 7.1

Windows 95/98/98SE/Me/2000

16 сентября 1999

DirectX 8.0

Windows 95/98/98SE/Me/2000

30 сентября 2000

DirectX 8.0

Xbox

3 ноября 2000

DirectX 8.0a

Последний вариант под Windows 95

7 ноября 2000

DirectX 8.1

Windows 98/98SE/Me/2000/XP

12 ноября 2001

DirectX 9.0

Windows Server 2003

19 декабря 2002

DirectX 9.0a

Windows 98/98SE/Me/2000/XP

26 марта 2003

DirectX 9.0b

RC2

13 августа 2003

DirectX 9.0c

Windows XP SP2, Windows Server 2003 SP1, Xbox 360

13 декабря 2004

DirectX 9.0c

Совместимые с DX9.0c версии Windows, впервые включены D3DX DLL

9 декабря 2005

DirectX 9.0c (Shader Model 3.0)

Windows XP

Последнее обновление с поддержкой Windows 98/98SE/Me/2000 – в августе 2005

Версии декабря 2005 и февраля 2006 – с поддержкой формата XML для некоторых классов

Ежемесячные

обновления

с августа 2005

DirectX 9.0L

DirectX 9 API – только для Windows Vista

-

DirectX 10.0

Новая версия DirectX – только для Windows Vista

-

Добавление некоторых возможностей, таких как геометрические шейдеры, открывает путь к реализации многих систем и алгоритмов полностью на GPU (системы частиц, displacement mapping). Хотя ничто не дается даром – Direct3D 10 будет работать только с Vista и только с новым поколением ускорителей. Для всего остального придется использовать девятую версию.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]