Як відрізняються texgelFetch та текстура OpenGL?


18

Я розумію основні відмінності між texelFetchта texture, але маю деякі питання щодо деталей:

  • Чи texelFetchпередбачається штраф за виконання? Як, наприклад, не використовувати кеш або таке?
  • Є texelFetchта textureвзаємозамінними при використанні GL_NEAREST?

1
Ви можете написати тестовий випадок і побачити ...
ThorinII

1
Ви забули відзначити відповідь прийнятою, чи це все ще залишається відкритим?
Анко

Відповіді:


23

texelFetchзовсім відрізняється від texture.

textureце ваша звичайна функція доступу до текстури, яка обробляє фільтрацію та нормалізовані ( [0,1]) координати текстури. texelFetchбезпосередньо звертається до текселю в текстурі (без фільтрування), використовуючи ненормалізовані координати (наприклад, (64,64)в текстолі з середнім ішем у текстурі 128х128 проти (.5,.5)нормалізованих координат).


4
+1 Я хотів би додати, що texelFetch призначений для доступу до даних, коли текстура не особливо призначена для відображення у вигляді зображення, але іншого типу даних, на відміну від текстури, яка отримує доступ до текселів, коли вони призначені для використання в якості зображень, тому воно використовує фільтрацію тощо -
concept3d

Чи є різниця у продуктивності?
Ленар Хойт

1
@mcb: можливо, але я б не очікував, що він буде дуже великим, і він, ймовірно, сильно відрізнятиметься від постачальника обладнання. Ефективність - це абсолютно неправильна метрика, яку слід використовувати, вирішуючи, яку з цих функцій викликати: використовуйте правильну для вашої ситуації функцію (вам потрібна фільтрація апаратури, і так потрібно використовувати, textureабо потрібно апаратне забезпечення, щоб не здійснювати фільтрацію, і так потрібно використовувати texelFetch).
Шон Міддлічч

3
@SeanMiddleditch Яким чином показник продуктивності є неправильним показником у цьому випадку? Якщо texelFetchшвидше і достатньо фільтрування найближчого сусіда, ви не можете змінити контекст на NN-фільтрацію з будь-якої причини, було б розумно віддати перевагу цьому texture.
Ленар Хойт

@mcb: texelFetchі по- textureрізному працювати фундаментально. Дивіться також вхідні дані: координати текстури та нормалізовані координати. Вони служать різним цілям. Один - це не просто оптимізація іншого.
Шон Міддлічч

6

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

TexelFetch трактує текстуру як зображення, тому ви можете отримати доступ до вмісту пікселів. Як правило, ви робите це, коли вам потрібен саме той вміст, який є мало, але корисним:

  • Деякі фільтри після обробки (розмиття Гаассіана використовує інтерполяцію зразка текстури, тому вона не може використовувати TexelFetch)
  • Коли вершини повинні зчитувати дані з текстур, це операція, залежна від 2 координат

Tex2D трактує текстуру як текстуру. Ви не хочете точного вмісту пікселя, але хочете максимально реалістичний результат. Зчитування стандартної текстури - це дуже складна операція, яка включає читання інтерпольованих даних з одного або декількох рівнів mipmap, а потім знову інтерполюється. Усі ці дорогі операції - уникати візуальних артефактів.

GL_NEAREST не працюватиме так само, оскільки на полігонах найвищого рівня ви читаєте дані меншим рівнем mipmap, які не є тими самими точними даними, які ви читали б із тексту текселя.

Є один випадок, коли Tex2D (майже) працює однаково з TexelFetch:

  1. фільтр - GL_NEAREST
  2. ви використовуєте неповну піраміду mipmap з 1 рівнем
  3. ваші УФ-речовини не є нормалізованими компонентами вершин (але вам доведеться нормалізувати їх у шейдері)
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.