Поделиться через


Общие сведения о текстурах

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

Ресурс текстуры — это структурированная коллекция данных, предназначенная для хранения текселей. Тексель представляет собой наименьшую единицу текстуры, которую может считывать или записывать конвейер. В отличие от буферов, текстуры можно фильтровать с помощью текстурных сэмплеров, так как они считываются шейдерными блоками. Тип текстуры влияет на фильтрацию текстуры. Каждый тексель содержит от 1 до 4 компонентов, упорядоченных в одном из форматов DXGI, определенных перечислением DXGI_FORMAT.

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

Типы текстур

Direct3D поддерживает несколько представлений с плавающей запятой. Все вычисления с плавающей запятой выполняются в соответствии с определённым подмножеством правил IEEE 754 для 32-разрядной одинарной точности.

Существует несколько типов текстур: 1D, 2D, 3D, каждая из которых может быть создана с mipmap или без них. Direct3D также поддерживает массивы текстур и многофакторные текстуры.

1D Текстуры

1D-текстура в простейшей форме содержит данные текстуры, которые можно устранить с помощью одной координаты текстуры; Его можно визуализировать как массив текселей, как показано на следующем рисунке.

На следующем рисунке показана 1D-текстура:

1d текстура

Каждый тексель содержит ряд компонентов цвета в зависимости от формата хранимых данных. Добавление дополнительной сложности позволяет создать 1D-текстуру с уровнями mipmap, как показано на следующем рисунке.

1d текстура с уровнями мип-карт

Уровень mipmap — это текстура, размер которой в два раза меньше, чем у уровня выше. Самый верхний уровень содержит наиболее подробные сведения, каждый последующий уровень меньше. Для 1D-MIP-карты наименьший уровень содержит один тексель. Кроме того, уровни MIP всегда сокращаются до 1:1.

При создании mipmap для текстуры нечетного размера следующий более низкий уровень всегда четного размера (за исключением случаев, когда нижний уровень достигает 1). Например, схема иллюстрирует текстуру 5x1, следующий самый низкий уровень которого — текстура 2x1, чей следующий (и последний) уровень mip — текстура размером 1x1. Уровни определяются индексом под названием LOD (уровень детализации), который используется для доступа к меньшей текстуре при отрисовке геометрии, которая не так близка к камере.

Массивы текстур 1D

Direct3D также поддерживает массивы текстур. Массив 1D-текстур выглядит концептуально, как показано на следующем рисунке.

массив одномерных текстур

Этот массив текстур содержит три текстуры. Каждая из трех текстур имеет ширину текстуры 5 (это число элементов в первом слое). Каждая текстура также содержит мипмап с 3 уровнями.

Все массивы текстур в Direct3D представляют собой однородный массив текстур; это означает, что каждая текстура в массиве текстур должна иметь одинаковый формат и размер (включая ширину текстуры и количество уровней MIP-карты). Вы можете создавать массивы текстур разных размеров, если все текстуры в каждом массиве соответствуют размеру.

двумерные текстуры и массивы двумерных текстур

Ресурс Texture2D содержит 2D-сетку текселей. Каждый тексель может быть адресован с использованием вектора u, v. Так как это ресурс текстуры, он может содержать уровни mipmap и подресурсы. Полностью заполненный ресурс текстуры 2D выглядит следующим образом.

2d-ресурс текстуры

Этот ресурс текстуры содержит одну текстуру размером 3x5 с тремя уровнями mipmap.

Ресурс массива текстур 2D — это однородный массив двухмерных текстур; То есть каждая текстура имеет одинаковый формат данных и измерения (включая уровни mipmap). Он имеет аналогичный макет, как массив текстур 1D, за исключением того, что текстуры теперь содержат 2D-данные, как показано на следующем рисунке.

массив 2D текстур

Этот массив текстур содержит три текстуры; каждая текстура имеет размер 3x5 и два уровня мипмапа.

использование 2D-массива текстур в качестве куба текстур

Куб текстуры — это 2D-массив текстур, содержащий 6 текстур, по одному для каждого лица куба. Полностью заполненный куб текстуры выглядит следующим образом.

массив из 2d текстур, представляющих куб текстуры

2D-массив текстур, содержащий 6 текстур, можно считывать из шейдеров с встроенными функциями кубической текстуры после привязки к конвейеру с представлением кубической текстуры. Кубы текстур адресуются из шейдера с помощью трехмерных векторов, исходящих из центра куба.

Трехмерные текстуры

Трехмерный ресурс текстуры (также известный как объемная текстура) содержит трехмерный объем текселей. Поскольку это ресурс текстуры, он может содержать уровни mipmap. Полностью заполненная трехмерная текстура выглядит следующим образом.

ресурс текстуры 3D

Если срез трехмерной текстуры mipmap привязан как выходной целевой объект отрисовки (с представлением целевого объекта отрисовки), трехмерная текстура ведет себя так же, как массив 2D текстур с n срезами. На этапе геометрического шейдера выбирается конкретный отрезок отрисовки.

Отсутствует концепция трехмерного массива текстур; поэтому подресурс трехмерной текстуры представляет собой один уровень MIP-карты.

Системы координат для Direct3D определяются для пикселей и текселей.

система координат в пикселях

Система координат пикселей в Direct3D определяет источник целевого объекта отрисовки в левом верхнем углу, как показано на следующей схеме. Центры пикселей смещены на (0.5f, 0.5f) относительно целочисленных координат.

схема системы координат пикселей в direct3d 10

Система координат Texel

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

схема системы координат текселя

Координаты текстуры представлены нормализованным или масштабируемым числом; Каждая координата текстуры сопоставляется с определенным тексельом следующим образом:

Для нормализованной координаты:

  • Точечная выборка: Texel # = floor(U * Ширина)
  • Линейная выборка: левая Тексель # = пол (ширина U), правый Тексель # = левая Тексель # + 1

Для масштабируемой координаты:

  • Выборка точек: Texel # = floor(U)
  • Линейная выборка: левый тексель # = округление вниз(U - 0.5), правый тексель # = левый тексель # + 1

Где ширина, ширина текстуры (в текселях).

Упаковка адресов текстур происходит после вычисления расположения текселя.

текстуры