Должен ли я использовать текстуры размером не более 2?

40

В первые дни OpenGL и DirectX размеры текстур должны были быть степенью двойки. Это означало, что интерполяция значений с плавающей запятой могла быть выполнена очень быстро, используя сдвиг и тому подобное.

Начиная с OpenGL 2.0 (и ранее, через расширение) поддерживаются размеры текстур не в степени двух.

Имеют ли текстуры двух степеней преимущества в производительности на современных интегрированных и дискретных графических процессорах? Какие преимущества имеют текстуры не-степени двух?

Есть ли у значительного числа пользователей настольных ПК карты с поддержкой текстур не в одной степени?

Будет
источник
Посмотрите этот превосходный ответ на похожий вопрос: почему изображения для текстур на iPhone должны иметь степень двух измерений?
Дволе

Ответы:

15

Есть ли преимущества в производительности при использовании двух мощных текстур на современных интегрированных и дискретных графических процессорах?

Большинство современных графических процессоров поддерживают не-две текстуры (NPOT) и хорошо справляются с ними. Падение производительности довольно мало. Но есть несколько проблем для рассмотрения:

  • При использовании текстуры NPOT она занимает больше места в оперативной памяти, как и текстура POT следующего размера. Технически вы просто тратите пространство, которое можно было бы использовать для чего-то;

  • Текстуры NPOT могут обрабатываться заметно медленнее (в OpenGL 2.1 у меня было падение производительности до 30%) по сравнению с POT следующего размера;

  • Старые GPU и встроенные / встроенные чипы не настолько продвинуты, они часто поддерживают текстуры NPOT, но поддержка довольно медленная и неуклюжая;

  • Даже старые графические процессоры могут вообще отказаться принимать / отображать текстуры NPOT;

  • Могут быть артефакты окантовки, вызванные интерполяцией mip-карты, ваша текстура 25x25 может иметь черную полосу, куда были добавлены пиксели, чтобы заполнить ее размером 32x32.

PS Я не знаю наверняка о мобильных устройствах, там может быть еще больше ограничений относительно текстур POT.

Какие преимущества имеют текстуры не-степени двух, если таковые имеются?

Насколько я знаю, есть только 2 преимущества:

  • Они занимают меньше места на жестком диске, если они не упакованы (когда упакованные пустые области дают очень мало надбавки)
  • Вы можете сэкономить время на написании NPOT -> POT Converter. Он понадобится вам для релизной версии, но использовать текстуры NPOT для проектирования и создания прототипов интерфейса / моделей просто отлично

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

Насколько я знаю и проверено на ПК - да. Это включает в себя значительный процент графических процессоров с понижением скорости и незначительными ошибками, а также незначительный процент карт, которые вообще не поддерживают NPOT.

Кромстер говорит, что поддерживает Монику
источник
6

Одно из распространенных применений текстур, не относящихся к степени двойки, - для рендеринга целевых текстур «размером с экран» или «размером с половину экрана» (и т. Д.), Используемых для эффектов постобработки.

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

bluescrn
источник
4

Были ограничения для текстур NPOT на старом оборудовании. Как уже упоминалось в этой вики OpenGL , на некоторых старых устройствах NPOT не должны иметь мип-карт, сжатые текстуры требуют выравнивания 4x4 пикселей, но новое оборудование должно с этим справляться.

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

Что касается использования NPOT вместо POT - если у вас есть изображения, которые имеют размеры NPOT, например, 1600x1200, использование поверхности 2048x2048 пикселей приведет к потере большого количества видеопамяти.

Яри ​​Комппа
источник
3
Если вы используете форматы текстур, сжатые в памяти (например, PVR или DXT), при масштабировании до следующей степени два будет использовать значительно меньше текстурной памяти, чем несжатая, но меньшая текстура NPOT.
Тетрад
3
Ваша формулировка немного расплывчата, поэтому извините, если это излишне с тем, что вы пытаетесь сказать - сжатые текстуры по-прежнему требуют размеров в пикселях, кратных 4, даже на современном оборудовании, которое поддерживает текстуры NPOT.
1
Я ожидаю, что текущее оборудование будет по-прежнему отображать текстуры в драйверах при их загрузке. Это изменяет расположение текстуры, чтобы сделать доступ к оборудованию более оптимальным. Консоли (я не включаю XNA в этом) требуют, чтобы вы вручную выполняли эту оптимизацию макета в своей собственной цепочке инструментов, я уверен, что они работают только на POW2.
Роджер Перкинс
-1

Сила двух текстур увеличивает производительность примерно на 30% для любого типа графических процессоров. Не только старые графические процессоры (на 30% быстрее разница между высокопроизводительным и средним графическим процессором), они занимают на 30% больше оперативной памяти, но требуется меньше виртуальной памяти, они повышают качество на Обеспечивая надлежащий размер текстуры для определенного расстояния, он работает как сглаживание текстур. Темные линии артефакт должен обрабатываться игровыми движками, а движки aaa отлично справляются с ними.

Юсеф Гатави
источник
Это только обеспечивает (уже заданное) преимущество мощности из-двух текстур, он не не решает сам вопрос, поэтому вы должны использовать письменный -мощность-оф-двух текстур , учитывая перечисленные выше преимущества.
Джош
извините, я неправильно понял вопрос, силой 2 вы ограничены 2048, 1024, 512 и т. д., вероятно, это главная причина
Юсеф Гатави
также не степени 2 полезны для текстур, которые не нуждаются в мип-картах, таких как текстуры графического интерфейса и текстуры для персонажа от первого лица, которое всегда близко к камере
yusef ghatavi
-3

Искусство моего программиста только правильного размера.

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

DeadMG
источник
6
Обычно на экране располагаются полигоны, а не текстуры. Полигонам можно дать все, что нужно для УФ - они не обязательно должны быть от 0 до 1; если ваша текстура имеет ширину всего 30, то можно перейти к 0,9375 (это еще одна причина, по которой текстуры POT хороши - уф точно отображаемы).