- •Содержание
- •Предисловие
- •1.Основные понятия компьютерной графики
- •2.История компьютерной графики
- •3.Аппаратное обеспечение компьютерной графики
- •3.1.Устройства вывода. Экраны
- •3.2.Устройства вывода твердых копий
- •3.3.Устройства ввода. Сканеры
- •3.4.Устройства ввода. Цифровые фотоаппараты
- •3.5.Устройства координатного ввода
- •4.Свойства растровых изображений
- •4.1.Форматы хранения растровых изображений
- •4.2.Цветовые модели растровых изображений
- •5.Аффинные преобразования на плоскости
- •5.1.Понятие однородных координат
- •5.2.Однородные координаты и преобразования в пространстве
- •6.Моделирование поверхностей
- •7.Основы твердотельного моделирования
- •7.1.Методы построения 3d тел
- •7.2.Анализ твердотельных моделей
- •8.Визуализация 3d моделей
- •7Рис. 8.59 – Тор (а), параллельная (б) и центральная (в) проекции его линий очерка.
- •9.Программные технологии 3d графики
- •9.2.Интерфейс 3d api
- •9.3.Библиотека DirectX
- •9.4.Графический ускоритель
- •9.5.3D акселерация
- •10.Растровые алгоритмы
- •10.1.Удаление скрытых линий
- •11.Рендеринг
- •12.Компьютерная анимация
- •13.Предметный указатель
- •14.Список литературы
9.5.3D акселерация
Итак, самый общий ускоритель состоит из геометрического процессора (Geometry Processor, пока практически всегда отсутствует), механизма установки (Setup engine, стадия 7 конвейера) и механизма отрисовки примитивов – закраски (Fill engine, стадии 8 и 9) который при детальном рассмотрении оказывается комбинацией двух блоков – обработки текстур (Texel engine) и обработки буфера кадра (Pixel engine).
Рис. 9.64 – Структура 3D-ускорителя.
Производительность ускорителя зависит от процессора, производительности памяти, шины и самих обрабатывающий блоков. Как правило, приводятся два числа – максимальная пропускная способность (треугольников в секунду, triangle throughput) и максимальная производительность закраски (точек в секунду, fill rate). Такой подход возможен, но не очень корректен. Да и все мы знаем, что лучшим тестом является скорость игры, в которую мы любим играть (fps, кадров в секунду на каком-то стандартном наборе действий) и качество изображения (в цифрах не измерить). Именно эти параметры и необходимо узнать в первую очередь в Internet или, может быть у соседа в подъезде, но не стоит при этом забывать о сильной зависимости числа кадров от объема памяти и мощности процессора компьютера этого самого соседа.
Если не вдаваться в глубокие технические подробности, закраска происходит следующим образом: блок обработки буфера кадра определяет видна ли закрашиваемая точка, например с помощью буфера глубин (Z Buffer). Если она видна, блок обработки текстур вычисляет цвет текстуры соответствующий этой точке примитива. Здесь есть несколько важных моментов – интерполяция (filtering, сглаживание) и выбор уровня текстуры (mip-mapping). Первый обеспечивает изображение без резких прямоугольных пикселей, даже когда вы находитесь вблизи предмета и разрешение текстуры явно недостаточно. Второй устраняет искажения (странные узоры) возникающие при черезмерном удалении от текстуры, выбирая аналог текстуры с меньшим разрешением. Фактически, существует несколько режимов комбинирования этих двух методов. Сейчас наиболее распространены билинейная фильтрация (bilinear filtering - вначале определяется необходимая для этого расстояния текстура, а затем - значение цвета линейно интерполируется между четырьмя соседними точками текстуры, по каждой из координат на поверхности выбранной текстуры) и три-линейная (trilinear - две билинейных для двух текстур, с меньшим и большим разрешениями, затем результат интерполируется между ними). Последняя выглядит более приятно, но и требует больших затрат, так как не реализуется за один такт на современных ускорителях с одним блоком обработки текстур и, в результате, вдвое понижает скорость закраски. Сейчас появились первые ускорители с анизотропной (anisotropic - внутри куба, из двух наборов по 4 соседних точки текстур, и того по 8 точкам) фильтрацией, которая выглядит совсем хорошо, но и занимает еще вдвое больше времени. Затем вычисленный с помощью одного из вышеописанных методов цвет текстуры помещается в буфер кадра, заменяя находившееся там ранее значение, либо комбинируется с ним по какому-либо правилу (combination, blending, alpha-blending), как минимум, ускоритель должен поддерживать режимы Источник*Приемник (Src*Dest) и Источник+Приемник (Src+Dest). Подобные возможности позволяют реализовать цветное освещение, эффекты типа металла или отражения, реализовывать трилинейную фильтрацию там где она не поддерживается аппаратно и т.д. (Так называемое многопроходное построение изображения, multipass rendering).
Как правило, для каждой точки текстуры, кроме RGB цвета, можно задать степень ее прозрачности (alpha, RGBA формат текстуры), которая будет использоваться ускорителем для регулирования воздействия источника на приемник.
Важны также точность представления цветов, 16 бит – Hi-Color или 32 бита – True-Color (последний гораздо лучше) и точность буфера глубин (Z-Buffer, 16 бит хуже, 24 и 32 лучше) используемого для определения видимости отдельных точек примитива.