Чи слід використовувати текстури, розмір яких не перевищує 2?


40

У перші дні OpenGL та DirectX розміри текстур повинні були мати потужність дві. Це означало, що інтерполяція значень поплавця може бути здійснена дуже швидко, використовуючи зсув тощо.

Починаючи з OpenGL 2.0 (і до цього, через розширення), підтримуються розміри текстур без потужності з двома.

Чи мають текстури потужністю два переваги у продуктивності сучасних інтегрованих та дискретних графічних процесорів? Які переваги мають текстури без потужності двох?

Чи має значна кількість настільних комп’ютерів карт із підтримкою текстур без потужності?


Дивіться цю чудову відповідь на подібне запитання: Чому зображення для текстур на iPhone повинні мати два розміри?
Дволе

Відповіді:


15

Чи є переваги продуктивності в дотриманні текстур потужності двох сучасних інтегрованих та дискретних графічних процесорів?

Більшість сучасних графічних процесорів підтримують неефективність двох (NPOT) текстур і добре обробляють їх. Падіння продуктивності зовсім небагато. Але є кілька проблем, які слід врахувати:

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

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

  • Старі графічні та вбудовані / вбудовані графічні процесори не такі вдосконалені, вони часто підтримують текстури NPOT, але підтримка є досить повільною і незграбною;

  • Навіть старші GPU можуть взагалі відмовитися приймати / відображати тексту NPOT;

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

PS Я не знаю точно про мобільні пристрої, можливо, ще більше обмежень щодо текстури POT.

Які переваги мають текстури без потужності двох, якщо такі є?

Наскільки я знаю, є лише 2 переваги:

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

Чи є велика група користувачів настільних комп’ютерів, у яких немає карт, які підтримують текстури без потужності?

Наскільки я знаю і тестував на ПК - Так. Це включає в себе основний відсоток скорочення / незначні помилки графічних процесорів та незначний відсоток карт, які взагалі не справляються з NPOT.


6

Одне поширене використання текстур без потужності двох - це для "розміру екрана" або "напівекранного розміру" (і так далі) надання цільових текстур, що використовуються для ефектів після обробки.

У цих випадках mipmaps не потрібні, буфер завжди не стискається, тому незвичайні розміри текстури тут створюють менше проблем.


4

Існували обмеження щодо текстур NPOT для більш старого обладнання. Як уже згадувалося на цій вікі OpenGL , деякі старі апаратури вимагають, щоб NPOT не мали міп-карти, стислі текстури вимагають вирівнювання 4х4 пікселів, але нове обладнання повинно працювати з нею ідеально.

На мій досвід, деякі навіть відносно нові апаратні відчуття вражають велику ефективність, якщо ви використовуєте текстури NPOT замість POT. Я не знаю, в чому проблема; можливо, що в деякій комбінації станів візуалізації рендерінг насправді проводиться в програмному забезпеченні. Тож, якщо у вас немає поважних причин, я б рекомендував все ж намагатися використовувати POTs якнайбільше.

Щодо того, чому використовуєте NPOT замість POT - якщо у вас є зображення розмірів NPOT, скажімо, наприклад, 1600x1200, використання поверхні пікселів 2048x2048 витратить багато відеопам'яті.


3
Якщо ви використовуєте формати текстур, які стискаються в пам'яті (наприклад, PVR або DXT), масштабування до наступної потужності двох використовуватиме значно меншу пам'ять текстури, ніж нестиснуту, але меншу текстуру NPOT.
Тетрад

3
Ваше формулювання трохи розпливчасте, тож вибачте, якщо це зайве з тим, що ви намагаєтесь сказати - стислі текстури все ще вимагають розміру пікселів у кратні 4, навіть на сучасному апаратному забезпеченні, що підтримує текстури NPOT.

1
Я б очікував, що поточне обладнання все ще залишатиме плитки / шипучі текстури у драйверах, коли ви завантажуєте їх. Це змінює макет текстури, щоб зробити доступ більш оптимальним для обладнання. Консолі (я не включаю XNA в це) вимагають, щоб ви вручну виконали оптимізацію цього макета у власному ланцюжку інструментів, я впевнений, що вони працюють лише на POW2.
Роджер Перкінс

-1

потужність 2 текстур збільшує продуктивність приблизно на 30% для будь-якого типу GPU не лише старих графічних процесорів (на 30% швидше - різниця між високоякісним графічним процесором і середнім), вони беруть на 30% більше оперативної пам'яті, але потрібно менше vram, вони підвищують якість на Забезпечивши належний розмір текстури для певної відстані, це працює як анти-згладжування текстур, артефакт темної лінії повинен оброблятися ігровими двигунами, а двигуни Aaa прекрасно обробляють їх


Це забезпечує лише (вже вказану) перевагу текстур потужності двох, це не стосується самого питання, саме тому ви б використовували текстури без потужності з урахуванням вищеперелічених переваг.
Джош

вибачте, я неправильно зрозумів питання, потужністю 2 ви обмежені до 2048, 1024, 512 і т. д., ймовірно, це головна причина
yusef ghatavi

також не потужність 2 корисна для текстури, яка не потребує картах, таких як gui текстури та текстури для персонажа від першої особи, який завжди близький до камери
yusef ghatavi

-3

Моє мистецтво програміста лише правильного розміру.

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


6
Зазвичай на екрані розміщуються багатокутники, а не текстури. Полігонам можна давати всі необхідні УФ-випромінювання - їм не обов’язково потрібно переходити від 0 до 1; якщо ваша текстура становить лише 30 завширшки, добре перейти до 0,9375 (це ще одна причина, що текстури POT хороші - УФ-випромінювання точно представлені).
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.