Фильтрация текстур с использованием MIP-карт

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

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

Direct3D представляет MIP-карты как цепочку присоединенных поверхностей. Текстура с наиболее высоким разрешением находится в начале цепочки, а далее к ней присоединяются последующие уровни MIP-карты. Этот уровень тоже имеет вложение — следующий уровень MIP-карты, и так далее до самого низкого разрешения MIP-карты.

На следующих рисунках показан пример таких уровней. Точечные текстуры представляют собой знак на контейнере в трехмерной игре от первого лица. При создании MIP-карты текстура с самым высоким разрешением является первой в наборе. Каждая последующая текстура в наборе MIP-карт меньше предыдущей по высоте и ширине на число, соответствующее степени двух. В этом случае максимальное разрешение MIP-карты — 256 пикселей на 256 пикселей. Далее следует текстура размером 128x128 пкс. Последняя текстура в цепочке имеет размеры 64x64 пкс.

Этот знак расположен на максимальном расстоянии, на котором его можно увидеть. Если пользователь находится далеко от знака, игра отображает самую маленькую текстуру в цепочке MIP-карт, которая в данном случае имеет размер 64x64 пкс.

изображение текстуры знака опасности размером 64x64 пкс

Когда пользователь перемещает точку зрения ближе к знаку, используются текстуры цепочки MIP-карты с постепенно увеличивающимся разрешением. Разрешение на следующем рисунке — 128x128 пкс.

изображение текстуры знака опасности размером 128x128 пкс

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

изображение текстуры знака опасности размером 256x256 пкс

Это более эффективный способ имитации перспективы для текстур. Вместо отрисовки одной текстуры во многих разрешениях, быстрее использовать несколько текстур в разных разрешениях.

Direct3D может оценить, какая текстура в наборе MIP-карт имеет разрешение, наиболее близкое к требуемому для вывода, и сопоставляет пиксели пространству текселей. Если разрешение конечного изображения является промежуточным между двумя разрешениями текстур в наборе MIP-карт, Direct3D проверяет тексели обеих MIP-карт и накладывает их цветовые значения друг на друга.

Для использования MIP-карт ваше приложение должно построить набор MIP-карт. Приложения применяют MIP-карты, выбирая набор MIP-карт в качестве первой текстуры в наборе текущих текстур. См. раздел Наложение текстур.

Затем приложение должно установить метод фильтрации, который использует Direct3D для выборки текселей. При самом быстром методе фильтрации MIP-карт Direct3D выбирает ближайший тексель. Используйте перечисленное значение D3DTEXF_POINT, чтобы выбрать это значение. Direct3D может создавать лучшие результаты фильтрации, если приложение использует перечисленное значение D3DTEXF_LINEAR. В этом случае выбирается ближайшая MIP-карта, после чего вычисляется взвешенное среднее значение текселей, окружающих точку текстуры, которой сопоставлен текущий пиксель.

Текстуры MIP-карт используются в трехмерных сценах, чтобы уменьшить время, необходимое для обработки сцены. Они также повышают реалистичность сцены. Однако зачастую для этого требуется большой объем памяти.

Примечание Каждая поверхность в цепочке MIP-карты имеет размеры, которые наполовину меньше, чем у предыдущей поверхности в цепочке. Если MIP-карта верхнего уровня имеет размер 256x128 пкс, размер MIP-карты второго уровня составит 128x64 пкс, третьего уровня — 64x32 пкс и так далее до 1x1 пкс. Невозможно запросить в Levels число уровней MIP-карт, которое приведет к тому, что ширина или высота любой из MIP-карт в цепочке станет меньше 1 пкс. В простом случае поверхности MIP-карты размером 4x2 пкс максимально допустимое значение Levels — 3. Размер верхнего уровня равен 4x2 пкс, размер второго уровня — 2x1, а третьего уровня — 1x1 пкс. При значении Levels больше 3 будет получено дробное значение высоты MIP-карты второго уровня, поэтому использование такого значения запрещено.

 

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

Фильтрация текстур