Последний уровень раздела предыдущего изложения   Текущий уровень изложения предыдущего раздела   Текущий уровень изложения следующего раздела   Следующий уровень изложения текущего раздела   Уровень:


Игровые 3 D-акселераторы

3D-акселератор

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

Построение трехмерной сцены происходит следующим образом - в компьютере трехмерные объекты представляются с помощью геометрических моделей, состоящих из сотен и тысяч элементарных геометрических фигур, обычно треугольников. Задаются также пространственное положение источников света, отражательные свойства материала поверхности объекта, степень его прозрачности и т. п. При этом некоторые объекты могут частично загораживать друг друга, между ними может переотражаться свет; пространство может быть не абсолютно прозрачным, а затянутым туманом или дымкой. Для большего реализма необходимо учесть и эффект перспективы. Чтобы поверхность смоделированного объекта не выглядела искусственной, на нее наносится текстура - двухмерная картинка небольшого размера, передающая цвет и фактуру поверхности. Все перечисленные трехмерные объекты с учетом примененных к ним эффектов должны в конечном итоге быть преобразованы в плоское изображение. Эта операция называется рендерингом.

При наличии 3D-ускорителя из всего перечисленного центральный процессор обычно занимается только расчетом координат вершин треугольников при перемещении объектов на сцене (трансформацией), все остальное делает акселератор. Однако в том случае, если 3D-акселератор не может выполнить то или иное действие, оно также выполняется центральным процессором, что, как правило, приводит к сильной потери скорости.

Охарактеризуем болеее подробно наиболее распространенные операции, которые 3D-ускоритель выполняет на аппаратном уровне:

  1. Удаление невидимых поверхностей. Обычно выполняется по методу Z-буфера, который заключается в том, что проекции всех точек трехмерной модели объекта на плоскость изображения сортируются в специальной памяти (Z-буфере) по расстоянию от плоскости изображения. В качестве цвета изображения в данной точке выбирается цвет той точки в Z-буфере, которая наиболее близка к плоскости изображения, а остальные точки считаются невидимыми (если не включен эффект прозрачности), так как они загорожены от нас самой первой точкой. Эта операция выполняется подавляющим большинством 3D-ускорителей. В большинстве современных ускорителей предусмотрены 16-разрядные Z-буферы, размещаемые в видеопамяти на плате.
  2. Закрашивание (Shading) придает треугольникам, составляющим объект, определенный цвет, зависящий от освещенности. Бывает равномерным (Flat Shading), когда каждый треугольник закрашивается равномерно, что вызывает эффект не гладкой поверхности, а многогранника; по Гуро (Gouraud Shading), когда интерполируются значения цвета вдоль каждой грани, что придает криволинейным поверхностям более гладкий вид без видимых ребер; по Фонгу (Phong Shading), когда интерполируются векторы нормали к поверхности, что позволяет добиться максимальной реалистичности, однако требует больших вычислительных затрат и в массовых 3D-ускорителях пока не используется. Большинство 3D-ускорителей умеет выполнять закрашивание по Гуро.
  3. Отсечение (Clipping) определяет часть объекта, видимую на экране, и обрезает все остальное, чтобы не выполнять лишних расчетов.
  4. Расчет освещения. Для выполнения этой процедуры часто применяют метод трассировки лучей (Ray Tracing), позволяющий учесть переотражения света между объектами и их прозрачность. Эту операцию с разным качеством умеют выполнять все 3D-ускорители.
  5. Наложение текстур (Texture Mapping), или наложение плоского растрового изображения на трехмерный объект с целью придания его поверхности большей реалистичности. Например, в результате такого наложения деревянная поверхность будет выглядеть именно как сделанная из дерева, а не из неизвестного однородного материала. Качественные текстуры обычно занимают много места. Для работы с ними применяют 3D-ускорители на шине AGP, которые поддерживают технологию сжатия текстур. Наиболее совершенные карты поддерживают мультитекстурирование - одновременное наложение двух текстур.
  6. Фильтрация (Filtering) и сглаживание (Anti-aliasing). Под сглаживанием понимается уменьшение искажений текстурных изображений с помощью их интерполяции, особенно на границах, а под фильтрацией понимается способ уменьшения нежелательной "зернистости" при изменении масштаба текстуры при приближении к 3D-объекту или при удалении от него. Известна билинейная фильтрация (Bilinear Filtering), в которой цвет пиксела вычисляется путем линейной интерполяции цветов соседних пикселов, а также более качественная трилинейная фильтрация с использованием MIP-карт (Trilinear MIP Mapping). Под MIP-картами (от лат. Multum in Parvum - "многое в одном") понимается набор текстур с разными масштабами, что позволяет в процессе трилинейной фильтрации выполнять усреднение между соседними пикселами и между соседними MIP-картами. Трилинейная фильтрация дает особенный эффект при наложении текстур на протяженный объект, удаляющийся от наблюдателя. Современные платы поддерживают трилинейную фильтрацию.
  7. Прозрачность, или альфа-канал изображения (Transparency, Alpha Blending) - это информация о прозрачности объекта, позволяющая строить такие прозрачные и полупрозрачные объекты, как вода, стекло, огонь, туман и дымка. Наложение тумана (Fogging) часто выделяется в отдельную функцию и вычисляется отдельно.
  8. Смешение цветов, или дизеринг (Dithering) применяется при обработке двух- и трехмерных изображений с большим количеством цветов на устройстве с меньшим их количеством. Этот прием заключается в рисовании малым количеством цветов специального узора, создающего при удалении от него иллюзию использования большего количества цветов. Пример дизеринга - применяемый в полиграфии способ передачи градаций серого цвета за счет нанесения мелких черных точек с различной пространственной частотой. В 3D-ускорителях дизеринг используется для передачи 24-битного цвета в 8- или 16-битных режимах.

