Я слышал, что все последние графические процессоры поддерживают текстуры не-power-2, и все функции просто работают. Однако я не понимаю, как mip-mapping будет работать в таком сценарии. Может кто-нибудь объяснить?
12
Правило состоит в том, что для вычисления следующего размера mipmap вы делите на два и округляете до ближайшего целого числа (если только оно не округляется до 0, в этом случае вместо 1). Например, изображение размером 57x43 будет иметь такие карты:
level 0: 57x43
level 1: 28x21
level 2: 14x10
level 3: 7x5
level 4: 3x2
level 5: 1x1
УФ-картирование, выбор LOD и фильтрация работают точно так же, как для текстур со степенью двойки.
Генерация мипов хорошего качества для текстуры с не степенью двойки немного сложнее, так как вы не можете просто усреднить блок пикселей 2x2 для уменьшения во всех случаях. Тем не менее, прямоугольный фильтр 2x2 был не так уж хорош для начала, поэтому рекомендуется использовать лучший фильтр понижающей дискретизации, такой как Mitchell-Netravali, независимо от размера текстуры.
Один из способов думать об этом заключается в том, что графические карты часто реализуют текстуры не в виде степени 2, просто дополняя их, пока они не получат степень 2 в каждом направлении. Это заставляет большинство вещей «просто работать»: например, мозаику и аппаратную фильтрацию. Единственное, что нужно изменить, - это преобразование координат текстуры в координаты изображения.
Если реализовано таким образом, очевидно, как сделать mipmapping: ничего не меняется. Даже если у вас есть графический процессор, который поддерживает текстуры не-степени-2 без заполнения, уровни mipmap заканчиваются «заполнением». например, текстура 3х3 будет иметь текстуру 2х2 как lod 1.
источник