Главная      Учебники - Разные     Лекции (разные) - часть 13

 

Поиск            

 

Реализация трехмерной графики

 

             

Реализация трехмерной графики

Содержание

Введение

1. Принципы вывода изображений

2. Графический режим

3. Текстовый режим

4. Трехмерная графика

4.1. Графический конвейер

4.2. Рендеринг

4.3. Реализация трехмерной графики

5. Обработка видеоизображений

5.1. Стандарты MPEG

Введение

Персональный компьютер смог стать привлекательным вычислительным сред­ством благодаря интерактивности взаимодействия с пользователем. Интерактив­ность подразумевает наличие устройств оперативного ввода и вывода информации. Основной поток выходной информации — визуальный, причем информа­ция представляется как в текстовом, так и в графическом виде. Визуальная ин­формация может выводиться на экран, возможно получение и ее «твердой ко­пии» (Hard Copy) — на бумаге, пленке и т. п. Для интерактивного режима вывод на бумагу малоинтересен, хотя в далекой истории компьютеров интерактивный режим впервые был реализован именно на телетайпе (грубо говоря, электричес­кой пишущей машинке, подключенной к компьютеру). Данный посвящен активным средствам вывода визуальной информации — видеосистеме PC. Ак­тивность подразумевает возможность изменения изображения без смены носи­теля.

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

По мере «взросления», на PC стали взваливать и казавшуюся ранее неподъ­емной ношу воспроизведения и обработки движущихся телевизионных изобра­жений — так называемого «живого видео». Так назрела необходимость коррек­тировки терминологии. Видеосистема современного компьютера состоит из обя­зательной графической (формирующей изображение программно) и дополнитель­ной подсистемы обработки видеоизображений. Обе эти составляющие части обыч­но используют общий монитор, а соответствующие аппаратные средства систем­ного блока могут располагаться на раздельных картах различного функциональ­ного назначения или объединяться на одном комбинированном адаптере, кото­рый можно назвать адаптером дисплея (Display Adapter).

Графический адаптер служит для программного формирования графических и текстовых изображений и является промежуточным элементом между мони­тором и шиной компьютера. Изображение строится по программе, исполняемой центральным процессором, в чем ему могут помогать графические акселерато­ры и сопроцессоры. В BIOS имеется поддержка функций формирования тексто­вых и, графических изображений, по старинке называемая видеосервисом (BIOS Int lOh). Существует ряд классов адаптеров (MDA, CGA, EGA, VGA, SVGA...), которые будут рассмотрены ниже. В монитор адаптер посылает сигналы управ­ления яркостью лучей RGB (Red, Green, Blue — красный, зеленый и синий — базисные цвета) и синхросигналы строчной и кадровой разверток. Кроме этих сигналов, относящихся только к формированию изображения, интерфейс с мо­нитором может содержать и сигналы обмена конфигурационной информацией между монитором и компьютером. Так, например, PnP-мониторы при наличии соответствующей поддержки адаптером способны сообщать системе свои пара­метры (модель и параметры синхронизации).

Средства работы с видеоизображениями, передаваемыми в стандартах PAL, SECAM или NTSC, относятся уже к мультимедийному оборудованию. От про­граммно-управляемых графических средств они отличаются тем, что оперируют с «живым» изображением, поступающим в компьютер извне (с видеокамеры, TV-тюнера) или воспроизводимым с какого-либо носителя информации (например, CD-ROM или DVD).

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

