3D-ускорители. Теория {ver}

Часть II

32- и 16-битная графика

Большинство современных ЗD-уско-рителей умеет работать с 16- и 32-битной глубиной цвета, однако нагрузка на память во втором случае возрастает более чем в два раза, и скорость рендеринга несколько падает. Это связано с тем, что, кроме графического ядра, которому приходится оперировать с данными вдвое большего объема, получать доступ к памяти должен еще и RAMDAC. С ростом пропускной способности памяти и с увеличением внутреннего кэша чипов ЗD-ускорителей эта проблема становится все менее существенной, и постепенно разница в скорости при работе с 16- и 32-битной глубиной цвета исчезнет. Но на данный момент она все же есть, поэтому, играя при 16-битной глубине цвета, можно получить довольно существенный прирост скорости.

Но здесь стоит заметить, что 16 бит — это всего 65 536 цветов, и качество изображения в данном режиме в случае наложения друг на друга большого числа полупрозрачных объектов резко падает. 32-битный режим этого недостатка, естественно, не имеет. Спасает производителей только то, что обычно все предварительные вычисления осуществляются с 32-битной точностью, и только при записи пиксела в кадровый буфер производится понижение цветности. При этом стоит упомянуть две крайности, существующие на сегодняшний момент, — это чипсеты ATI Rage 128 и семейство чипов компании 3dfx. В случае с Rage 128 16-битное изображение имеет ужасающее качество, однако этот чипсет с наименьшими потерями в производительности может работать с 32-битным цветом (стоит отметить, что до сих пор существует очень большое число трехмерных игр, не поддерживающих полноцветные режимы). А вот компания 3dfx, наоборот, выпускает свои чипсеты с поддержкой глубины цвета только 16 бит, но изображение при выводе на экран монитора подвергается интерполяции и приводится к 22-битной глубине цвета, что дает возможность получать наивысшее качество изображения среди всех остальных чипсетов, работающих с 16-битным рендерингом. Но и 3dfx обещает в следующем поколении своих чипсетов (VooDoo 4) включить поддержку 32-битного рендеринга.

8-, 16- и 32-битные текстуры, RGB, RGBA

Текстуры используются для придания объектам реального вида. Если не использовать текстуры, то все объекты в играх будут представлять собой однотонные фигурки. Текстура позволяет имитировать материал, из которого изготовлен объект или его часть.

Текстуры различаются разрешением и форматом представления. Форматом представления обычно является RGB (Red, Green, Blue) или RGBA с различной глубиной цвета, то есть с количеством разрядов, приходящихся на красный, синий и зеленый цвета и канал прозрачности (Alpha channel). Для полноцветных текстур используется либо формат 8,8,8 (24 бита), либо 8,8,8,8 (32 бита) — это самый полный формат представления. Для 16-битных текстур используются следующие варианты представления: 4,4,4,4 — по 16 градаций на цвет (всего 4096 цветов) и 16 градаций прозрачности или 5,6,5 (по 32 градации красного и синего и 64 градации зеленого цвета) и 5,5,5,1 (по 32 градации каждого цвета и один бит для представления прозрачности — прозрачно/непрозрачно). 8-битные текстуры обычно используются для мелких деталей и имеют собственную 16-разрядную палитру.

Максимальное разрешение текстур сейчас, в общем-то, лимитируется, во-первых, присутствием на рынке огромного числа старых чипсетов, большинство из которых может работать только с текстурами размером до 256x256, а во-вторых, существенно большими требованиями к пропускной способности шины передачи данных к ускорителю и объему видеопамяти чипсета. Первое ограничение уже теряет свою актуальность, а второе преодолевают, применяя все более быстрые шины передачи данных или используя компрессию текстур.

Компрессия текстур

Технология аппаратной компрессии текстур реализована в серии чипсетов Savage3D фирмы S3 и получила название S3TC. Компрессия используется для уменьшения объема памяти, занимаемой текстурами, и увеличения качества изображения за счет использования текстур большего разрешения. Однако на данный момент алгоритм S3TC имеет ряд ограничений и может использоваться только для 16-битных текстур. Используемый на данный момент в играх коэффициент сжатия не превышает 4:1, так как при коэффициенте сжатия 6:1 появляются существенные искажения изображения. Стоит также отметить, что не для всех форматов данных достижимо сжатие 4:1. Например, для формата 4,4,4,4, используемого, например, в Quake II, возможно сжатие только 2:1 из-за большего, по сравнению с форматами 5,5,5,1 или 5,6,5, объема данных об альфа-канале. Основной принцип компрессии заключается в том, что для блока изображения 4Х4 пиксела выбираются два базовых и два дополнительных цвета, и по ним восстанавливаются исходные цвета. Естественно, при этом редко удается избежать искажений текстуры. Но несмотря на все эти недостатки, все больше производителей игр говорят о включении поддержки компрессии текстур в своих играх, так как возможность активного использования текстур большого размера поднимает игры на новый уровень реалистичности.

