В первые дни OpenGL и DirectX размеры текстур должны были быть степенью двойки. Это означало, что интерполяция значений с плавающей запятой могла быть выполнена очень быстро, используя сдвиг и тому подобное.
Начиная с OpenGL 2.0 (и ранее, через расширение) поддерживаются размеры текстур не в степени двух.
Имеют ли текстуры двух степеней преимущества в производительности на современных интегрированных и дискретных графических процессорах? Какие преимущества имеют текстуры не-степени двух?
Есть ли у значительного числа пользователей настольных ПК карты с поддержкой текстур не в одной степени?
opengl
textures
performance
Будет
источник
источник
Ответы:
Есть ли преимущества в производительности при использовании двух мощных текстур на современных интегрированных и дискретных графических процессорах?
Большинство современных графических процессоров поддерживают не-две текстуры (NPOT) и хорошо справляются с ними. Падение производительности довольно мало. Но есть несколько проблем для рассмотрения:
При использовании текстуры NPOT она занимает больше места в оперативной памяти, как и текстура POT следующего размера. Технически вы просто тратите пространство, которое можно было бы использовать для чего-то;
Текстуры NPOT могут обрабатываться заметно медленнее (в OpenGL 2.1 у меня было падение производительности до 30%) по сравнению с POT следующего размера;
Старые GPU и встроенные / встроенные чипы не настолько продвинуты, они часто поддерживают текстуры NPOT, но поддержка довольно медленная и неуклюжая;
Даже старые графические процессоры могут вообще отказаться принимать / отображать текстуры NPOT;
Могут быть артефакты окантовки, вызванные интерполяцией mip-карты, ваша текстура 25x25 может иметь черную полосу, куда были добавлены пиксели, чтобы заполнить ее размером 32x32.
PS Я не знаю наверняка о мобильных устройствах, там может быть еще больше ограничений относительно текстур POT.
Какие преимущества имеют текстуры не-степени двух, если таковые имеются?
Насколько я знаю, есть только 2 преимущества:
Существует ли большое количество пользователей настольных компьютеров, у которых нет карт, поддерживающих текстуры не-степени двух?
Насколько я знаю и проверено на ПК - да. Это включает в себя значительный процент графических процессоров с понижением скорости и незначительными ошибками, а также незначительный процент карт, которые вообще не поддерживают NPOT.
источник
Одно из распространенных применений текстур, не относящихся к степени двойки, - для рендеринга целевых текстур «размером с экран» или «размером с половину экрана» (и т. Д.), Используемых для эффектов постобработки.
В этих случаях mip-карты не нужны, буфер всегда несжатый, поэтому странные размеры текстур вызывают меньше проблем
источник
Были ограничения для текстур NPOT на старом оборудовании. Как уже упоминалось в этой вики OpenGL , на некоторых старых устройствах NPOT не должны иметь мип-карт, сжатые текстуры требуют выравнивания 4x4 пикселей, но новое оборудование должно с этим справляться.
По моему опыту, некоторые даже относительно новые аппаратные средства испытывают значительное снижение производительности, если вы используете текстуры NPOT вместо POT. Я не знаю, в чем проблема; возможно, что в некоторой комбинации состояний рендеринга рендеринг фактически выполняется программным обеспечением. Поэтому, если у вас нет веских причин, я бы порекомендовал по-прежнему стараться использовать как можно больше горшков.
Что касается использования NPOT вместо POT - если у вас есть изображения, которые имеют размеры NPOT, например, 1600x1200, использование поверхности 2048x2048 пикселей приведет к потере большого количества видеопамяти.
источник
Сила двух текстур увеличивает производительность примерно на 30% для любого типа графических процессоров. Не только старые графические процессоры (на 30% быстрее разница между высокопроизводительным и средним графическим процессором), они занимают на 30% больше оперативной памяти, но требуется меньше виртуальной памяти, они повышают качество на Обеспечивая надлежащий размер текстуры для определенного расстояния, он работает как сглаживание текстур. Темные линии артефакт должен обрабатываться игровыми движками, а движки aaa отлично справляются с ними.
источник
Искусство моего программиста только правильного размера.
Это, конечно, упрощает мою логику отображения, так как я знаю, что если я хочу установить текстуру в верхнем левом углу экрана, я могу просто установить 0,0 как верхний левый угол текстуры и увидеть все текстуры в правильном месте, тогда как если бы мне пришлось добавить отступ 0 альфа, расположение текстуры к краю экрана было бы более сложным. Плюс, конечно, что 0alpha все еще должен быть альфа-смешанным, и если я смотрю на непрозрачные текстуры, я могу предпочесть не иметь альфа-канала.
источник