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


Фильтрация текстур с помощью MIP-карт

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

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

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

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

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

иллюстрация текстуры 64x64 знака опасности

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

иллюстрация текстуры 128x128 знака опасности

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

иллюстрация текстуры 256x256 знака опасности

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

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

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

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

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

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

 

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

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