Карточный "ликбез" как работают современные видеоускорители.

Часть 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. Подобные программные пакеты состоят из целой серии сложных графических тестов и включают в себя фрагменты из самых современных и особенно требовательных к "железу" компьютерных игр. Основная цель такого тестирования - создать наиболее тяжелые условия работы графической подсистемы, что позволяет достаточно объективно оценить потенциальные возможности того или иного графического чипа. Тем не менее, стоит помнить о том, что все эти тесты синтетические, поэтому реальная производительность видеокарты в реальных приложениях может заметно отличаться от результатов тестирования.
 
 Надеюсь, что после прочтения этой статьи вы получили общее представление о том, из каких блоков состоит современная видеокарта, как формируется трехмерное изображение, и какие основные технологии при этом используются. Думаю, что этих данных вполне достаточно для того, чтобы читать различные обзоры видеокарт и ориентироваться в настройках драйвера собственной карточки. Конечно, существует множество нюансов, а набор настроек драйверов различных карт могут существенно отличаться друг от друга.

Сайт управляется системой uCoz