Содержание
Введение
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 — Noninterlaced), разверткой луч идет по тем же самым строкам (рис. 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), плоскими и выпуклыми — эти ограничения заметно упрощают их дальнейшую обработку. Кроме формы объектов (описания их поверхностей), важное значение имеют их оптические свойства. Проще всего дело обстоит с непрозрачными объектами — все другие объекты, перекрытые ими для взгляда наблюдателя, просто невидимы. Эти объекты будут
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 compression) и межкадровое (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-плеер
— декодер MPEG-2, аппаратный или программный, позволяющий воспроизводить видеозаписи с DVD-Video и Super VideoCD. Для программного декодирования требуется как минимум компьютер с процессором Pentium II-266, для аппаратного достаточно Pentium-133.