Уровни детализации

Одним из методов понижения вычислительной нагрузки при обработке ЗD-сцены является применение разных версий одной текстуры для разных полигональных сеток; сокращенно этот метод и подобные составные текстуры называют Mipmap (сокращение от латинского Multum In Parvam (много в одном) и от английского слова Map (карта). Обычно под mipmap-текстурой подразумевают текстуру, содержащую несколько уровней детализации, называемых LOD (сокращение от английского Level Of Detail), то есть применяются разные по размеру версии исходной текстуры для близких и далеких по отношению к наблюдателю полигонов. Для близкорасположенных полигонов используются самые точные из набора текстур, для удаленных полигонов применяются версии текстуры все меньших и меньших размеров. Это позволяет, с одной стороны, устранить некоторые неприятные эффекты, связанные с интерполяцией большой текстуры и наложением ее на мелкие участки с коррекцией перспективы, а с другой стороны — тратить меньше ресурсов для наложения текстур на удаленные объекты. Однако возникают проблемы состыковки разных уровней детализации в пределах одного объекта. Вообще, при наложении текстур применяется несколько методов удаления эффекта «зернистости» текстур при увеличении (когда текстура на объектах выглядит состоящей из квадратиков); различают билинейный, трилинейный и анизотропный методы фильтрации текстур (два последних неразрывно связаны с mipmap-текстурами).

Билинейная интерполяция подразумевает только сглаживание самой текстуры и переходов между текстурами. В общем, получаются неплохие результаты, но наблюдаются многочисленные артефакты (ошибки отображения) между LOD-уровнями. Помимо билинейной интерполяции на профессиональных станциях 3D-графики применяется бикубическая интерполяция, обеспечивающая существенно лучшие по качеству результаты сглаживания. Трилинейная фильтрация подразумевает использование специальных алгоритмов для вычисления промежуточных уровней детализации между двумя соседними уровнями и применение билинейной интерполяции к получившимся текстурам. Метод практически полностью удаляет все артефакты на изображении. Анизотропная фильтрация является продолжением трилинейной и на сегодняшний момент считается наилучшей при работе с mipmap-текстурами. Mipmap готовится либо самим создателем текстур, либо автоматически вычисляется чипом ЗD-ускорителя (например, RivaTNT может автоматически вычислять до 13 уровней исходной текстуры).

Мультитекстурирование

Еще одним непременным атрибутом современного ЗО-ускорителя становится поддержка технологии мульти-текстурирования. Она подразумевает одновременное наложение нескольких текстур на одну поверхность и при создании игр впервые была применена в Quake. В Quake на каждую сетку накладывается две тек- стуры. Первая — базовая, вторая — меньшего разрешения — используется для эмуляции освещения и получила у нас название «карта теней» (или lightmaps в оригинале). Для данного процесса требуется два прохода при рендеринге каждого участка: вначале накладывается первая текстура, затем вторая — поверх. В результате чип ЗО-ускорителя тратит в два раза больше ресурсов на растеризацию ЗD-моделей. Избежать этого можно, поставив несколько параллельных текстурных блоков, каждый из которых будет накладывать на полигональную сетку свою текстуру. Помимо снижения вычислительных затрат на расчет освещения (можно все тени рассчитать заранее и не тратить ресурсы процессора на расчет освещенности каждого полигона) Мультитекстурирование позволяет использовать в играх карты рельефа поверхностей (bumpmapping).

Карты рельефа

Рельеф на поверхности обычно задается с помощью карты высот (bumpmap), которая указывает различия в высоте точек поверхности. Самый лучший метод создания такого рельефа — на основании карты высот произвести дробление поверхности на множество мелких треугольников, соответствующим смещением координат их вершин сделать реальную рельефную поверхность и передать ее на дальнейшую обработку (такой метод называется displacement. — Прим. ред.). Однако этот метод ведет к огромному росту вычислительных затрат и применяется только в продвинутых программах ЗD-моделирования. Более простым и наиболее широко применяемым методом является создание карты теней и смещений текстур на основании карты высот в зависимости от направления взгляда наблюдателя и размещения источников освещения. При не слишком больших отклонениях угла зрения от перпендикулярного к поверхности он дает вполне приемлемые результаты с точки зрения реалистичности и легко реализуется практически на всех ЗD-ускорителях.

Тесселяция

Тесселяция — это разбиение поверхности на более простые фигуры, а простейшей плоской фигурой, как известно, является треугольник. В общем случае тесселяции подвергаются не только плоские, но и криволинейные поверхности; во втором случае это приводит к ухудшению восприятия гладкой поверхности (рис. 4). Создателю игры, использующей такие поверхности (яркий пример — Quake Arena), всегда приходится искать компромисс между скоростью обработки объекта и точностью его представления.

Криволинейные поверхности

Использование сплайновых криволинейных поверхностей поднимает игры на новый уровень реальности (реальный мир практически не имеет абсолютно плоских поверхностей). Но в результате создатель игры сталкивается с невозможностью использования мощностей ЗD-ускорителя и вынужден либо создавать собственные методы отображения криволинейных объектов на экране (как это сделано в игре Ecstatica), либо после расчета положения объектов производить разбиение (тесселяцию) и передавать полученную сетку из треугольников на обработку ускорителю.

API

Понятие современной ЗО-графики неразрывно связано с API-интерфейсами (Application Programming Interface). В случае с ЗD-ускорителя-ми API — это набор библиотек, представляющих собой готовый интерфейс для работы программы с 3D-ускорителем. На сегодняшний день их существует достаточно много, но все их можно разделить на два класса; универсальные и специализированные.

Универсальные API являются общими для всех ЗD-ускорителей, а поддержка аппаратного ускорения для этих API возлагается на сами 3D-ускорители. В первую очередь следует выделить OpenGL и Direct3D. Интерфейс OpenGL разработан фирмой Silicon Graphics и поддерживается многими операционными системами. Direct3D — это межплатформный язык описания трехмерных пространств от компании Microsoft. Оба они используются в основном в программах компьютерной анимации, но также применяются и в некоторых играх.

Специализированные API предназначены для работы с ускорителями, построенными на определенных ЗD-чипсетах; наиболее известными среди них являются Glide API — интерфейс для работы с чипами VooDoo, R-RedLine — интерфейс для работы с чипами Rendition Verite, Metal для чипов Savage3D и т.п. Программы, написанные с использованием специализированных API, работают только на тех акселераторах, под которые создавались эти API. OpenGL получил распространение в среде персональных компьютеров с момента появления игры Quake II, использовавшей некоторые возможности этой библиотеки. Данная библиотека берет на себя обработку сцены начиная с четвертого этапа и, соответственно, является достаточно высокоуровневой. С одной стороны, это хорошо, так как дает возможность совершенно не задумываться о том, на какой аппаратуре будет работать приложение. Но, с другой стороны, это урезает возможности программистов по введению новых эффектов в игры и использованию специфических функций ускорителей (как это получилось когда-то с компрессией текстур).

Direct3D делится на две части: одна высокоуровневая, берущая на себя обработку с пятого этапа; другая низкоуровневая, предоставляющая программистам свободу вплоть до седьмого этапа. Но появляющаяся таким образом возможность достаточно свободного манипулирования разными ЗD-ускорителями также приводит и к существенному усложнению программирования, так как каждый акселератор имеет собственные отличия, которые необходимо учитывать. Большинство специализированных API предоставляет только низкоуровневый (с седьмого этапа) интерфейс программирования.

Что сейчас

После краткого знакомства с базовыми понятиями можно перейти к обсуждению текущего состояния рынка ЗО-ускорителей и того, что нас ожидает в будущем. В первую очередь следует упомянуть о том, что в среде ЗО-акселера-торов есть исключения из общего правила обработки ЗО-объектов. Эти исключения существовали с самого начала развития рынка игровых 3D-акселераторов. Первым был, как это ни странно, чипсет фирмы nVidia NV1, который позволял работать с криволинейными поверхностями (сплайнами третьего порядка. — Прим.ред.) и поддерживал затенение по методу Фонга (до настоящего времени не умеет делать ни один другой ЗD-ускоритель). Но, столкнувшись с определенным неприятием данной технологии со стороны производителей ЗD-игр (для чипа естественно резкое падение скорости обработки при работе с традиционными плоскими полигональными поверхностями), разработчики nVidia решили пойти по традиционному пути и следующий свой чип Riva 128 сделали максимально приближенным к API Direct3D, что избавило их от необходимости написания собственного API.

Следующим ярким представителем «белых ворон» явился чип PowerVR фирмы VideoLogic, который работал с объектами, образованными пересечениями бесконечных плоскостей. Естественно, что и у него при работе с объектами, представленными треугольниками, наблюдается падение производительности. В общем-то, это удел практически всех чипов обработки ЗD-графики, собственный API которых существенно отличается от Direct3D и OpenGL, и применяются они чаще в мощнейших игровых приставках, нежели внутри персонального компьютера.

Тайловая архитектура

С точки зрения обработки всего поля зрения, выделяются чипы с так называемой тайловой (tile — секция) архитектурой. Основное их отличие от остальных — это обработка изображения не сразу, а маленькими кусочками, фрагмент за фрагментом. Вообще такой подход имеет множество преимуществ перед традиционным методом обработки. Мы рассмотрим эту технологию на примере самого последнего представителя семейства PowerVR, чипов PowerVR Series 2 (сейчас это PowerVR DC2, предназначенный для игровых приставок, и PowerVR 250 — для рынка PC). Для начала стоит отметить, что существует возможность практически линейного наращивания мощности ускорителя за счет установки нескольких модулей обработки 3D-графики, кроме того, за счет использования специального алгоритма удаления невидимых поверхностей отсутствует необходимость в 2-буфе-ре, а следовательно, снижаются требования к объему памяти, необходимому для обработки изображения. Во время передачи обработанного блока изображения в основную память есть возможность достаточно легко применять разные алгоритмы конечной обработки изображения, например производить антиалиасинг всей сцены.

Помимо этого уже упомянутые специальные методы удаления невидимых поверхностей приводят к тому, что скорость обработки и закраски полигонов в сцене практически не зависит от числа перекрывающих друг друга плоскостей, в результате мы всегда имеем пиковую скорость закраски (fillrate) многоугольников в сцене, что не может не приводить к увеличению скорости работы по сравнению с чипами «традиционной» архитектуры. А наличие хорошего запаса скорости у ядра геометрической обработки треугольников может привести к появлению первых экземпляров игровых ЗО-ак-селераторов, поддерживающих затенение по методу Фонга.

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

Методы увеличения скорости

Основными методами, применяемыми для увеличения мощности 3D-yc-корителей, являются увеличение скорости работы чипа и памяти (повышение тактовой частоты), увеличение пропускной способности интерфейса памяти, увеличение числа модулей обработки ЗD-графики, применение геометрических процессоров. Увеличение скорости работы чипа за счет обыкновенного подъема тактовой частоты является самым простым и, пожалуй, самым дешевым методом увеличения скорости работы ЗD-ускорителя, однако этот путь сопряжен с проблемами технологического плана. Повышение частоты работы неизбежно повышает энергопотребление и, соответственно, нагрев чипа. Принимая во внимание, что сложность чипов интенсивно растет и число транзисторов и, соответственно, площадь их чипов неуклонно увеличивается, мы не можем не видеть, что эта проблема встает сегодня с особой остротой. Уменьшить влияние этого фактора можно переходом на производство чипов с технологии 0,35 мкм на 0,25 и далее — на процесс 0,8 мкм.

Повышение скорости работы памяти имеет значение в том случае, когда скорость обработки графики серьезно превышает скорость передачи необходимых для обработки данных. Учитывая глубокую конвейеризацию и детерминированность всех процессов в ЗD-графике, становится понятным, что это достаточно эффективный путь, особенно при наличии нескольких обрабатывающих модулей, имеющих общую шину передачи данных. К тому же снимается проблема, связанная с наличием быстрого RAMDAC, которому также нужен постоянный доступ к памяти. Этот метод сейчас часто применяется многими производителями чипов (например, nVidia RivaTNT2 Ultra имеет собственную частоту 150 МГц, а частоту памяти — 183 МГц).

Увеличение числа модулей обработки ЗD-графики идет сейчас двумя путями. Первый связан с увеличе- нием числа модулей, отвечающих за наложение текстур (обычно используется два). Этот метод помогает при мультитекстурировании, когда каждый модуль накладывает одну из нескольких текстур на объект. Но если мультитекстурирование не используется, то этот метод не дает никакого результата. Поэтому зачастую второй модуль текстурирования (например, на nVidia RivaTNT) может работать на пару с первым, что дает существенный прирост скорости (на 50-80%). Другим путем является простое наращивание числа самих ЗD-ускорителей, например, можно поставить две схемы VooDoo2, работающие в режиме SLI (Scan Line Interleave), и получить в идеале двукратный прирост производительности. Компания Metabyte сообщила в начале 1999 года о разработке технологии РОС, позволяющей ставить практически любые ЗО-акселерато-ры параллельно, чтобы каждый ускоритель обрабатывал свою часть изображения.

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

Автор: Автор: Дмитрий Иванов

Содержание:

Комментарии

Андрей (добавлено 5 июня 2006 г. в 14:53)
Отличная статья, хоть и не новая, но доходчиво объясняет устройство и принип работы видеокарт.
Цитировать

Добавить комментарий




:smile1: :smile2: :smile3: :smile4: :smile5: :smile6: :smile7: :smile8: :smile9: :smile10: :smile11: :smile12: :smile13: :smile14: :smile15: :smile16: :smile17: :smile18:


Яндекс цитирования Rambler's Top100 Рейтинг@Mail.ru
Реклама: