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


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

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

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

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

Типы текстур

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

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

1D Текстуры

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

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

1d текстура

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

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

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

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

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

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

массив 1d текстур

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Система координат пикселей

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

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

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

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

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

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

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

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

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

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

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

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

Текстуры