Карточный "ликбез" как работают современные видеоускорители.
Часть II: Принципы ускорения трехмерной графики
В первой части статьи мы рассмотрели основные компоненты современной
видеокарты, а теперь мы можем поподробней разобраться в принципах ускорения
трехмерной графики. Наверняка вы обращали внимание на массу всевозможных
настроек в панели управления драйвера своей видеокарты, а сейчас постараемся
понять, что они означают.
Каким образом видеокарта, а точнее, графический процессор, формирует трехмерное
изображение? Здесь нужно назвать три основных понятия: текстура, вершина и
полигон. Поскольку мы имеем дело с трехмерными объектами, то их положение в
пространстве описывается координатами X, Y и Z. Точка, заданная этими
координатами, называется вершиной. В графических процессорах, предназначенных
для персональных компьютеров, используется технология полигонального создания
трехмерных объектов, которая примечательна тем, что любые такие объекты состоят
из простейших полигонов (т.е. многоугольников), а именно, треугольников.
Положение этих полигонов и задается вершинами.
Текстура - это, в сущности, двухмерное, плоское изображение, которое может
накладываться на трехмерные объекты с учетом их формы и положения. Объективности
ради, нужно оговориться, что в некоторых случаях текстуры могут быть и
трехмерными, например, воксельные текстуры, состоящие из множества одноцветных
кубов. Для того, чтобы картинка выглядела реалистичной и объемной для сидящего
за плоским экраном монитора, необходимо рассчитать, какие объекты должны
выводиться на дисплей, а какие не должны попасть в поле зрения (к примеру, стол,
стоящий у стены, будет закрывать собой часть стены, а человек, сидящий за
столом, будет закрывать часть стола и часть стены). Информация о таких объектах
помещается в специально выделяемый раздел видеопамяти - Z-буфер, или буфер
глубины (Z в системе трехмерных координат обозначает глубину). Затем графический
процессор извлекает из Z-буфера поступившие туда данные, обрабатывает их и в
цифровом виде передает в кадровый буфер данные об изображении, которое должно
быть выведено на экран. Процесс обработки текстур и информации кадрового буфера
называется рендерингом (или процессом закраски). Сильно упрощая, можно сказать,
что число конвейеров рендеринга, которым часто хвастаются разработчики, - это
просто количество специализированных блоков наложения текстур, работающих
параллельно.
Для повышения реалистичности отображения наложенных на полигоны текстур
используются самые различные технологии. Одна из самых распространенных - это
MIP mapping (от лат. multum in parvo - "множество в малом" и англ. map -
"текстура"), основную функцию которой можно свести к созданию набора текстур с
различной степенью детализации. При этом, как и в реальном мире, по мере
удаления от точки наблюдения текстура будет выглядеть все более "размыто". Так
как текстуры хранятся в видеопамяти и могут оперативно динамически
"подгружаться", технология MIP mapping позволяет одновременно снизить нагрузку
на графический процессор, что, разумеется, положительно сказывается на общей
производительности видеосистемы.
Как правило, MIP mapping используется в сочетании с технологиями фильтрации
(точнее было бы сказать, интерполяции), призванными исправить чрезмерную
"размытость" изображения, возникающую из-за того, что при некоторых углах обзора
текстура на полигоне слишком "растягивается" или "сжимается". Смысл фильтрации
состоит в том, что цвет пикселей растянутого или сжатого объекта рассчитывается
по соседним точкам текстуры (текселам), поэтому у изображения исчезает
чрезмерная зернистость. Самая прогрессивная на сегодняшний день технология
фильтрации - анизотропная, при использовании которой один-единственный пиксель
может рассчитываться по 8-32 текселам. Для сравнения, в простейшем варианте
фильтрации, билинейной, для расчета цвета пикселя используется всего четыре
ближайших тексела. Как можно было догадаться, анизотропная фильтрация
предъявляет повышенные требования к ресурсам всей графической системы, именно
поэтому для определения реальной производительности той или иной новинки
специалисты любят оценивать скорость работы карты с включенной анизотропной
фильтрацией.
Еще один способ повышения качества изображения - это сглаживание (нередко в
русскоязычных публикациях пишут по-английски: anti-aliasing), которое, прежде
всего, устраняет эффект "лестницы", проявляющийся при отображении ровных краев
объектов, а также позволяет избавиться от прочих искажений и повысить
детальность картинки в целом. Первоначально технологии сглаживания применялись
лишь к отдельным объектам, однако с повышением производительности графических
процессоров получила широкое распространение технология полноэкранного
сглаживания или FSAA (от англ. Full Screen Anti-Aliasing - "полноэкранное
сглаживание").
Смысл полноэкранного сглаживания довольно прост: графический процессор
рассчитывает изображение с большим разрешением, чем установленное разрешение
выводимой картинки. Например, при использовании FSAA расчет картинки для вывода
на монитор с разрешением 800 х 600 пикселей может производиться с разрешением
1600 х 1200 точек. Затем полученное изображение уменьшается на строго
установленное число пикселей, при этом в соответствии с используемым алгоритмом
окончательные цвета "сглаженных" пикселей рассчитываются по значениям нескольких
соседних пикселей. В результате мы получаем на экране более плавные цветовые
переходы, поэтому "лесенки" и другие нежелательные эффекты становятся
малозаметными.
Существуют и прочие технологии улучшения изображения, среди которых стоит
назвать затуманивание (имитация газа или тумана), затенение Гуро (сглаживание
при отображении окружностей и сфер) и альфа-смешивание (имитация прозрачности
объектов, например, стекла или воды). В действительности таких технологий очень
много, причем большая часть из них представляет собой фирменные разработки,
подробная информация о которых держится в секрете.
Для реализации различных возможностей, заложенных в графические процессоры,
используются прикладные программные библиотеки или программные интерфейсы (API -
от англ. Application Programming Interface - буквально "интерфейс для
программирования приложений"). Программный интерфейс - это как бы промежуточная
ступенька между прикладными программами и низкоуровневыми командами драйвера
видеокарты. API позволяет не только повысить эффективность использования
аппаратного потенциала графического ускорителя, но и дает возможность программно
эмулировать некоторые функции, не поддерживаемые видеокартой аппаратно.
Помимо всего прочего, именно благодаря API обеспечивается максимальная
совместимость программных продуктов и систем команд графических процессоров.
Различные чипы поддерживают разные API, причем по поддерживаемой версии
программного интерфейса можно в подавляющем большинстве случаев определить класс
и поколение видеокарты, если, конечно, она не представляет собой
узкоспециализированный продукт.
К примеру, в популярных в свое время видеокартах серии Voodoo поддерживался API
Glide, разработанный компанией 3Dfx. По различным причинам прочие производители
видеокарт практически проигнорировали эту библиотеку, поэтому с исчезновением с
рынка Voodoo можно считать, что этого API больше не существует. Двум другим
массовым программным интерфейсам повезло гораздо больше. Созданный компанией
Silicon Graphips (ныне - SGI) интерфейс OpenGL был первоначально предназначен
для профессиональных видеокарт, используемых в рабочих станциях, однако
упрощенная версия этого API использовалась при написании культовой игры Quake,
благодаря чему все современные графические процессоры в той или иной степени
поддерживают OpenGL.
API Direct 3D - творение программистов вездесущей Microsoft - входит в состав
мультимедийного API DirectX. Первоначально Direct 3D уступал по своим
возможностям OpenGL, однако ныне это самая развитая технология, которая
поддерживается всеми графическими процессорами для настольных компьютеров, а
практически все компьютерные игры ориентированы именно на эту технологию.
Последняя версия Direct X - это 9.0c, правда, до сих пор далеко не во всех
популярных компьютерных играх реализованы возможности Direct X 8.0, которая
поставлялась вместе с операционной системой Windows XP. Среди таких
невостребованных, но, безусловно, перспективных возможностей можно назвать
вершинные и пиксельные шейдеры - специализированные программы, позволяющие
эффективно изменять геометрию и изображение формируемой трехмерной сцены. К
сожалению, создатели программного обеспечения пока не уделяют достаточного
внимания вершинным и пиксельным шейдерам, в то время как спецификации этих
программ постоянно совершенствуются.
При тестировании видеокарт эксперты часто пользуются таким термином, как FPS
(от английского Frames Per Second - "число кадров в секунду"). Это грозная
аббревиатура означает просто-напросто частоту смены кадров в секунду, которая
определяется специально написанными программами, такими как 3DMark от Futuremark.
Подобные программные пакеты состоят из целой серии сложных графических тестов и
включают в себя фрагменты из самых современных и особенно требовательных к
"железу" компьютерных игр. Основная цель такого тестирования - создать наиболее
тяжелые условия работы графической подсистемы, что позволяет достаточно
объективно оценить потенциальные возможности того или иного графического чипа.
Тем не менее, стоит помнить о том, что все эти тесты синтетические, поэтому
реальная производительность видеокарты в реальных приложениях может заметно
отличаться от результатов тестирования.
Надеюсь, что после прочтения этой статьи вы получили общее представление о том,
из каких блоков состоит современная видеокарта, как формируется трехмерное
изображение, и какие основные технологии при этом используются. Думаю, что этих
данных вполне достаточно для того, чтобы читать различные обзоры видеокарт и
ориентироваться в настройках драйвера собственной карточки. Конечно, существует
множество нюансов, а набор настроек драйверов различных карт могут существенно
отличаться друг от друга.