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


12

Я чув, що останні графічні процесори підтримують текстури без потужності-2 і всі функції просто працюють. Однак я не розумію, як мип-карти діяли б у такому сценарії. Може хтось пояснить?

Відповіді:


13

Правило полягає в тому, що для обчислення наступного розміру карти карти ви розділяєте на два і округляєте до найближчого цілого числа (якщо тільки воно не округляється до 0; у цьому випадку це натомість 1). Наприклад, зображення розміром 57x43 має міп-карти типу:

level 0: 57x43
level 1: 28x21
level 2: 14x10
level 3: 7x5
level 4: 3x2
level 5: 1x1

УФ-карти, вибір LOD та фільтрація працюють точно так само, як і для текстурного розміру з двома розмірами.

Створення пробілів хорошої якості для текстури, що не має двох потужностей, трохи складніше, тому що ви не можете просто в середньому розмістити коробку 2х2 пікселів, щоб зменшити вибірку у всіх випадках. Однак коробчастий фільтр 2x2 був не таким чудовим для початку, тому рекомендується використовувати кращий фільтр для зменшення тиску, такий як Мітчелл-Нетравалі, незалежно від розміру текстури.


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

4

Один із способів подумати про це - графічні картки часто реалізують текстури без потужності-2, просто набиваючи їх, поки вони не мають сили 2 у кожному напрямку. Завдяки цьому більшість речей "просто працюють": наприклад, плитка та фільтрація обладнання. Єдине, що потрібно змінити - це перетворення текстурних координат в координатні зображення.

Якщо реалізовано так, очевидно, як зробити міпапінг: нічого не змінюється. Навіть якщо у вас є графічний процесор, який підтримує текстури без потужності-2 без прокладки, рівні mipmap закінчуються "padding". наприклад, текстура 3х3 мала б текстуру 2х2 як лот 1.


Чи є розбіжність між цією відповіддю та відповіддю Натана Ріда? Чи відповідає реалізація обом описам? Якщо ні, то було б корисно мати посилання на ту чи іншу (або на обидва, якщо це дві різні методи, що використовуються).
трихоплакс

1
@trichoplax Я думаю, що твердження Натана про те, що "створення хороших пробілів якості для текстури, що не має двох потужностей, трохи складніше", змушує наші відповіді хоч трохи не погоджуватися. Це одне, мабуть, заслуговує на більшу розробку.
Джон Калсбек

1
Я думаю, що тут проблема полягає в тому, що ми плутаємо логічне положення текселів з їх "фізичним" розташуванням в пам'яті. 1) Пікселі - це окремі елементи, тобто вам завжди потрібен цілий розмір, і тому зменшення масштабу непарного розміру означає, що ми повинні або округлювати, або округлювати вниз. Оскільки нам доведеться округлювати, як тільки ми дістаємось до текстури Nx1 або 1xN, є сенс завжди округлювати. 2) Якщо їх викладено за фізичними адресами, не рідкість наносити текстуру на якийсь «зручний» розмір «кроку». Це може бути зроблено з 2 причин: а) Це може зробити HW дешевшим & b) якщо P.of.2, замовлення Мортона є простим.
Simon F
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.