В компьютерной графике блок текстурирования (TMU) — компонент современных графических процессоров (GPU). Они способны поворачивать, изменять размер и деформировать  (англ.) растровое изображение  (англ.), чтобы поместить его на произвольную плоскость заданной 3D-модели в качестве текстуры, в процессе, называемом текстурированием. В современных видеокартах он реализован как дискретный этап в графическом конвейере  (англ.),[1] в то время как при первом появлении он был реализован как отдельный процессор, например, как в видеокарте Voodoo2.

История и предпосылки править

TMU появился из-за необходимости вычислений, связанных с дискретизацией и преобразованием плоского изображения (как текстурной карты) в правильный угол и перспективу в 3D-пространстве. Вычислительная операция представляет собой большое матричное умножение, с которым процессоры того времени (ранние Pentiums) не могли справиться с приемлемой производительностью.

В 2013 году TMU являются частью шейдерного конвейера и отделены от выходных конвейеров рендеринга  (англ.) (ROPs). Например, в GPU Cypress от AMD каждый шейдерный конвейер (а их 20) имеет четыре TMU, что даёт GPU 80 TMU. Это сделано разработчиками чипов, чтобы тесно связать шейдеры и текстурные движки, с которыми они будут работать.

Геометрия править

3D-сцены  (англ.) обычно состоят из двух частей: 3D-геометрии и текстур, покрывающих эту геометрию. Текстурные блоки в видеокарте берут текстуру и «накладывают» её на геометрию. То есть они оборачивают текстуру вокруг геометрии и создают текстурированные пиксели, которые затем могут быть записаны на экран. Текстуры могут быть реальными изображениями, картами освещения или даже картами нормалей для расширенных эффектов освещения поверхности.

Коэффициент заполнения текстуры править

Для рендеринга 3D-сцены текстуры накладываются поверх полигональных сеток. Это называется текстурированием и выполняется блоками текстурирования (TMU) на видеокарте. Скорость заполнения текстур — это показатель скорости, с которой конкретная видеокарта может выполнять текстурирование.

Хоть обработка пиксельных шейдеров становится все более важной, этот показатель все ещё имеет определённый вес. Лучший пример тому — X1600 XT. У этой карты соотношение процессоров пиксельных шейдеров и блоков текстурирования составляет 3 к 1. В результате X1600 XT достигает более низкой производительности по сравнению с другими GPU той же эпохи и класса (например, nVidia 7600GT). В среднем диапазоне текстурирование все ещё может быть узким местом. Однако на высоких настройках X1900 XTX имеет то же соотношение 3 к 1, но справляется с задачей просто отлично, поскольку разрешение экрана достигает максимума, а мощности текстурирования более чем достаточно для работы с любым дисплеем.

Подробности править

Блоки текстурирования (TMU) править

Текстуры нуждаются в адресации и фильтрации. Эту работу выполняют TMU, которые работают в связке с блоками пиксельных и вершинных шейдеров  (англ.). Задача TMU — применять текстурные операции к пикселям. Количество текстурных блоков в графическом процессоре используется при сравнении двух разных карт по производительности текстурирования. Логично предположить, что карта с большим количеством TMU будет быстрее обрабатывать информацию о текстуре. В современных графических процессорах TMU содержат блоки адресации текстур (TA) и блоки фильтрации текстур (TF). Блоки адресации текстур сопоставляют тексели с пикселями и могут выполнять режимы адресации текстур. Блоки фильтрации текстур опционально выполняют аппаратную фильтрацию текстур  (англ.).

Конвейеры править

Конвейер — это архитектура видеокарты, которая даёт общее точное представление о вычислительной мощности графического процессора.

Конвейер не является официально принятым техническим термином. В графическом процессоре существуют различные конвейеры, поскольку в каждый момент времени выполняются разные функции. Исторически сложилось так, что конвейером называют пиксельный процессор, подключённый к выделенному TMU. Geforce 3 имел четыре пиксельных конвейера, каждый из которых имел два TMU. Остальная часть конвейера выполняла такие операции, как глубина и смешивание.

ATI Radeon 9700 был первым, кто сломал эту форму, разместив несколько вершинных шейдеров независимо от пиксельных шейдеров. Графический процессор R300, используемый в Radeon 9700, имел четыре глобальных вершинных шейдера, но разделял остальную часть конвейера рендеринга пополам (он был, так сказать, двухъядерным) каждая половина, называемая квадом, имела четыре пиксельных шейдера, четыре TMU и четыре ROP.

Некоторые блоки используются чаще, чем другие, и в попытке увеличить производительность процессора, они попытались найти «золотую середину» в количестве блоков, необходимых для оптимальной эффективности без избыточного использования кремния. В этой архитектуре название «пиксельный конвейер» потеряло свой смысл, поскольку пиксельные процессоры больше не были привязаны к отдельным TMU.

Вершинный шейдер уже давно был отсоединён, начиная с R300, а вот с пиксельным шейдером все было не так просто, поскольку для работы с ним требовались цветовые данные (например, образцы текстур), а значит, он должен был быть тесно связан с TMU.

Такая связь сохранилась и по сей день: шейдерный движок, состоящий из блоков, способных работать с вершинными или пиксельными данными, тесно связан с TMU, но имеет кроссбарный диспетчер между своим выходом и банком ROP.

Выходные конвейеры рендеринга (ROPs) править

Выходной конвейер рендеринга — это унаследованный термин, который чаще называют блоком вывода рендера  (англ.). Его задача — контролировать выборку пикселей (каждый пиксель ‑ это безразмерная точка), поэтому он управляет сглаживанием, когда в один пиксель объединяется более одного образца. Все отрисованные данные должны пройти через ROP, чтобы быть записанными в кадровый буфер, откуда они могут быть переданы на дисплей.

Таким образом, ROP — это место, где выходные данные GPU собираются в растровое изображение, готовое к отображению.

Использование в GPGPU править

В GPGPU текстурные карты в одномерных, двумерных или трёхмерных измерениях могут использоваться для хранения произвольных данных. Обеспечивая интерполяцию, блок текстурирования предоставляет удобные средства для аппроксимации произвольных функций таблицами данных.

Ссылки править

Примечания править

  1. Dev Hardware - The Graphics Pipeline. Дата обращения: 11 мая 2006. Архивировано из оригинала 28 мая 2006 года.