Для поддержки функций 3D-ускорителя в играх и других программах существует несколько интерфейсов прикладного программирования, или API (Application Program Interface), позволяющих приложению стандартным образом использовать возможности 3D-ускорителя. (Это свонго стандартизированый рода язык управления 3D акселератором). На сегодняшний день существует множество таких интерфейсов, среди которых наиболее известны Direct3D (Microsoft), OpenGL (Silicon Graphics) и Glide (3Dfx).

Интерфейс Direct3D компании Microsoft стал фактическим стандартом для большинства компьютерных игр; и большинство 3D-ускорителей укомплектованы Direct3D-драйверами. Однако стоит иметь в виду, что Direct3D поддерживается только в среде Windows 95/98, а уже в Windows NT большинство плат не поддерживает аппаратных функций ускорения.

Разработанный компанией Silicon Graphics для своих графических станций Iris GL интерфейс прикладного программирования OpenGL стал общепринятым стандартом для программ трехмерного моделирования и САПР. Используемый в профессиональных 3D-ускорителях, он позволяет очень точно описывать параметры сцены. OpenGL в настоящее время является открытым стандартом, контролируемым ассоциацией OpenGL Architecture Review Board, в которую помимо Silicon Graphics входят Digital, IBM, Intel, Intergraph, Microsoft и др. Несмотря на это, существует множество диалектов OpenGL. По распространенности в области компьютерных игр OpenGL уступает Direct3D.

Драйвер 3D-ускорителя может поддерживать OpenGL в двух режимах: усеченном MCD (Mini Client Driver) и полном ICD (Installable Client Driver). Драйвер MCD реализует только базовый набор операций, ICD- высокооптимизированный драйвер, который обеспечивает максимальное быстродействие.

Интерфейс Glide разработан компанией 3Dfx Interactive для производимых ею ускорителей Voodoo. Glide снискал широкое распространение среди производителей компьютерных игр, хотя, в отличие от OpenGL, Glide не является универсальным 3D API и поддерживает только возможности Voodoo.

В настоящее время наиболее известны следующие 3D-ускорители: ATI 3D Rage Pro, 3D Rage 128 и Rage Fury, Matrox G400; S3 Savage3D; Riva128 и RivaTNT; GeForce256 и GeForce2; 3Dfx Voodoo-Voodoo5. На базе этих чипсетов производятся собственно видеокарты, причем не только перечисленными компаниями, а и компаниями, не выпускающими собственные графические процесоры, например ASUSTek , Creative Labs или Diamond Multimedia.