Стандартизацией в области видеосистем занимается международная органи­зация VESA (Video Electronic Standard Association — ассоциация по стандартиза­ции в области видеоэлектроники, доступная по адресу http://www.vesa.org). Бла­годаря ее усилиям обеспечивается совместимость как на уровне аппаратных средств, так и на уровне программного обеспечения.

С самого начала появления персонального компьютера его видеосистему стре­мились строить для максимального приближения к идеалу WYSIWYG (What You See Is What You Get) — что видишь, то и имеешь, или наоборот. Поскольку под словом «имеешь» чаще всего подразумевается некоторая отпечатанная продук­ция, то имеется и идеал WYSIWYP (What You See Is What You Print) — что видишь на мониторе, то и будет напечатано. Стремление к этим идеалам, подкреп­ленное техническим прогрессом, приводит к неуклонному росту качественных показателей видеосистемы и проникновению компьютерных технологий в такие области, как, например, хранение точных (!) копий произведений искусства в электронном виде.

1. Принципы вывода изображений

Видеосистема PC ориентирована на растровый метод вывода изображения. Рас­тровый метод подразумевает, что некий рисующий инструмент, способный ос­тавлять видимый след, сканирует всю поверхность, на которую выводится изоб­ражение. Траектория движения инструмента постоянна и не зависит от выводи­мого изображения, но инструмент может рисовать, а может и не рисовать от­дельные точки траектории. Видимым изображением являются оставленные им точки. В случае видеомонитора инструментом является модулированный луч (или три луча базисных цветов), построчно сканирующий экран и вызывающий све­чение люминофора, нанесенного на внутреннюю поверхность экрана. Каждая строка растра разбивается на некоторое количество точек — пикселов (Pixel — сокращение от Picture Element — элемент изображения), засветкой каждой из которых по отдельности может управлять устройство, формирующее изображе­ние (например, графическая карта). Видеомонитор является растровым устрой­ством вывода динамически изменяемых изображений. Его луч сканирует экран с частотой, которая не должна позволять глазу видеть мерцание изображения. Матричные дисплеи, применяемые в блокнотных ПК, также относятся к растро­вым устройствам. Растровыми устройствами вывода статических изображений являются принтеры, в которых сканирование листа производится однократно (хотя возможны и многократные проходы).

Альтернатива растровым устройствам — векторные устройства вывода изоб­ражений. В этих устройствах инструмент прорисовывает только изображаемые фигуры и его траектория движения определяется выводимым изображением. Изоб­ражение состоит из графических примитивов, которыми могут быть отрезки пря­мых — векторы (откуда и название метода вывода), дуги, окружности. К вектор­ным устройствам вывода статических изображений относятся перьевые плоттеры. Существовали (а, может, где-то используются и сейчас) и векторные мониторы, однако ввиду сложности построения системы управления лучом, обеспечивающей быстрое и точное движение луча по сложной траектории, эта линия угасла. Рас­смотрим растровую систему вывода изображений, подразумевая в качестве око­нечного устройства монитор с электронно-лучевой трубкой — CRT (Catode Ray Terminal, дословно — монитор на катодно-лучевой трубке). Сканирование экрана модулированным лучом обеспечивается генераторами горизонтальной и вертикаль­ной разверток монитора. Луч может оставлять след только во время прямого хода по строке (слева направо). Строка разбивается на некоторое количество точек раз­ложения, каждая из которых может иметь состояние (яркость и цвет), не зависи­мое от других (для монитора это разбиение условно). На обратном ходе по строке луч принудительно гасится. Следующая строка прорисовывается параллельно предыдущей, но с некоторым вертикальным смещением (вниз), и так происходит ска­нирование до окончания кадра — достижения правого нижнего угла экрана. Во время обратного хода луча по вертикали, за время которого генератор горизон­тальной развертки успеет сделать несколько строчных циклов, луч также прину­дительно гасится. В следующем кадре сканирование может производиться по-раз­ному. В системах с прогрессивной (Progressive), или нечередующейся (N1 — Non­interlaced), разверткой луч идет по тем же самым строкам (рис. 1, а). В системах с чересстрочной разверткой (IL — Interlaced) луч пойдет по строкам, смещенным по вертикали на половину шага строки (рис. 1, б). Таким образом, всю поверх­ность экрана луч проходит за два цикла кадровой развертки, называемых полу­кадрами. Чересстрочная развертка позволяет почти вдвое снизить частоту гори­зонтальной (строчной) развертки, а следовательно, и темп вывода точек изобра­жения. Выгода от этого снижения будет понятна позже, а пока поясним, как опре­деляются частоты развертки.


Рисунок 1. Сканирование экрана: а – прогрессивная развертка; б – чересстрочная развертка

Как известно, глаз является инерционным органом зрения — он воспринима­ет изменение яркости или освещенности только до какой-то определенной час­тоты. Существует понятие критической частоты световых мельканий (КЧСМ), которую измеряют так: человек смотрит неподвижно на некоторый безынерционный источник света (например, светодиод), который вспыхивает и гаснет с плавно повышаемой частотой. Сначала человек воспринимает вспышки по от­дельности, с повышением частоты он видит уже только мерцание, а начиная с некоторой частоты, мерцания для него сливаются в ровный свет. Эта частота и называется критической, и у разных людей она может находиться в пределах примерно 40-60 Гц. Неподвижность взгляда и источника в нашем опыте огова­ривалась, поскольку при движении мелькающего объекта человек будет его вос­принимать как трассу прерывистых светящихся точек (стробоскопический эф­фект). Наблюдение мерцающих объектов раздражает и утомляет зрительную си­стему, поэтому частота кадров (прорисовки экрана) должна быть, по крайней мере, не ниже значения КЧСМ. Таким образом, мы получили ориентировочное значе­ние минимальной частоты кадров, равное 50 Гц (эта компромиссная частота при­меняется во многих телевизионных системах). Теперь посмотрим, что из этого следует. Вполне очевидно, что для качественного изображения экран должен иметь как можно больше точек матрицы разложения — то есть строк в кадре и точек на строке. Возьмем популярный режим 800x600 (600 строк по 800 точек). За один период прогрессивной кадровой развертки луч должен успеть прочер­тить 600 видимых строк, да еще некоторое количество невидимых строк (при­мерно 50) он прочертит на обратном ходе по кадру. Получается, что частота строк должна составить 50 Гц * (600 + 50) = 32,5 кГц (вроде и не так уж много). Этой частоте соответствует период около 30 мкс (1/32,5), из которого на прямой ход по строке остается около 25 мкс. За это время необходимо вывести 800 точек строки, так что на каждую точку отводится 25/800 = 0,03 мкс, что соответствует частоте вывода точек в 30 МГц, а это для электронных схем уже высокая часто­та. Поскольку соседние точки выводимого изображения в принципе друг с дру­гом не связаны, то полоса частот сигнала, модулирующего интенсивность луча, должна быть несколько выше этого значения (примерно на 25 %). Такую широ­кую полосу пропускания должен обеспечивать весь видеотракт: видеоусилители модуляторов лучей, сигнальные линии интерфейсного кабеля, и, наконец (вер­нее, сначала), такой широкополосный сигнал должен сформировать графичес­кий адаптер. На всех этих стадиях высокие частоты порождают технические про­блемы. Если реальная полоса пропускания в этом тракте будет уже, четкого изоб­ражения получить не удастся — переходы будут размыты. Если же частотная характеристика тракта в требуемом диапазоне будет неравномерной, появятся специфические искажения цветов или яркости около границ отображаемых объек­тов (справа от граничной линии). Понятно, что с технической точки зрения есть стимулы снижать требуемую верхнюю границу полосы частот видеотракта. При чересстрочной развертке за каждый полукадр сканируется только половина строк разложения (четные в одном полукадре и нечетные в другом), следовательно, строчная частота уменьшается, а длительность прохода видимой части строки увеличивается примерно вдвое. Таким образом, при заданных условиях (разре­шении экрана и ограничении минимальной кадровой частоты) чересстрочная развертка позволяет снизить требуемую полосу пропускания вдвое.

Как видно из вышеприведенных выкладок, частотные параметры видеосисте­мы определяются, исходя из желаемой частоты кадров, разрешения экрана и ре­жима развертки. Заботясь о зрении пользователя, частоту кадров стремятся повы­шать. При низкой частоте экран начинает мерцать, что особо заметно на больших белых полях изображения (в полном смысле слова яркий тому пример — белый фон в приложениях Windows). Разрешение экрана стремятся увеличить — чем оно выше, тем больше информации можно уместить на экране. Поскольку размер эк­рана постоянно увеличивается — монитор на 19" является уже нормой для многих видов деятельности, — потребность в разрешении, скажем, 1600 х 1200 вполне реальна. Но по нашим выкладкам для этого уже требуется полоса 120 МГц (а кадровая частота 50 Гц — это отнюдь не идеал). Применение чересстрочной развертки годится лишь как вынужденная мера, поскольку имеет свои специфи­ческие неприятные «видеоэфекты»: если выводится тонкая (в одну строку то­чек) горизонтальная линия, она будет заметно мерцать. Это и понятно, ведь про­рисовывается она только в одном из полукадров, следовательно, с половинной кадровой частотой. Если изображение потолще (один и тот же элемент имеет точки в соседних строках), его мерцание будет почти незаметным. Итак, вожде­ленные цели ясны: частота кадров — выше, разрешение (по вертикали и гори­зонтали) — больше, развертка — не чересстрочная (Non Interlaced). Забегая немного вперед, заметим, что чем выше частота развертки, тем ниже производи­тельность графической системы при построении изображений. С точки зрения пользователя, привлекательность чересстрочного режима развертки заключает­ся в цене устройств — поскольку для прогрессивной развертки требуется более высокое качество компонентов всего видеотракта, построчная развертка с высо­кой частотой кадров при режимах высокого разрешения — дорогое удовольствие. Но для профессиональной работы с текстом, графического дизайна и других ви­дов деятельности ухудшение зрения обойдется дороже. Чересстрочная разверт­ка широко применяется в телевидении, где видеосигнал приходится «пропихи­вать» через радиоканал, с шириной полосы которого всегда имеются проблемы. Современные мониторы и графические адаптеры, применяемые в PC, использу­ют оба режима развертки с различными значениями частоты кадров. Естествен­но, что работать они должны в согласованных режимах.

Рассмотрев работу конечного устройства (монитора), обсудим способы формирования изображения в графическом адаптере. Итак, у нас имеется матрица точек экрана, образованная горизонтальными строками растра (номер строки — вертикальная координата матрицы) и точками разложения строки (номер точки в строке — горизонтальная координата матрицы). Эта матрица сканируется по­строчным или чересстрочным образом, и во время прямого хода луча по види­мым строкам графический адаптер должен формировать сигналы управления яркостью базисных цветов монитора (или одного сигнала яркости в монохром­ном варианте). За это время последовательно (и синхронно с ходом луча) долж­на выводиться информация о яркости и цвете всех точек данной строки. Синх­ронизация обеспечивается формированием горизонтальных и вертикальных син­хроимпульсов. Таким образом, графический адаптер является задающим устрой­ством, а монитор со своими генераторами разверток должен вписаться в задан­ные параметры синхронизации.

Существуют два основных режима вывода информации — графический и сим­вольный (текстовый). Хотя исторически первые видеосистемы работали в сим­вольном режиме, начать объяснение работы удобнее с графического.

2. Графический режим

В графическом режиме имеется возможность индивидуального управления све­чением каждой точки экрана монитора независимо от состояния остальных. Этот режим обозначают как Gr (Graphics) или АРА (All Points Addressable — все точ­ки адресуемы). В графическом режиме каждой точке экрана — пикселу — соот­ветствует ячейка специальной памяти, которая сканируется схемами адаптера синхронно с движением луча монитора. Точнее было бы сказать наоборот — фи­зически движение луча вторично, так как монитор можно и не подключать, а графический адаптер все равно будет сканировать память, но логически вся конструкция строится, исходя именно из поведения монитора. Эта постоянно циклически сканируемая (с кадровой частотой) память называется видеопамя­тью (Video Memory), или VRAM (Video RAM). Последнее сокращение можно спутать с названием специализированных микросхем динамической памяти, оптимизированной именно под данное применение. Процесс постоянного сканиро­вания видеопамяти называется регенерацией изображения, и, к счастью, этого же сканирования оказывается достаточно для регенерации информации микросхе­мам динамической памяти, применяемой в этом узле. Для программно-управля­емого построения изображений к видеопамяти также должен обеспечиваться до­ступ со стороны системной магистрали компьютера, причем как по записи, так и по чтению. Количество бит видеопамяти, отводимое на каждый пиксел, опреде­ляет возможное число состояний пиксела — цветов, градаций яркости или иных атрибутов (например, мерцание). Так, при одном бите на пиксел возможны лишь два состояния — светится или не светится. Два бита на пиксел доставляли нема­ло удовольствия любителям цветных игрушек даже на адаптерах CGA — можно было иметь одновременно четыре цвета на экране. Четыре бита на пиксел (16 цве­тов), обеспечиваемые адаптером EGA, были достаточны для многих графичес­ких приложений (например, графики в САПРах). Пределом мечтаний в свое вре­мя было 256 цветов (8 бит на пиксел) адаптера VGA — цветная фотография розы из комплекта графического редактора Paintbrush на экране монитора казалась великолепной. Сейчас остановились на режимах High Color (16 бит; 65 536 цветов), и True Color — «истинный цвет» — (24 бит; 16,7 миллиона цветов), реализуемых современными адап­терами и мониторами SVGA. 24 бита распределяются между базисными цве­тами R:G:B поровну (5:5:5 и 8:8:8), 16 бит — с учетом особенностей цветовосприятия неравномерно (5:6:5 или 6:6:4). Логически видеопамять может быть организована по-разному, в зависимости от количества бит на пиксел.

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

В адаптере EGA количество бит на пиксел увеличили до четырех и видеопа­мять разбили на четыре области-слоя, называемых также и цветовыми плоско­стями (рис. 8.3). В каждом слое используется линейная организация, где каж­дый байт содержит по одному биту восьми соседних пикселов. Слои сканируют­ся (считываются в сдвиговые регистры) одновременно, в результате параллель­но формируются по четыре бита на каждый пиксел. Такое решение позволяет снизить частоту считывания ячеек памяти — одна операция чтения производит­ся за время прохода лучом восьми пикселов. Забота о снижении частоты считы­вания понятна — быстродействие памяти ограничено, а ведь в эту память нужно информацию когда-то и записывать. Ячейки слоев, отвечающие за одни и те же пикселы, имеют совпадающий адрес. Это позволяет производить параллельную запись информации сразу в несколько цветовых плоскостей (запись для каждо­го слоя разрешается индивидуально), что также экономит время. Считывание со стороны магистрали, конечно, возможно только послойное.


Рисунок 2. Линейное отображение пикселов в видеопамяти: а – 1 бит на пиксел;

б – 2 бита на пиксел


Рисунок 3. Многослойное отображение пикселов в видеопамяти

В режимах 8, 16 и 24 бит на пиксел также используется линейная организа­ция, но каждый байт (слово или три байта) отвечает уже за цвет одного пиксела. Многоплоскостная организация здесь уже была бы неэффективной.

Вышеописанные варианты организации видеопамяти — и линейный, и мно­гоплоскостной — представляют собой отображение матрицы пикселов экрана на биты видеопамяти — Bit Mapping. Растровый формат хранения изображений, при котором биты так или иначе отображают пикселы, называется битовой картой (BitMap). С точки зрения плотности хранения графической информации этот формат не самый эффективный, но в видеопамяти растрового дисплея вслед­ствие высокого темпа вывода информации при регенерации изображения иной формат неприемлем. В векторных дисплеях, о которых мы упоминали, в памяти хранились только векторные описатели фигур, что для контурных изображений обычно оказывается компактнее.

Объем видеопамяти (в битах), требуемый для хранения образа экрана, опре­деляется как произведение количества пикселов в строке на количество строк и на количество бит на пиксел. Так, для режима HGC 720 х 350 с одним битом на точку он составляет 252 000 бит или около 31 Кбайт, а 800 х 600 х 256 цветов — 480 000 бит или около 469 Кбайт. Если физический объем видеопамяти превы­шает необходимый для отображения матрицы всего экрана, видеопамять можно разбить на страницы. Страница — это область видеопамяти, в которой умещает­ся образ целого экрана. При многостраничной организации видеопамяти только одна из них может быть активной — отображаемой на экран. Этим страницы принципиально отличаются от слоев, которые отображаются одновременно.

Формирование битовой карты изображения в видеопамяти графического адап­тера производится под управлением программы, исполняемой центральным про­цессором. Сама по себе задача формирования процессору вполне по силам, но при ее решении требуется пересылка большого объема информации в видеопа­мять, а для многих построений еще и чтение видеопамяти со стороны процессо­ра. Видеопамять большую часть времени занята выдачей информации схемам регенерации изображения в довольно напряженном темпе. От этого процесса она свободна только во время обратного хода луча по строке и кадру, но это мень­шая часть времени. Если обращение к активной странице видеопамяти со сторо­ны процессора происходит во время прямого хода и быстродействия схем адап­тера недостаточно для того, чтобы это обращение вписалось между соседними выборками процесса регенерации, на экране появится штрих от несчитанной ин­формации пикселов. Если такое обращение происходит часто, на экране появля­ется «снег», что неприятно. Дожидаться обратного хода по строке или кадру на­кладно: строчный период коротких (несколько микросекунд) интервалов обрат­ного хода имеет порядок 25 мкс, а кадровый период длинного (миллисекунды) обратного хода имеет порядок 20 мс, в то время как цикл обращения процессора к обычной памяти не превышает сотен (у современных компьютеров — десят­ков) наносекунд. Так что канал связи процессора с видеопамятью представляет собой узкое горлышко, через которое пытаются протолкнуть немалый поток дан­ных, причем чем более высокое разрешение экрана и чем больше цветов (бит на пиксел), тем этот поток должен быть интенсивнее. Конечно, при выводе стати­ческой картинки это вроде и не страшно, но «оживить» изображение оказывается проблематично. Выходов из этого затруднения имеется несколько. Во-пер­вых, повышают быстродействие видеопамяти. Во-вторых, расширяют разрядность шин графического адаптера, причем как внутренней (шины видеопамяти), так и интерфейсной, и применяют высокопроизводительные шины (раньше локаль­ную VLB, теперь PCI или порт AGP). Расширение разрядности позволяет за один цикл обращения передать большее количество бит данных — повысить про­изводительность. Однако если у адаптера, к примеру VGA, разрядность интер­фейсной шины — 16 бит, а установлен минимальный объем памяти, при кото­ром используется только 8 бит, то эффективная разрядность интерфейса окажется всего 8 бит. То же относится и к адаптерам с 32-разрядной шиной. Этим объяс­няется не совсем очевидный факт, что производительность графического адапте­ра зависит от объема установленной видеопамяти. В-третьих, повысить скорость видеопостроений можно кэшированием видеопамяти или затенением видеопа­мяти, что, по сути, почти одно и то же. В этом случае при записи в область видеопамяти данные будут записаны как в видеопамять, так и в ОЗУ (или даже в кэш), а при считывании из этой области обращение будет только к быстродей­ствующему ОЗУ. И в-четвертых, можно принципиально сократить объем инфор­мации, передаваемой графическому адаптеру, но для этого графический адаптер должен быть наделен «интеллектом». В современных компьютерах используют­ся все эти решения.

Под интеллектом графического адаптера подразумевается наличие на его плате собственного процессора, способного формировать растровое изображение в видеопамяти (bitmap) по командам, полученным от центрального процессора. Команды ориентируются на наиболее часто используемые методы описания изоб­ражений, которые строятся из отдельных графических элементов более высоко­го уровня, чем пикселы.

Команды рисования (Drawing Commands) обеспечивают построение графи­ческих примитивов — точки, отрезка прямой, прямоугольника, дуги, эллипса. Примитивы такого типа в командах описываются в векторном виде, что гораздо компактнее, чем их растровый образ. Таким образом, удается значительно сокра­тить объем передаваемой графической информации за счет применения более эффективного способа описания изображений. К командам рисования относит­ся и заливка замкнутого контура, заданного в растровом виде, некоторым цветом или узором (pattern). Она ускоряется особенно эффективно: при программной реализации процессор должен просмотреть содержимое видеопамяти вокруг за­данной точки, двигаясь по всем направлениям до обнаружения границы контура и изменяя цвет пикселов на своем пути. При этом требуется чтение большого объема данных видеопамяти, их анализ и запись модифицированных данных об­ратно в видеопамять. Процессор интеллектуального адаптера способен выпол­нить эту операцию быстро и без выхода с этим потоком данных на внешнюю магистраль.

Копирование блока с одного места экрана на другое применяется для «про­крутки» изображения экрана в разных направлениях. Эта команда сводится к пересылке блока бит — BitBlT (Bit Block Transferring), и эта операция интеллек­туальным адаптером может быть сильно ускорена.

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

Аппаратная поддержка окон (Hardware Windowing) упрощает и ускоряет ра­боту с экраном в многозадачных (многооконных) системах. На традиционном графическом адаптере при наличии нескольких, возможно, перекрывающих друг друга окон программе приходится отслеживать координаты обрабатываемых то­чек с тем, чтобы не выйти за пределы своего окна. Аппаратная поддержка окон упрощает вывод изображений: каждой задаче выделяется свое окно — область видеопамяти требуемого размера, в котором она работает монопольно. Взаимное расположение окон сообщается интеллектуальному адаптеру, и он для регенера­ции изображения синхронно с движением луча по растру сканирует видеопа­мять не линейно, а перескакивая с области памяти одного окна на другое.

Если объем видеопамяти превышает необходимый для данного формата эк­рана и глубины цветов, то в ней можно строить изображение, превышающее по размеру отображаемую часть. Интеллектуальному адаптеру можно поручить па­норамирование (Panning) — отображение заданной области. При этом горизон­тальная и вертикальная прокрутка изображения не потребует операций блочных пересылок (конечно, в пределах сформированного большого изображения) — для перемещения достаточно лишь изменить указатель положения.

Вышеописанные функции интеллектуального адаптера относятся к двумер­ной графике (2D). Современные графические адаптеры берут на себя и многие функции построения трехмерных изображений, о чем более подробно рассказа­но в главе 4. Трехмерное изображение должно состоять из ряда поверхностей различной формы. Эти поверхности «собираются» из отдельных элементов-по­лигонов, чаще треугольников, каждый из которых имеет трехмерные координа­ты вершин и описание поверхности (цвет, узор). Перемещение объектов (или наблюдателя) приводит к необходимости пересчета всех координат. Для созда­ния реалистичных изображений учитывается перспектива — пространственная и атмосферная (дымка или туман), освещенность поверхностей и отражение света от них, прозрачность и многие другие факторы.

Ускорение построений в интеллектуальном адаптере обеспечивается несколь­кими факторами. Во-первых, это сокращение объема передачи по магистрали. Во-вторых, во время работы процессора адаптера центральный процессор свобо­ден, что ускоряет работу программ даже в однозадачном режиме. В-третьих, про­цессор адаптера, в отличие от процессора с самой сложной в мире системой ко­манд — представителя семейства х86, ориентирован на выполнение меньшего количества инструкций, а потому способен выполнять их гораздо быстрее цент­рального. И, в-четвертых, скорость обмена данных внутри адаптера может повы­шаться за счет лучшего согласования обращений к видеопамяти для операций построения с процессом регенерации изображения, а также за счет расширения разрядности внутренней шины данных адаптера. В графических адаптерах кон­ца 90-х годов широко применялась двухпортовая видеопамять VRAM и WRAM с разрядностью внутренней шины 64 бит (при 32-битной шине внешнего интерфейса). Современные адаптеры с SD-акселераторами (самые критичные к про­изводительности памяти) строятся на памяти SGRAM (SDRAM) со 128-разряд­ной шиной, а в самых мощных применяется память с удвоенной частотой передачи DDR SDRAM. Правда, и здесь полная разрядность шины (но уже внутренней) может и не использоваться при малом объеме установленной ви­деопамяти. Разрядность шины пока дальше не увеличивают, но встречаются адап­теры и с двойной внутренней шиной, способной работать в полнодуплексном режиме.

По отношению к центральному процессору и оперативной памяти компьюте­ра различают графические сопроцессоры и акселераторы. Графический сопроцес­сор представляет собой специализированный процессор с соответствующим ап­паратным окружением, который подключается к шине компьютера и имеет дос­туп к его оперативной памяти. В процессе своей работы сопроцессор пользуется оперативной памятью, конкурируя с центральным по доступу и к памяти, и к шине. Графический акселератор работает автономно и при решении своей задачи со своим огромным объемом данных может и не выходить на системную шину. Акселераторы являются традиционной составляющей частью практичес­ки всех современных графических адаптеров. Акселераторы двумерных опера­ций (2D-accelerators), необходимых для реализации графического интерфейса пользователя GUI (Graphic User Interface), часто называют Windows-акселерато­рами, поскольку их команды обычно ориентированы на функции этой популяр­ной операционной системы. Более сложные акселераторы выполняют и трех­мерные построения, их называют SD-акселераторами.

Для построения сложных трехмерных изображений графическому акселера­тору будет явно тесно в ограниченном объеме видеопамяти. Для обеспечения доступа к основной памяти компьютера он должен иметь возможность управле­ния шиной (bus mastering). Специально для мощных графических адаптеров в 1996 году появился новый канал связи с памятью — AGP (Accelerated Graphic Port). Обеспечив высокую пропускную способ­ность порта, разработчики AGP предложили технологию DIME (Direct Memory Execute). По этой технологии графический акселератор является мастером шины AGP и может пользоваться основной памятью компьютера для своих нужд при трехмерных построениях. Например, в основной памяти могут храниться тек­стуры, которые акселератор накладывает на трехмерные поверхности. При этом снимается ограничение на размер описания текстур, которые без AGP приходит­ся держать в ограниченном объеме видеопамяти. На дешевое решение проблемы «тесноты» нацелена и архитектура однородной памяти UMA, которая может быть реализована с помощью AGP. Однако AGP позволяет сохранить и локальную память на графическом адаптере (видеобуфер) и расширение доступной памяти не отзывается снижением производительности.

Итак, мы рассмотрели варианты организации видеопамяти и кратко обсуди­ли способы формирования в ней битовой карты изображения. При регенерации на выходе видеопамяти (или сдвиговых регистров) имеется некоторое количе­ство бит, отвечающих за раскраску текущего выводимого пиксела. Количеством этих бит N определяется максимальное число цветов, присутствующих на экране С = 2N. Однако трактовать эти биты можно по-разному. При одном бите на пиксел и монохромном мониторе трактовка в принципе однозначна (светится — не светится), хотя были мониторы, допускающие реверс изображения. При двух битах на точку возможности цветного монитора, у которого можно управлять тремя цветами, используются ограниченно: монитор обеспечивает по крайней мере 8 цветов, а адаптер может выдать только 4. Для смягчения этого дисбалан­са применили так называемую технику палитр (Palette). Ее суть заключается в том, что биты одного пиксела, поступающие с видеопамяти, перед выходом в интерфейс монитора проходят через некоторый управляемый преобразователь. Выход этого преобразователя имеет разрядность, поддерживаемую интерфейсом монитора, и биты видеопамяти задают номер цвета в выбранной палитре цветов. Переключив палитру (или перепрограммировав ее набор цветов), можно полу­чить другую гамму цветов на экране, но одновременно будет присутствовать не более 2м цветов.

3. Текстовый режим

В символьном, или текстовом, режиме формирование изображения происходит несколько иначе. Если в графическом режиме (АРА) каждой точке экрана соот­ветствует своя ячейка видеопамяти, то в текстовом режиме ячейка видеопамяти хранит информацию о символе, занимающем на экране знакоместо определенно­го формата. Знакоместо представляет собой матрицу точек, в которой может быть отображен один из символов определенного набора. Здесь умышленно применя­ется слово «точка», а не «пиксел», поскольку пиксел является сознательно ис­пользуемым элементом изображения, в то время как точки разложения символа, в общем случае, программиста не интересуют. В ячейке видеопамяти хранится код символа, определяющий его индекс в таблице символов, и атрибуты симво­ла, определяющие вид его отображения. К атрибутам относится цвет фона, цвет символа, инверсия, мигание и подчеркивание символа. Поскольку изначально в дисплеях использовали только алфавитно-цифровые символы, такой режим ра­боты иногда сокращенно называют AN (Alpha-Numerical — алфавитно-цифровой), но чаще — TXT (text — текстовый), что корректнее: символы псевдографики, ко­торые-широко применяются для оформления текстовой информации, к алфа­витно-цифровым не отнесешь.

В текстовом режиме экран организуется в виде матрицы знакомест, образо­ванной горизонтальными линиями LIN (Line) и вертикальными колонками COL (Column). Этой матрице соответствует аналогичным образом организованная видеопамять. Адаптер, работающий в текстовом режиме, имеет дополнительный блок — знакогенератор. Во время сканирования экрана выборка данных из оче­редной ячейки видеопамяти происходит при подходе к соответствующему зна­коместу (рис. 4), причем одна и та же ячейка видеопамяти будет выбираться при проходе по всем строкам растра, образующим линию знакомест. Считанные данные попадают в знакогенератор, который вырабатывает построчную разверт­ку соответствующего символа — его изображение на экране. Знакогенератор пред­ставляет собой запоминающее устройство — ОЗУ или ПЗУ. На его старшие ад­ресные входы поступает код текущего символа из видеопамяти, а на младшие — номер текущей строки в отображаемой линии знакомест. Выходные данные со­держат побитную развертку текущей строки разложения символа (в графическом режиме эти данные поступали из видеопамяти). Необходимый объем памя­ти знакогенератора определяется форматом знакоместа и количеством отобра­жаемых символов. Самый «скромный» знакогенератор имеет формат знакомес­та 8 х 8 точек, причем для алфавитно-цифровых символов туда же входят и меж­символьные зазоры, необходимые для читаемости текста. Поскольку в PC при­нято 8-битное кодирование символов, для такого знакогенератора требуется 8 х 28 = 2К 8-разрядных слов. Лучшую читаемость имеют матрицы 9 х 14 и 9 х 16 символов. Если знакогенератор выполнен на микросхеме ПЗУ, то набор отобра­жаемых символов оказывается жестко фиксированным (в лучшем случае пере­ключаемым, для чего может использоваться несколько выбираемых банков па­мяти знакогенератора). Для знакогенераторов на ПЗУ изменение таблицы сим­волов (например, русификация) становится сложным делом. Если микросхема ПЗУ установлена в сокет, ее несложно перепрограммировать или просто заме­нить. Запаянная микросхема знакогенератора дополнительно осложняет эту за­дачу, а размещение ПЗУ внутри специализированной БИС, что случалось в ма­логабаритных ПК, делает ее практически невыполнимой. Когда знакогенератор выполняют на микросхеме ОЗУ, естественно, обеспечивают и режим, в котором его содержимое можно по крайней мере программно загрузить. Адаптеры с загру­жаемым знакогенератором русифицируются чисто программными средствами.

Как уже говорилось, каждому знакоместу в видеопамяти, кроме кода симво­ла, соответствует еще и поле атрибутов, обычно имеющее размер 1 байт. Этого вполне достаточно, чтобы задать цвет и интенсивность воспроизведения симво­ла и его фона. Для монохромных мониторов, допускающих всего три градации яркости, атрибуты можно трактовать иначе, формируя такие эффекты, как под­черкивание, инверсия, повышенная интенсивность и мигание символов в раз­ных сочетаниях.


Рисунок 4. Формирование изображения в текстовом режиме

Текстовый адаптер также имеет аппаратные средства управления курсором. Знакоместо, на которое указывают регистры координат курсора, оформляется особым образом. Обычно его выделяют мигающей полоской, размер и положение которой относительно знакоместа программируется. Подчеркнем, что к та­кому выделению байт атрибутов не имеет отношения, хотя возможен неудачный выбор атрибутов (сочетание цветов), когда курсор перестает быть различимым. Несмотря на большее количество узлов текстового адаптера по сравнению с чисто графическим, его цена оказывалась гораздо ниже. Дело в том, что для тек­стового режима с форматом 25 строк по 80 символов (максимального для суще­ствующих чисто текстовых адаптеров) требуется всего 2 Кбайт видеопамяти для символов и 2 Кбайт для их атрибутов. При этом символы могут иметь хорошо читаемую матрицу разложения 9 х 14 и по 8 бит для атрибутов, определяющих цветовое оформление знакоместа. Частота считывания видеопамяти для регене­рации изображения невысока: за время прямого хода по строке должно быть считано всего 80 слов. Графический режим (720 х 350) для отображения такой же матрицы символов потребует уже около 32 Кбайт видеопамяти в монохром­ном варианте, а в 16-цветном уже 128 Кбайт. Конечно, в настоящее время эко­номия видеопамяти в таких объемах уже не играет роли в цене адаптера, но не следует забывать и о том, что при выводе изображения эту память нужно запол­нять. Поскольку в текстовом режиме в адаптер передаются только коды симво­лов, заполнение всего экрана займет в десятки раз меньше времени, чем постро­ение того же изображения в графическом режиме. Программный код вывода сим­волов в текстовом режиме проще и компактнее, чем при программном формиро­вании его растрового изображения. По этим причинам все графические адапте­ры имеют знакогенератор, дающий возможность работы и в текстовом режиме, а при переходе в графический режим знакогенератор отключается. Интеллекту­альные адаптеры позволяют выводить символы (формировать их растровое изоб­ражение с заданным форматом знакоместа) и в графическом режиме. При этом адаптер получает только команду с указанием координат отображаемых симво­лов и сам поток кодов символов, после чего быстро строит их изображение, не отвлекая центральный процессор.

4. Трехмерная графика

Потребности работы с трехмерными изображениями, или 3D-графикой (SDimen-sions — 3 измерения), имеются в широком спектре приложений — от игр, кото­рыми увлекается масса пользователей, до систем автоматического проектирования, используемых в архитектуре, машиностроении и других областях. Конечно же, компьютер оперирует не самими трехмерными объектами, а их математичес­кими описаниями. Трехмерное приложение оперирует объектами, описанными в некоторой глобальной системе координат (Global или World Coordinate System). Чаще всего здесь используется ортогональная, она же декартова (Cartesian), си­стема координат, в которой положение каждой точки задается ее расстоянием от начала координат по трем взаимно перпендикулярным осям X, Y и Z. В некото­рых случаях используется и сферическая система координат, в которой положе­ние точки задается удалением от центра и двумя углами направления. В этом «мире» находятся все объекты, которые создает и учитывает приложение, и они имеют определенное взаимное расположение. Пользователю эти объекты могут быть продемонстрированы лишь с помощью графических устройств вывода, из которых наибольший интерес пока представляет собой дисплей. Однако он, как и большинство устройств визуализации, имеет лишь плоский (двумерный) эк­ран, с помощью которого необходимо создать иллюзию трехмерного изображе­ния. Здесь упомянем и о существовании стереоскопических систем отображе­ния, дающих больший эффект присутствия наблюдателя в среде изображаемых объектов. Однако и в них тем или иным способом для каждого глаза формирует­ся свое двумерное изображение, так что эту иллюзию приходится создавать дваж­ды с двух точек зрения, несколько смещенных относительно друг друга. Дей­ствительно трехмерные устройства вывода уже существуют, но пока что они спо­собны «выводить» лишь статические объекты. Здесь имеется в виду устройство Model Maker (фирма SPI), которое с высокой точностью «выращивает» из плас­тмассы объекты сложной формы, описание которых поступает из трехмерного приложения САПР.

Пока что сосредоточимся на выводе трехмерного изображения на экран гра­фического дисплея. Как известно, в конечном счете на монитор выводится рас­тровое изображение, сформированное в видеопамяти. На экране мы видим мат­рицу пикселов размерностью 800 х 600, 1024 х 768, 1280 х 1024 и больше. Каж­дому пикселу соответствует ячейка видеопамяти, разрядность которой опреде­ляет возможности цветопередачи. Наибольший интерес для трехмерной графи­ки представляют режимы, в которых цветом каждого пиксела непосредственно управляют 15—16 бит (High Color) или 24 бита (True Color) ячейки видеопамя­ти. Режимы с индексным определением цвета (8 бит ячейки видеопамяти выби­рают цвет в соответствии с программированием палитр) для реалистичного изоб­ражения трехмерных объектов малопригодны.

4.1. Графический конвейер

Графический конвейер (Graphic Pipeline) — это некоторое программно-аппарат­ное средство, которое преобразует описание объектов в «мире» приложения в матрицу ячеек видеопамяти растрового дисплея. Его задача — создать иллюзию, о которой говорили выше.

В глобальных координатах приложение создает объекты, состоящие из трех­мерных примитивов. В этом же пространстве располагаются источники освеще­ния, а также определяется точка зрения и направление взгляда наблюдателя. Естественно, что наблюдателю видна только часть объектов: любое тело имеет как видимую (обращенную к наблюдателю), так и невидимую (обратную) сторо­ну. Кроме того, тела могут перекрывать друг друга, полностью или частично. Взаимное расположение объектов относительно друг друга и их видимость за­фиксированным наблюдателем обрабатывается на первой стадии графического конвейера, называемой трансформацией (Transformation). На этой стадии вы­полняются вращения, перемещения и масштабирование объектов, а затем и пре­образование из глобального пространства в пространство наблюдения (world-to-viewspace transform), а из него и преобразование в «окно» наблюдения (viewspace-to-window transform), включая и проецирование с учетом перспективы. Попутно с преобразованием из глобального пространства в пространство наблюдения (до него или после) выполняется удаление невидимых поверхностей, что значительно сокращает объем информации, участвующей в дальнейшей обработке. На сле­дующей стадии конвейера (Lighting) определяется освещенность (и цвет) каждои точки проекции объектов, обусловленной установленными источниками ос­вещения и свойствами поверхностей объектов. И, наконец, на стадии растериза­ции (Rasterization) формируется растровый образ в видеопамяти. На этой ста­дии на изображения поверхностей наносятся текстуры и выполняется интерпо­ляция интенсивности цвета точек, улучшающая восприятие сформированного изображения. Весь процесс создания растрового изображения трехмерных объек­тов называется рендерингом (rendering).

Теперь вспомним о том, что трехмерное изображение хотелось бы «оживить» движением, для чего изображения объектов в новом положении должны схо­дить с графического конвейера со скоростью хотя бы 15 кадров в секунду (со­временные акселераторы могут строить и 100 кадров в секунду). Насколько слож­на эта задача для обычного процессора семейства х86, можно прикинуть по та­кому занятному примеру: каза­лось бы безобидный хранитель экрана из комплекта Windows NT 4.0, который «размахивает» трехмерным изображением флага известной компании, при чисто программной реализации полностью загружал один из двух процессоров Pentium Рго-166 сервера под управлением ОС Windows NT-Server. Это легко увидеть с помощью монитора производительности (Performance Monitor), если на компь­ютер-сервер установить «простую» графическую карту (а зачем, казалось бы, сер­веру мощная графическая карта?). А если взять более сложный хранитель экра­на («ходилка» по трехмерному лабиринту), то четырехпроцессорный (Р6-200) сервер Proliant 500 не способен создать иллюзию хождения по лабиринту — кир­пичи на стенах вырисовываются слишком медленно. В то же время сравнитель­но маломощный компьютер Pentium-166, у которого имеется графическая карта с SD-акселератором, позволяет «бегать» по этому лабиринту довольно быстро. Это колоссальное ускорение построений обеспечивается применением в графи­ческих картах встроенного специализированного процессора, решающего значи­тельную часть задач графического конвейера. О том, что происходит при трех­мерных графических построениях, и пойдет речь дальше.

Графическое приложение создает модель, в которой объекты задаются как со­вокупность тел и поверхностей. Тела могут иметь разнообразную форму, описан­ную каким-либо математическим способом. Проще всего иметь дело с много­гранниками, у которых каждая грань представляет собой часть плоскости, огра­ниченной многоугольником (полигоном). Описание такого тела относительно несложно — оно состоит из упорядоченного списка вершин. Сложнее дело об­стоит с объектами, имеющими не плоские (криволинейные) поверхности. В этом случае в модели поверхности описываются сложными нелинейными уравнения­ми, однако для дальнейших построений их использование из-за громадных объе­мов вычислений проблематично. Для упрощения задачи криволинейные поверх­ности аппроксимируются многоугольниками, и, конечно же, чем мельче много­угольники, тем ближе аппроксимация к модели, но и тем более громоздким ста­новится описание объекта, а следовательно, и больше времени требуется на его обработку. Представление криволинейной поверхности совокупностью плоских граней-многоугольников называется тесселяцией (Tesselation). Слово «tessera», от которого произошел этот термин, означает кубики из смальты, из которых художники собирают мозаику. Как и смальтовые кубики, многоугольники-грани должны быть простыми (не пересекающими себя на манер цифры 8), плоскими и выпуклыми — эти ограничения заметно упрощают их дальнейшую обработку. Кроме формы объектов (описания их поверхностей), важное значение имеют их оптические свойства. Проще всего дело обстоит с непрозрачными объекта­ми — все другие объекты, перекрытые ими для взгляда наблюдателя, просто не­видимы. Эти объекты будут перекрывать и лучи от источников освещения, уста­новленных в модели, на пути которых они встречаются. Сложнее дело обстоит с прозрачными и просвечиваемыми объектами. Прозрачность (transparency) объек­та позволяет видеть и объекты, расположенные за ним, а просвечиваемость (trans-lucency) позволяет проходить через него лучам света от источников. Поверх­ность имеет некоторый цвет, а также характеризуется степенью отражения (она может быть глянцевой или матовой). Для того чтобы получить реалистичное отображение модели, приходится отслеживать прохождение лучей от установ­ленных источников освещения, достигающих глаза воображаемого наблюдателя как при отражении от поверхностей, так и при преломлении при прохождении через прозрачные и просвечиваемые объекты. При этом должны учитываться эффекты перспективы, как оптической (искажение формы), так и атмосферной (имитация дымки или тумана).

4.2. Рендеринг

Не претендуя на полноту объяснения всех хитростей технологии создания трех­мерных изображений, обсудим некоторые ее основные моменты и поясним свя­занные с ними термины.

Вполне понятно, что рендеринг модели может производиться только поэле­ментно. Результатом тесселяции является набор многоугольников (обычно че­тырехугольников или треугольников, с которыми манипулировать проще), апп­роксимирующих поверхности объектов. Плоское растровое представление долж­но формироваться с учетом взаимного расположения элементов (их поверхнос­тей) — те из них, что ближе к наблюдателю, естественно, будут перекрывать изоб­ражение более удаленных элементов. Многоугольники, оставшиеся после удале­ния невидимых поверхностей, сортируются по глубине: реалистичную картину удобнее получать, начиная обработку с наиболее удаленных элементов. Для уче­та взаимного расположения применяют так называемый Z-буфер, названный по имени координаты третьего измерения (X и Y — координаты в плоскости экра­на). Этот буфер представляет собой матрицу ячеек памяти, каждая из которых соответствует ячейке видеопамяти, хранящей цвет одного пиксела. В процессе рендеринга для очередного элемента формируется его растровое изображение (bitmap) и для каждого пиксела этого фрагмента вычисляется параметр глуби­ны Z (координатой его можно назвать лишь условно). В видеопамять этот фраг­мент поступает с учетом результата попикселного сравнения информации из Z-буфера, с его собственными значениями. Если глубина Z данного пиксела фраг­мента оказывается меньше величины Z той ячейки видеопамяти, куда должен попасть этот фрагмент, это означает, что выводимый элемент оказался ближе к наблюдателю, чем ранее обработанные, отображение которых уже находится в видеопамяти. В этом случае выполняется модификация пиксела видеопамяти, а в ячейку Z-буфера видеопамяти помещается новая величина, взятая от данного фрагмента (что подразумевается под модификацией, поясним позже). Если же результат сравнения иной, то текущий пиксел фрагмента оказывается перекры­тым прежде сформированными элементами, и его параметр глубины в Z-буфер не попадет. Однако цвет пиксела видеопамяти, возможно, все равно придется модифицировать: ведь перекрывающий элемент может оказаться прозрачным. Итак, Z-буфер позволяет определить взаимное расположение текущего и ранее сформированного пиксела, которое учитывается при формировании нового зна­чения пиксела в видеопамяти. От разрядности Z-буфера зависит разрешающая способность графического конвейера по глубине. При малой разрядности (на­пример, 8 бит) для близко расположенных элементов рассчитанные значения Z могут совпасть, в результате картина перекрытий исказится. Большая разряд­ность буфера требует большого объема памяти, доступного графическому про­цессору. По нынешним меркам минимальная разрядность Z-буфера — 16 бит, профессиональные графические системы используют 32-битный Z-буфер.

Теперь обсудим модификацию цвета пиксела видеопамяти. В общем случае у нас есть два значения цвета — С1 для того образа, который «ближе», С2 для того, что «дальше» (по Z-параметру). Результирующий цвет определяется обо­ими значениями и свойством «прозрачности» ближнего. Для получения нового значения цвета обычно используют так называемый альфа-блендиш (Alpha-blending). Мерой прозрачности объекта является коэффициент а (0 < а < 1), единица соответствует полной непрозрачности. Результирующий цвет пиксела вычисляется по формуле С = С1ха+С2х(1-а), причем за этой формулой сто­ит в три раза больше операций, поскольку цвет определяется тремя значениями базисных цветов (R, G и В). Ну и нетрудно догадаться, что для реализации дан­ного метода требуется и свой альфа-буфер с количеством ячеек, по меньшей мере равным числу пикселов на экране. Часто 8-битный коэффициент прозрачности для каждого пиксела хранят прямо в видеопамяти: при 24-битном кодировании цвета от двойного слова (32 бит), выделяемого на пиксел для упрощения адреса­ции и ускорения обмена, как раз остается 8 бит. Такой формат видеопамяти на­зывают RGBA.

Объекты, входящие в модель и представляющие их элементы (тессели), не обязательно однородны по цвету: на их поверхности могут быть наложены тек­стуры — растровые картинки, исходно плоские, но как бы к ним приклеенные. Текстура состоит из элементов, называемых текселами (Texel — Texture Element). Здесь уместна аналогия с созвучным термином пиксел (Picture Element), кото­рый относится к элементу изображения на экране и его образу в видеопамяти. Текстуры (в виде матриц текселов) хранятся в памяти. Для каждого многоуголь­ника-частицы отображаемой поверхности вычисляется соответствующий ему участок текстуры — тоже многоугольник. Далее этот участок должен быть ото­бражен в видеопамять — текселы должны быть отображены в пикселы. Что долж­но происходить с рисунком текстуры при изменении положения плоскости, на которую она наносится, легко представить, повертев перед глазами спичечный коробок и наблюдая за этикеткой. Кроме искажения формы при поворотах учи­тываются и изменения размера картинки текстуры при приближении и удале­нии объекта от наблюдателя, а также перспектива. Масштабирование и поворо­ты текстур могут приводить к различным искажениям: к примеру, увеличенное и повернутое изображение гладкого горизонтального (или вертикального) от­резка превратится в грубую ступенчатую линию. Кроме того, могут появляться «рваные» края у текстур по линиям их сопряжения. Для улучшения качества представления одной и той же текстуры в разном масштабе применяют так на­зываемый MlPmap — набор нескольких версий одной и той же текстуры, выпол­ненных с различным разрешением (обычно очередная версия имеет размер в чет­верть от предыдущей). При рендеринге выбирается та версия, у которой масш­таб ближе к требуемому. Дефекты, обусловленные растровым представлением текстуры (векторные изображения в отличие от растровых масштабируются и трансформируются без потери информации), могут быть устранены путем филь­трации — билинейной, или более сложной — трилинейной. При билинейной филь­трации (Bilinear Filtering) цвет очередного пиксела, записываемого в видеопа­мять, определяется с учетом цветов прилегающих к нему четырех соседних пик­селов. Трилинейная фильтрация (Trilinear Filtering) сложнее — здесь билиней­ная фильтрация выполняется дважды для двух соседних уровней MlPmap, бли­жайших к требуемому масштабу. Окончательный цвет пиксела определяется ин­терполяцией этих двух результатов.

Наложение текстур при всех хлопотах, связанных с его реализацией, позво­ляет упростить описание объектов и ускорить их рендеринг. Так, например, фа­сад кирпичного здания можно построить «по-честному», задав поверхности всех кирпичиков, оконных и дверных проемов и т. п.. Но если это изображение нужно получить, например, в игре, где воображаемый наблюдатель должен приближаться и удаляться от стены, а также менять угол зрения достаточно быстро, то проще представить ее одной плоскостью с «нарисованными» кирпичами и прочими де­талями (вспомним каморку папы Карло). На одни и те же объекты часто накла­дывают несколько текстур — для имитации освещенности, теней, отражений, ре­льефа и т. д.

И, наконец, когда все объекты, расположенные на сцене, уже прорисованы, для большего эффекта объемности можно ввести эффект атмосферной перспек­тивы — сильно удаленные объекты подернуть дымкой (туманом). Это несложно сделать, используя для попикселного смешивания цветов тумана и объектов ин­формацию о глубине из Z-буфера: чем больше Z, тем больше на результирую­щий цвет влияет туман и меньше цвет исходного пиксела. В последнее время стали использовать и трехмерные текстуры (3D textures) — трехмерные массивы пикселов. Они позволяют, например, имитировать объем­ный туман, динамические источники света (языки пламени).

4.3. Реализация трехмерной графики

Теперь примерим задачи трехмерной графики к возможностям рядового PC-со­вместимого компьютера. Реализация рендеринга требует значительного объема вычислений и оперирования с большими объемами информации, причем конеч­ная цель потока обработанных данных — видеопамять графического адаптера. Еще с 2В-графикой стало ясно, что центральный процессор х86 (даже с расши­рением ММХ) не способен быстро формировать движущиеся изображения, а шина расширения (даже PCI) является «узким горлышком» для потоков дан­ных, участвующих в видеопостроениях. Решением проблемы вывода трехмерной графики, как и раньше, явилось усиление «интеллекта» графической кар­ты — появились 3B-акселераторы, реализующие значительную часть графичес­кого конвейера. На долю центрального процессора (возможно, с графическим сопроцессором) обычно выпадает начало конвейера (от трансформации до тесселяции), а его окончание (растеризация) выполняется акселератором графичес­кой карты.

Как ни странно, основным двигателем прогресса 3B-технологий являются игры — именно любители компьютерных игр являются главными (самыми мас­совыми) потребителями 3В-акселераторов. Более «серьезные» применения дви­жущейся трехмерной графики — различные тренажеры-имитаторы полетов и езды — по сути тоже являются играми, только для серьезных людей. Трехмерная анимация, применяемая в современном телевидении и кинематографии, пока что реализуется не на массовых персональных компьютерах, а на более мощных ра­бочих станциях, но и там используются практически все вышеописанные эле­менты технологии.

Технологии построений, выполняемых 3B-акселераторами, постоянно совер­шенствуются, и описать все применяемые приемы в данной главе просто невоз­можно. Все новшества нацелены на достижение фотореалистических изображе­ний игровых сцен с большой скоростью смены кадров (до 100 кадров/с), на эк­ранах с большим разрешением (до 2048 х 1536) и в полноцветном режиме (True Color, 32 бита на пиксел). Конечно же, эти цели достигаются не ускорением «че­стных» расчетов для каждого элемента модели, а разными «обманными» при­емами вроде текстур. Новинки технологий, применяемых в акселераторах, будут давать видимый (в прямом смысле) эффект, если их будут знать и использовать соответствующие приложения (игры) и поддерживать драйверы, через которые приложения взаимодействуют с аппаратными средствами графической карты. Именно драйверы отвечают за распределение обязанностей между центральным процессором и графическим процессором акселератора, и их корректность опре­деляет качественные и количественные параметры графического конвейера. Мно­го интересных подробностей работы 3B-акселераторов можно узнать на сайте iXBT.com, где публикуются обзоры новинок, а также статьи по теории трехмер­ных построений. Мощность акселератора определяется списком реализуемых функций рендеринга и качеством их выполнения, а также производительностью, измеряемой как по входу, так и по выходу. Поскольку на входе акселератор оперирует многоугольниками-тесселями, то интерес представляет их количество, обсчитываемое за единицу времени. Для определенности (и более внушительного абсолютного значения) берут параметр Mts (Mega Triangle per Second — миллионов треуголь­ников в секунду). По выходу определяют скорость формирования пикселов в видеопамяти Mps (Mega Pixel per Second — миллионов пикселов в секунду).

Для работы акселератору требуется довольно много памяти: это пара буфе­ров экрана (во время отображения одного буфера в другом строится новый кадр), Z-буфер, α-буфер (может вписываться в видеопамять), и память для хранения текстур (да еще и во многих экземплярах для MlPmap). Специализированный процессор акселератора, типовая разрядность которого 128 бит (а начинали с 32-64-битных), должен иметь доступ к памяти со скоростью, измеряемой единицами гигабайт в секунду. Такая производительность достижима для локаль­ной памяти, установленной на графическом адаптере, — ни шина PCI, ни порт AGP не предоставят акселератору регулярный доступ к системной памяти на столь высоких скоростях. Даже у AGP пиковая производительность составляет все­го 2,132 Гбайт/с в режиме 8х. Но это пиковая про­изводительность в середине пакета при условии отсутствия обращений к памяти со стороны центрального процессора (а ему тоже ведь надо работать). Порт AGP позволяет акселератору пользоваться системной памятью для хранения текстур, что тоже неплохо. При этом снимается ограничение на размер описания текстур, которые без AGP приходилось держать в ограниченном объеме видеопамяти. На решение проблемы «тесноты» в свое время была нацелена и архитектура одно­родной памяти UMA, но в AGP, в отличие от UMA, сохраняется локальный ви­деобуфер на графическом адаптере и расширение доступной памяти не отзыва­ется снижением производительности.

Трехмерные акселераторы для компьютерных игр на PC первой внедрила фирма 3dfx, до того занимавшаяся игровыми приставками, и 3dfx стало нарицательным именем 3B-акселератора. За несколько лет эта фирма выпустила серию акселераторов, большинство из которых называется Voodoo с различными номе­рами и добавлениями. Когда в требованиях к аппаратным средствам ПК в анно­тациях к играм указывается «3dfx», это означает необходимость применения 3D-акселератора (может и не обязательно фирмы 3dfx). Никакие программные сред­ства тут уже не помогут — достичь реализации замыслов разработчиков игры они не позволят.

5. Обработка видеоизображений

Слово «видео» в современном толковании подразумевает привычное всем видео­изображение, которое мы видим на телевизионных экранах. Это изображение, в отличие от компьютерной графики, может получаться в результате видеосъем­ки естественных объектов. Чтобы подчеркнуть естественность происхождения, а также непредсказуемую подвижность изображения, ввели термин «живое ви­део». Растровая система отображения информации на экране монитора PC име­ет глубокие корни в телевидении, но объединить компьютерную графику с теле­визионным изображением оказывается непросто. Для понимания сложностей и путей решения этой задачи кратко поясним принципы передачи цветных теле­визионных изображений.

Как нам уже известно, в цветном мониторе экран сканируется одновременно тремя лучами базисных цветов и каждый луч модулируется входным сигналом. Также мы знаем, что отображение мелких элементов (большого количества пик­селов в строке) требует полосы сигнала в десятки мегагерц. В телевидении ши­рокополосные RGB-сигналы существуют только в пределах студии, передавать же их по радиоканалам в таком виде технически невозможно. Кроме того, теле­визионный сигнал должен быть совместим с черно-белыми телеприемниками. В телевидении сигналы трех первичных цветов R, G, В проходят через преобра­зователь координат, на выходе которого получают сигнал Y, несущий информа­цию о яркости точек (luminance), и два цветоразностных сигнала U и V, несущих информацию о цвете (chrominance) — о соотношениях яркостей красного и синего цвета относительно зеленого. Зеленый выбран основным, поскольку зре­ние людей к нему наиболее чувствительно. Далее, эти сигналы «путешествуют» по телевизионному тракту до телеприемника разными путями в зависимости от используемого вещательного стандарта. Сигнал Y всегда передается на основ­ной (несущей) частоте телевизионного канала, цветоразностные сигналы, специ­альным образом закодированные, передаются на поднесущей частоте канала. По­теря цветоразностного сигнала приведет к тому, что принятое изображение ока­жется черно-белым. Поскольку проблема полосы пропускания видеотракта сто­ит остро, во всех вещательных системах принята чересстрочная развертка. В пер­вой системе цветного телевещания — NTSC принята частота кадров 30 Гц (час­тота полей — 60 Гц), а количество строк — 525, из которых видимых — 480. При полосе канала яркости в 4,5 МГц в строке может быть различимо до 640 пиксе­лов (вот откуда формат 640 х 480). Однако для передачи цветоразностных сиг­налов используется поднесущая 3,58 МГц, и горизонтальное разрешение снижа­ется до 400-450 пикселов. Реально же домашний телеприемник обеспечивает примерно половину этого разрешения. Напомним, что это разрешение лишь по яркостному каналу. Цветоразностная информация (два сигнала) втискивается в подканал с поднесущей 3,58 МГц, да еще для экономии полосы, оставляемой яркостному каналу, после модуляции подавляют саму поднесущую и нижнюю часть спектра сигнала. Так что цветовые сигналы после таких преобразований, переда­чи по радиоканалу и обратного восстановления в телеприемнике поступят на входы видеоусилителей R, G, В с существенно урезанной, по сравнению даже с яркостным каналом, полосой частот. Видеосигнал, состоящий из яркостной со­ставляющей и поднесущей, модулированной цветоразностными сигналами, на­зывается композитным (Composite Video). Поскольку наибольшие потери ин­формации цветоразностного сигнала происходят при модуляции и демодуляции его поднесущей, лучшее качество передачи изображения даст сигнал, взятый сразу после цветоразностного преобразователя на приемной стороне. Интерфейс S-Video (Separate Video) использует раздельные сигнальные линии для яркостного кана­ла (Y) и модулированного сигнала цветности (С). Стандартный 4-контактный разъем S-Video типа mini-DIN используется как интерфейс высококачественных видеосистем, его синонимами являются и названия S-VHS и Y/C. Наивысшее качество передачи обеспечивает профессиональный (студийный) интерфейс YUV (professional video) на трех сигнальных линиях: здесь цветоразностные сигналы U и V передаются в немодулированном виде.

Кроме стандарта NTSС существуют еще два популярных в мире стандарта: PAL и SECAM.

В стандарте PAL фаза одного из цветоразностных сигналов (R-Y) меняется от строки к строке, что и дало название этому методу (Phase Alternating Line). Та­кое решение позволило повысить стабильность декодирования. Для увеличения горизонтального разрешения поднесущая частота цветоразностного сигнала по­вышена до 4,43 МГц. Частота кадров — 25 Гц (при частоте полей 50 Гц), количе­ство строк — 625. Стандарт PAL обеспечивает разрешение 800 х 600. В варианте PAL-M принят формат кадра NTSC (60 Гц и 525 строк), а в PAL-N при 625 стро­ках (50 Гц) вернулись к поднесущей 3,58 МГц.

В системе SECAM вместо квадратурной модуляции поднесущей при­менены две поднесущие цветоразностных сигналов с частотной модуляцией. Ча­стота кадров — 25 Гц (при частоте полей 50 Гц), количество строк — 625.

Говоря о телевизионных стандартах, не следует забывать и о канале звуково­го сопровождения. Во всех этих системах для звука используется частотная мо­дуляция дополнительной поднесущей частоты 6,5 МГц для SECAM; 5,5 МГц для PAL (но иногда и 6,5 МГц); 4,5 МГц для NTSC и PAL-M; может встречаться и 6 МГц.

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

Обсудим возможные точки соприкосновения компьютерной графики и теле­визионного видеосигнала.

Вывод компьютерной графики на экран обычного телевизора представляет интерес как средство презентаций: телевизоры с большим экраном применяются достаточно широко и имеют умеренную цену, чего не скажешь о больших мони­торах. Кроме того, транслировать один и тот же сигнал на несколько телевизо­ров проще, чем на несколько компьютерных мониторов. Ряд моделей современ­ных графических карт имеют выход телевизионного сигнала, причем независи­мый от выхода на основной монитор. Есть и преобразователи форматов (напри­мер, конвертор VGA-TV) в виде отдельных внешних устройств со стандартным интерфейсом компьютерного монитора на входе и каким-либо телевизионным сигналом на выходе. В простейшем варианте конвертор только преобразует сиг­налы из RGB в один из интерфейсов телеприемника, но при этом требуется ус­тановка разрешения и частот синхронизации графического адаптера, совпадаю­щих со стандартом телеприемника. Для пользователя PC эти ограничения мало­приятны, а иногда и невыполнимы. Более сложные конверторы имеют собствен­ную буферную память, которая заполняется вновь оцифрованным видеосигна­лом, снятым с выхода графического адаптера. На телевизионный выход инфор­мация из буфера выдается уже с телевизионной частотой. Буфер может хранить одну, несколько или все строки экрана. От этого зависят ограничения на режим разрешения и соотношения частот регенерации графического адаптера и телеви­зионного монитора (в последнем случае они вообще могут быть несвязанными). Естественно, эти варианты сильно отличаются по сложности и цене (конвертор с полноэкранным буфером самый дорогой). Однако когда графический адаптер выводит движущееся изображение, смена которого привязана к кадровой синх­ронизации, при несовпадении кадровых частот на телевизионном экране движе­ние будет искажаться. Общей проблемой конверторов является необходимость борьбы с мерцанием (flickering): поскольку в телеприемниках используется че­ресстрочная развертка, горизонтальная полоса шириной в пиксел будет отобра­жаться с частотой 25 или 30 Гц, что улавливается глазом. Возможны и варианты внутренних адаптеров (карт расширения), подключаемых к шине расширения PC и внутреннему разъему графической карты (VFC или VAFC). Некоторые модели конверторов позволяют накладывать графическое изображение на внешний видеосигнал (например, для создания титров). Ввиду ограниченной гори­зонтальной разрешающей способности телеприемников (полоса пропускания шире 5 МГц для телевизора как такового бессмысленна), возможность замены монитора телевизором для регулярной работы сомнительна. В стандарте NTS С обеспечивается разрешение 640 х 480, в PAL и SEC AM — 800 х 600. Однако та­кое разрешение реально достижимо только при использовании интерфейса S-Video. Композитный сигнал, как было сказано выше, не обеспечивает столь высокого разрешения. Выход телевизионного сигнала имели адаптеры CGA и EGA, с приходом VGA этот интерфейс на графических картах применять пере­стали. Однако на новом витке развития техники об интерфейсе с телевизион­ным приемником снова вспомнили. Microsoft рекомендует устанавливать на но­вых графических картах кроме стандартного интерфейса VGA (RGB-Analog) выход композитного сигнала и S-Video. Более того, рекомендуется предусмот­реть возможность одновременной работы VGA-монитора и TV-приемника, что не так-то просто обеспечить из-за различия параметров синхронизации.

Гораздо чаще используют обратное «скрещивание» — вывод видеоизображе­ния на экран компьютерного монитора. Видеоизображение выводится в окно, занимающее весь экран или его часть. Поскольку вывод видео перекрывает часть графического изображения, такой способ вывода называют видеооверлеем (Video Overlay), а платы, обеспечивающие данный режим, называют видеооверлейными (overlay board). Эти платы позволяют изменять размер окна видео так же, как и размер любого окна в Windows. В оверлейной плате для видеоизображения име­ется специальный «слой» видеопамяти, независимой от видеобуфера графичес­кого адаптера. В этом слое содержится оцифрованное растровое отображение каждого кадра видеосигнала. Поскольку для видеосигнала принято цветовое про­странство в координатах Y-U-V, в этом слое памяти пикселы также отображают­ся в этом пространстве, а не в R-G-B, свойственном графическим адаптерам. В такой системе движущееся видеоизображение, видимое на экране монитора, существует лишь в оверлейном буфере, но никогда не попадает в видеопамять графического адаптера и не передается ни по каким внутренним цифровым ши­нам компьютера. В видеопамяти графического адаптера «расчищается» окно, че­рез которое «выглядывает» видеоизображение из оверлейного буфера. Некоторый цвет (комбинация бит RGB) принимается за прозрачный. Оверлейная логи­ка сравнивает цвет очередного пиксела графического буфера с этим прозрач­ным, и если он совпадает, вместо данного пиксела выводится соответствующий пиксел видеооверлея. Если цвет не совпадает с прозрачным, то выводится пик­сел из графического буфера. Таким образом, имея доступ к пикселам графичес­кого буфера, можно на видеоизображение накладывать графику для организа­ции видеоэффектов или вывода в видеоокне «всплывающих» (PopUp) меню. На­ложение производится на уровне потока бит сканируемых пикселов, который может передаваться в оверлейную плату через разъем Feature Connector (см. ни­же). Оверлейная плата обычно имеет несколько входов для источников аналого­вого видеосигнала и программно-управляемые средства выбора одного из них. В составе такого устройства обычно есть и фрейм-граббер (Frame Grabber) — средство захвата видеокадра. Его другое название — Video Capture. По команде оператора движущееся изображение может быть мгновенно зафиксировано в оверлейном буфере, после чего захваченный кадр может быть записан на диск в каком-либо графическом формате для последующей обработки и использова­ния. Более совершенные устройства позволяют записывать в реальном времени последовательность видеокадров, выполняя их компрессию методами M-JPEG, DVI или INDEO (MPEG-кодирование требует слишком больших ресурсов для выполнения преобразования в реальном времени), но об этом чуть позже.

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

TV-тюнер — устройство приема видеосигналов с радиочастотного входа (ан­тенны), в сочетании с оверлейной платой позволяет просматривать телепрограм­мы на обычном мониторе компьютера. Тюнер может поддерживать стандарты цветопередачи PAL, SECAM и NTSC, но из-за несовпадения стандартов на промежуточную частоту звукового сопровождения некоторые карты не принимают звуковое сопровождение отечественных телеканалов.

Теперь посмотрим, во что «выльется» попытка передачи видеоизображения в цифровом виде, естественном для графической системы компьютера (Bitmap). Пусть разрешение видеоэкрана составит 640 х 480 — максимально возможное для телевизионного изображения NTS С. Поскольку аналоговый телевизионный сиг­нал позволяет передавать в принципе неограниченное число цветов, примем глу­бину цвета True Color — 24 бита на пиксел. Тогда одному кадру изображения будет соответствовать битовый образ объемом 640 х 480 х 24 = 7 372 800 бит или около 7 Мбит на кадр. В телевидении полные кадры сменяются с частотой 25 Гц (30 Гц в NTSC), так что для непосредственной передачи телевизионного изображе­ния в формате Bitmap требуется обеспечить поток данных в 7 х 25 = 175 Мбит/с, или около 22 Мбайт/с. О том, чтобы записывать такой поток данных даже на самый быстрый винчестер, раньше не было и речи, но современные диски уже могут его выдержать (см. главу 7). Но этот поток заполняет 1 Гбайт диска всего за 44 секунды. Конечно, если пожертвовать количеством цветов и «опуститься», например, до режима High Color (16 бит на пиксел), то требуемый поток умень­шится до 116 Мбит/с. Но и такой поток слишком велик. Выходом может быть только сжатие передаваемой информации,

Выше уже отмечалось, что формат Bitmap является довольно расточитель­ным способом описания изображений. Соседние (по вертикали и горизонтали) элементы реального изображения обычно между собой сильно взаимосвязаны (коррелированны), поэтому имеются богатые возможности сжатия описания. Иллюстрация этому — очень большой коэффициент сжатия BMP-файлов лю­бым архиватором. Если сжатие файлов данных при архивации обязательно тре­бует возможности точного восстановления исходных данных при распаковке, то при сжатии изображений в большинстве случаев можно позволить некоторые вольности, когда восстановленное изображение не совсем точно соответствует оригиналу. И наконец, соседние кадры движущегося изображения между собой в большинстве случаев тоже сильно связаны, что наводит на мысль о примене­нии дифференциального описания кадров. Все эти рассуждения подводят нас к пониманию возможностей сжатия видеоинформации и принципов действия ко­деков — компрессоров-декомпрессоров видеосигнала. Как и в случае программ­ного сжатия и восстановления данных, задача компрессии оказывается сложнее задачи восстановления (легко заметить, что распаковка файлов, например, архи­ватором ARJ, происходит гораздо быстрее упаковки). Процедура сжатия может выполняться как одноступенчатым, так и двухступенчатым способом. В первом случае сжатие выполняется одновременно с записью в реальном масштабе вре­мени. Во втором случае поток несжатых данных интенсивностью в несколько десятков мегабайт в секунду записывается на специальный (очень большой и очень быстрый) диск. По окончании записи фрагмента выполняется его сжатие, которое может занимать на порядок больше времени, чем сама запись. Декомп­рессия, естественно, представляет интерес лишь в том случае, если она выполня­ется в реальном масштабе времени (к счастью, она и реализуется проще). Ряд кодеков позволяет осуществлять декомпрессию в реальном времени чисто про­граммными способами, используя стандартный графический адаптер SVGA. Од­нако программная декомпрессия сильно загружает процессор, что неблагоприят­но сказывается на многозадачном использовании компьютера. Ряд современных дисплейных адаптеров имеют специальные аппаратные средства декомпрессии, разгружающие центральный процессор. На долю процессора остается лишь орга­низация доставки сжатого потока данных к плате адаптера.

Сжатие движущихся изображений включает впутрикадровое (intraframe com­pression) и межкадровое (interframe compression) сжатие. Для внутри-кадрового сжатия используются методы, применяемые для сжатия неподвижных изобра­жений. В межкадровом сжатии применяется система ключевых кадров (key frame), содержащих полную информацию о кадре, и дельта-кадров (delta frame), содер­жащих информацию о последовательных изменениях кадров относительно клю­чевых. Благодаря корреляции соседних кадров дельта-кадры в общем случае не­сут гораздо меньше информации, чем ключевые, и, следовательно, поток их дан­ных не так интенсивен. Периодическое вкрапление ключевых кадров позволяет избежать накопления ошибки в изображении, а также начинать прием потока в любой момент (дождавшись ближайшего ключевого кадра).

При съемке различных сюжетов межкадровая корреляция, конечно же, будет существенно варьироваться. Поэтому, чтобы оценить качество работы кодека, применяют, например, сюжеты типа «говорящие головы» (Talking heads) с высо­кой степенью корреляции кадров и более сложные полнодвижущиеся изображе­ния (Actions) — например, карусель, где все элементы перемещаются. Оценка качества ведется как по объективным показателем, так и по субъективному вос­приятию. Объективными показателями является максимальная частота кадров (Frame Rate), которая обеспечивается без отбрасывания кадров, и процент от­брасываемых кадров (Drop Frames) при обработке потока со стандартной часто­той кадров. Эти показатели характеризует производительность декомпрессора, которая может оказаться и недостаточной для обработки потока данных без потерь. Интересен также и коэффициент загрузки центрального процессора (CPU Utilization) при отработке стандартного потока, по которому можно судить о воз­можности исполнения других задач во время воспроизведения видео.

В процессе декомпрессии может потребоваться масштабирование кадров, для того чтобы вписать изображение в окно заданного размера. В простейшем слу­чае декомпрессия производится в масштабе 1:1, при этом видеоизображение обыч­но занимает лишь часть экрана. Примитивное масштабирование достигается дуб­лированием пиксела — один пиксел видео копируется в несколько (например, 4) смежных пикселов графического экрана. Однако при этом качество изображе­ния заметно падает — крупные «кирпичики», из которых строится изображение, с небольшого расстояния выглядят плохо. Более тонкий механизм масштабиро­вания выполняет интерполяцию цветов пикселов, при этом качество изображе­ния заметно улучшается. Однако такое масштабирование уже требует значитель­ных затрат вычислительных ресурсов, и если их недостаточно, то вывод видео­изображения в окно большого размера будет сопровождаться потерями кадров и, возможно, перебоями звукового сопровождения. Так что, говоря о качестве вывода видео, следует всегда оговаривать масштаб или размер видеоэкрана.

Для сжатия изображений применяются различные кодеки.

· JPEG (Joint Photographic Expert Group) — метод сжатия неподвижных изоб­ражений, основанный на одновременной обработке информации матрицы пикселов (например, 8 х 8) в пространстве Y-U-V с приоритетом сохране­ния яркостной информации. Метод почти универсален: он позволяет обес­печивать и максимальную степень сжатия, правда, при этом информация восстанавливается с некоторыми потерями, и обеспечивать сжатие без по­терь, но, конечно, в меньшей степени. Кроме того, возможен послойный прием изображения, когда сначала приходит грубое описание всей кар­тинки, затем следуют постепенные уточнения (утончения) деталей. Такая передача представляет ценность при использовании каналов связи с огра­ниченной производительностью, например в Интернете: быстро получив общий вид, можно отказаться от приема полного описания изображения, если оно не заинтересовало получателя. Конечно, все достоинства JPEG не могут использоваться одновременно — чем-то приходится жертвовать. Степень сжатия зависит от характера изображения — лучше всего сжима­ется цветное изображение, несколько хуже — полутоновое серое. Черно-белое изображение для JPEG должно представляться в полутоновом фор­мате, что, конечно, снижает эффективность его сжатия.

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

· DVI (Digital Video Interactive) — система аппаратного сжатия движущих­ся видеоизображений с коэффициентом сжатия до 160:1 и записи звуко­вого сопровождения по методу ADPCM.

· Indeo (INtel viDEO) — одноступенчатый кодек на базе набора микросхем 182750, развитие системы DVI. Позволяет воспроизводить видеозаписи и с программным декодированием (необходим PC не ниже 486SX-25, SVGA 256 цветов и звуковая карта с ADPCM для звукового сопровождения).

· Cinepak — программный кодек для воспроизведения «живого» видео в окне 320 х 240 пикселов.

· MPEG - ряд кодеков (MPEG-1, MPEG-2, MPEG-4, MPEG-7...) для пере­дачи аудио-видеоинформации, каждый из которых соответствует опреде­ленному этапу развития цифровых технологий. Эти кодеки стали обще­принятыми и заслуживают более подробного описания.

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

Для обмена видеоданными с другими устройствами сжатый поток может быть передан, например, по шине Fire Wire (см. главу 14) или через средства телеком­муникаций (см. главу 10). Если компьютер оборудован телекамерой со средства­ми компрессии и передачи изображений по телекоммуникационным каналам, то появляется возможность организации видеотелефона и даже видеоконференций.

5.1. Стандарты MPEG

Разработкой кодеков, предназначенных для работы (по крайней мере, декомп­рессии) в реальном масштабе времени, занимается MPEG (Motion Picture Expert Group — группа экспертов в области движущихся изображений). Поскольку ви­део без звука «живым» представить трудно, MPEG занимается и аудиокодека­ми. Кодеки MPEG работают в пространстве Y-U-V, причем яркостная информа­ция обрабатывается с большим разрешением, чем цветовая. В сжатом потоке дан­ных присутствуют кадры нескольких типов:

· I (intra)-кадры — ключевые кадры, кодированные без ссылок на другие (то есть содержащие полное описание статического изображения).

· Р (predicted) — кадры содержат описание различий текущего кадра с пре­дыдущим.

· В (bi-directional) — кадры являются двунаправленными: они ссылаются и на кадр вперед, и на кадр назад.

Наличие двунаправленных кадров подразумевает, что декодер должен иметь буфер, по крайней мере, на три принятых кадра, а изображение будет выводить­ся с некоторым отставанием от входного потока. Для того чтобы кодек мог быс­тро включиться в работу с любого места потока, I-кадры должны включаться в поток регулярно (в MPEG-1 — не реже, чем через 0,4 с).

MPEG-1 — стандарт ISO/IEC 11172, принятый в 1992 году. Полное название — «Coding of Moving Pictures and Associated Audio for Digital Storage Media at up to about 1,5 MBit/s» — раскрывает его суть: кодек предназначен для записи и воспроизведения движущихся изображений и связанного с ними аудиосопро-вождения на цифровом носителе с потоком данных до 1,5 Мбит/с. При этом обес­печивается качество изображения на уровне кассетного видеомагнитофона VHS (Video Home System) со стереофоническим звуковым сопровождением. Стан­дарт состоит из 5 частей, описывающих систему, видео, аудио, методику тести­рования на соответствие и программы кодера и декодера на языке С. Для полу­чения столь низкой скорости потока из исходного видеопотока берется лишь одно поле (полукадр), а в каждой строке — только половина пикселов, что дает формат кадра 352x240 пикселов с прогрессивной разверткой, 30 кадров в секун­ду. Поток этих кадров и подлежит сжатию. Увеличение размера декодированно­го изображения до полного экрана особого смысла не имеет, поскольку может выполняться только масштабированием (размножением пикселов), правда, в бо­лее сложных реализациях декодера можно улучшить качество изображения, при­меняя методы интерполяции. Аудиопоток по сравнению с РСМ сжимается при­мерно в 6 раз (типовая скорость 256 Кбит/с). Декодер MPEG-1 содержит де-мультиплексор, разделяющий аудио- и видеопотоки, и раздельные декодеры для них. Скорость потока данных позволяет использовать в качестве носителя ви­деоинформации обыкновенный CD-ROM, поэтому MPEG-1 применяется в дис­ках CD-i и VideoCD (VCD). Однако декомпрессия требовала большой (по тем временам) мощности процессора (Pentium 133), из-за чего диски CD-i и VCD без специальной платы аппаратного декодера маломощные компьютеры воспро­изводить не могли.

MPEG-2 (ISO/IEC 13818) — кодек для высококачественной передачи изоб­ражений, аудиоинформации и данных при потоке 2-80 Мбит/с, обеспечиваю­щий несколько уровней качества (табл. 1). Основной уровень (720x480, 30 кадров/с) обеспечивает качество на уровне телевещания, высокие уровни ис­пользуются в профессиональной видеозаписи. Стандарт предусматривает одно­временную передачу множества TV-каналов с возможностью шифрования для ограничения доступа к информации и защиты прав собственности на содержи­мое потоков. Первые 5 частей стандарта аналогичны MPEG-1, но с новым на­полнением. Аудиокодек MPEG-2 представляет собой многоканальное расшире­ние аудиокодека MPEG-1, что обеспечивает их совместимость по первым двум каналам. В аудиокодеке MPEG-2 имеются 2 стереоканала (фронт и тыл), обес­печивающих объемное звучание (Surround), и один низкочастотный с полосой до 100 Гц. Кроме совместимого с MPEG-1, в MPEG-2 входит и «продвинутый» аудиокодек AAC (Advanced Audio Codec), используемый в профессиональной аудиотехнике. Аудеокодек MPEG-1/MPEG-2 стал жить самостоятельной жиз­нью под именем МРЗ (MPEG-1 Layer 3), иногда ошибочно называ­емый MPEG-3 (такого стандарта нет). То, что должно было стать MPEG-3, вы­лилось в высший уровень MPEG-2. Этот уровень обеспечивает качество телевидения высокой четкости ТВЧ (HDTV — High Definition TV).

Таблица 1. Уровни качества MPEG-2

Уровень

Размер изображения

Максимальный поток данных, Мбит/с при частоте 30 кадров/с

Low (низкий)

352 х 240

4

Main (основной)

720 х 480

15

High-1440 (высокий)

1440x1152

60

High (высокий)

1920 х 1080

80

Модель взаимодействия компонентов воспроизводящих систем MPEG-1 и MPEG-2 довольно проста — данные от источника через средства доставки по­ступают на вход демультиплексора, где разделяются на видео и аудиопотоки, обрабатываемые своими декодерами. Информационный поток MPEG-1 сугубо однонаправленный; в MPEG-2 добавляется двунаправленный канал взаимодей­ствия получателя информации с источником данных (сервером вещания) через средства доставки, что обеспечивает интерактивность в смысле выбора переда­ваемых программ, а также адаптацию передаваемого потока к качеству канала передачи.

MPEG-4 — стандарт, ориентированный на интерактивное использование муль­тимедиа и сетевых коммуникаций. По сравнению с предыдущими, MPEG-4 уст­роен гораздо сложнее — аудио-видеоинформация, представляемая конечному потребителю, собирается из различных аудиовизуальных объектов (AVO, Audio-Visual Objects). Эти объекты отображаются на сцене, представляемой конечно­му потребителю (наблюдателю-слушателю). Сцена представляется дисплеем и многоканальной аудиосистемой. Исходная композиция (расположение объек­тов на сцене), заданная создателем воспроизводимого произведения, может в ши­роких пределах изменяться пользователем. Объекты, представляемые на сцене, могут быть как естественными, так и синтетическими. Между объектами уста­навливаются определенные связи. Интерактивность позволяет управлять как представлением сцены (например, менять ракурс), так и композицией («сбор­кой», содержанием и поведением объектов на сцене) и, как и в MPEG-2, взаимо­действовать с источником данных через средства доставки.

Естественные аудиообъекты — это каналы передаваемого аудиосигнала, сжа­того в зависимости от потребностей в качестве и доступной полосы пропускания канала передачи. Уровень качества может быть от телефонного до высокого (ка­налы с виртуальной скоростью 2-64 Кбит/с). Для каждого уровня качества и занимаемой полосы используется свой метод компрессии/декомпрессии. Син­тетические аудиообъекты образуются из структурированных потоков входных данных. Декодер TTS (Text to Speech) синтезирует речь по потоку текстовых данных, формируя управляющие данные для анимации движения губ. Декодер имеет многонациональную языковую поддержку. Он позволяет управлять темб­ром и громкостью, делать паузы, «проматывать» вперед и назад. Музыкальным аналогом TTS является интерфейс MIDI, но в MPEG-4 может использоваться и более мощный и точный метод синтеза музыки Score Driven Syntesis. Поток для синтеза музыки содержит команды, описывающие звуковые примитивы, гене­рируемые с помощью сигнальных процессоров. Таким образом передаются пото­ки для всех инструментов оркестра и может быть синтезировано их совместное звучание, которое может оживляться такими деталями, как шум шагов в зале или звук открываемой двери. К аудиообъектам могут быть приложены различ­ные эффекты; аудиообъекты могут привязываться к визуальным объектам и по­зиционироваться в любой точке сцены (объемной).

Визуальные естественные объекты могут быть текстурами, изображениями и видео. Текстуры предназначены для наложения на каркасные модели, 2D или 3D. Изображения могут просто помещаться в любое место сцены. Видео подра­зумевает «живое» изображение, но оно может быть и не полноэкранным и не прямоугольным (например, движущийся человек на прозрачном фоне). Визуаль­ные синтетические объекты представляют собой элементы компьютерной гра­фики, получаемые разными способами в векторном или растровом виде. Это мо­гут быть и 2D или 3D каркасные модели, на которые могут быть наложены тек­стуры (естественные и синтетические). Для повышения качества моделирова­ния живых объектов в MPEG-4 разработана специальная система параметризо­ванного описания человеческой головы, способной изображать различные эмо­ции, а также воспроизводить движение губ при разговоре. Движение губ может быть связано с воспроизводимым аудиосигналом, привязанным к этому объекту (голове). На модель головы может быть наложена текстура, полученная из изоб­ражения лица конкретного человека. Разрабатывается также и специализирован­ная модель человеческого тела.

Для иллюстрации можно представить, к примеру, такую сцену. В синтетичес­кой комнате (трехмерная модель) расположен синтетический диктор (модель), лицо которого является текстурой, сделанной из портрета известного человека. Этот диктор «читает» текст (подсунутый ему пользователем или хакером через сеть), ходит по комнате, по «просьбе» пользователя может остановиться и помолчать или же повторить сказанное. Вся эта синтетика в сочетании с интерактивностью ограничивается малым объемом передаваемых данных — достаточно раз передать описание сцены, диктора и текстуру его лица, после чего требуется передача лишь текста и информации, управляющей движением моделей на сцене.

Визуальная часть MPEG-4 предоставляет инструменты и алгоритмы для эф­фективной компрессии видео и изображений, текстур для наложения на 2D- и ЗD-сетки (каркасы), самих сеток, потоков геометрических данных, «оживляю­щих» сетки. Также имеются средства для произвольного доступа ко всем типам объектов, манипулирования изображениями и видеопотоками. Способы кодиро­вания и масштабирования изображений, текстур и видео зависят от типа содер­жимого. Ядром средств кодирования визуальных объектов является VLBV (Very Low Bit-rate Video) — видео с очень низкой скоростью потока (5-64 Кбит/с), позволяющей передавать маленькие кадры (176 х 144 пиксела) с темпом 10-15 кадров/с, устойчиво по отношению к ошибкам передачи. Вокруг этого ядра строится интерфейс с высокой скоростью передачи и расширения функци­ональности, позволяющих индивидуально кодировать объекты сцены, что и обес­печивает интерактивность. Полноэкранное изображение приемлемого качества требует скорости порядка 600 Кбит/с. Для программного декодирования (в ре­альном времени) требуется как минимум Pentium II-300. Компрессия в реаль­ном времени может быть реализована, например, на двухпроцессорном компью­тере Pentium II-400. В некоторые современные видеокарты встраивают аппаратные средства декомпрессии MPEG-4; средства синтеза визуальных объектов ос­нованы на вполне уже обычных функциях 2D- и ЗО-акселераторов.

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

На этом история MPEG не заканчивается: есть расширения MPEG-4 с ис­пользованием языка Java, а также MPEG-7 — стандарт описания мультимедийных объектов, обеспечивающий их эффективный поиск.

В персональном компьютере могут присутствовать специальные компоненты для работы с MPEG:

MPEG-плеер — декодер MPEG-1, обеспечивающий воспроизведение с ком­пакт-дисков форматов MPEG-1 (CD-I, VideoCD). Аппаратный декодер является широко распространенным дополнением графического адаптера. В отличие от программных MPEG-декомпрессоров, он обеспечивает высокое качество воспро­изведения с невысокой загрузкой процессора. В состав MPEG-плейера должен входить и аудиодекодер, при этом на графической плате с аппаратным декоде­ром появляется немного неожиданный дополнительный разъем аудиовыхода.

DVD-плеер