Трилинейная фільтрація: техніка поліпшення якості зображень

  1. Вступ
  2. Mip-mapping і обчислення ступеня деталізації
  3. Проблеми Mip-текстурирования
  4. трилинейная фільтрація
  5. Поточний стан справ в області виробництва графічних чіпсетів
  6. Висновок

У даній статті пояснюється, чому на певному рівні візуалізації з'являються помилки або артефакти, викликані процесом накладення текстур на тривимірні об'єкти, а так же представляються концепції використання текстур з різними рівнями деталізації (mip-mapping) і з застосуванням трилинейной фільтрації (trilinear filtering), як панацеї від виникнення помилок (артефактів) при візуалізації. У статті також коротко розповідається про існуючий стан справ в індустрії комп'ютерної графіки з точки зору підтримки мип-маппінга і трилинейной фільтрації, а так само оцінюються деякі пропоновані альтернативні рішення.

Вступ

Застосовувана повсюдно в індустрії 3D графіки, технологія накладення текстур, використовується для візуалізації тривимірних сцен з високим ступенем деталізації і має відносно невисоку вартість для кінцевого користувача. Технологія полягає в проектуванні зображення на тривимірну поверхню, таким чином, забезпечується додаткова деталізація 3D об'єкта без ускладнення його геометрії. Втім, коли зображення використовується в якості текстури, що накладається на 3D примітив, проявляється безліч різноманітних помилок візуалізації, званих артефактами. Протягом декількох років було розроблено безліч різних технологій, які зменшують кількість подібних артефактів візуалізації, а найпоширеніша з використовуваних сьогодні технологій - це билинейная фільтрація (bilinear filtering).

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

Втім, існує цілий клас артефактів візуалізації, що з'являються в результаті накладення текстур і відомий під назвою "depth aliasing" (Депт-алиасинг, помилки визначення глибини сцени, інша назва Z-aliasing), від яких билинейная фільтрація не рятує і не може позбавити.

Трикутник формується шляхом накладення текстури зображення на тривимірну поверхню.

Помилки "depth aliasing" возникаю в результаті того факту, що об'єкти більш віддалені від точки спостереження, виглядають більш маленькими на екрані. Якщо об'єкт рухається і віддаляється від точки спостереження, текстури зображення, накладене на зменшився в розмірах об'єкт стає все більш і більш стислим. В кінцевому рахунку, текстури зображення, накладене на об'єкт, стає настільки стислим, що з'являються помилки візуалізації. Ці помилки візуалізації особливо небажані в анімації, де такі артефакти під час руху стають причиною мерехтіння і ефекту повільного руху в тій частині зображення, яка повинна бути нерухомою і стабільною.

В якості ілюстрації до описаного ефекту можуть бути такі прямокутники з білінійну текстуруванням:

У даній статті пояснюється, чому на певному рівні візуалізації з'являються помилки або артефакти, викликані процесом накладення текстур на тривимірні об'єкти, а так же представляються концепції використання текстур з різними рівнями деталізації (mip-mapping) і з застосуванням трилинейной фільтрації (trilinear filtering), як панацеї від виникнення помилок (артефактів) при візуалізації

Мал. 2A (Лівий зверху): Прямокутник складається з двох трикутників, текстурованих зображенням шахової дошки. Зверніть увагу на те, як ширина і висота кожного квадрата зменшується при русі від найближчої сторони прямокутника, яка ближче до точки спостереження, до далекої сторони прямокутника.

Мал. 2B (Правий зверху): На збільшеному зображенні, відразу навпроти сірої стрілки, можна помітити, що складається з декількох пікселів сторона квадратів по вертикалі (висоти) зменшуються і в результаті складаються всього лише з одного або двох пікселів. Як тільки вертикальна сторона квадрата (висота) скорочується по довжині до двох пікселів, навпаки блакитний стрілки, зверніть увагу на появу артефактів "depth-aliasing" виражаються в тому, що кілька квадратів зливаються в один.


Mip-mapping і обчислення ступеня деталізації

Для уникнення помилок "depth aliasing" і імітації того факту, що об'єкти на відстані виглядають менш деталізованими, ніж ті, що знаходяться ближче до точки спостереження, використовується техніка, відома як mip-mapping. Якщо говорити коротко, то mip-mapping - накладення текстур, що мають різну ступінь або рівень деталізації, коли в залежності від відстані до точки спостереження вибирається текстура з необхідною деталізацією.

Mip-текстура (mip-map) складається з набору заздалегідь відфільтрованих і масштабування зображень. У зображенні, пов'язаному з рівнем mip-map, піксель представляється у вигляді середнього чотирьох пікселів з попереднього рівня з більш високою роздільною здатністю. Звідси, зображення пов'язане з кожним рівнем mip-текстури в чотири рази менше за розміром попереднього mip-map рівня.

Зображення, пов'язані з кожним mip-map рівнем хвилеподібною текстури показані нижче.

Ступінь або рівень деталізації - Level of Detail або просто LOD, використовуються для визначення, який mip-map рівень (або який ступінь деталізації) слід вибрати для накладення текстури на об'єкт. LOD повинен відповідати числу текселей накладаються на піксель (тобто яка кількість елементів текстури має бути накладено на елемент виводиться на екран зображення). Наприклад, якщо текстурирование відбувається зі співвідношенням близьким до 1: 1, то LOD буде 0, а значить і буде використовуватися mip-map рівень з найвищою роздільною здатністю. Якщо 4 текселя накладаються на один піксель, то LOD буде 1 і буде використовуватися наступний mip рівень з меншим дозволом. Зазвичай, при видаленні від точки спостереження, об'єкт, що заслуговує на найбільшу увагу має більш високе значення LOD.

Нижче представлений прямокутник, який використовували в першому прикладі, тільки тепер накладення текстур вироблено з використанням техніки mip-mapping. Зверніть увагу, що помилки візуалізації "depth aliasing" зникли і на відстані боку прямокутника виглядають розмитими, як і повинно бути.

Зверніть увагу, що помилки візуалізації depth aliasing зникли і на відстані боку прямокутника виглядають розмитими, як і повинно бути

Мал. 4A (Лівий зверху): Прямокутник з першого прикладу. Зверніть увагу відсутність помилок "depth aliasing".

Мал. 4B (Правий зверху): При збільшенні віддаленій частині прямокутника, добре помітна розмитість.

Якщо для кожного пікселя в трикутнику обчислюється значення LOD для визначення того, яка mip-текстура має потрібний рівень фільтрації, то в результаті запобігає появі помилок візуалізації і зайвої розмитості. LOD повинен обчислюватися для кожного пікселя в трикутнику з метою уникнення розривів по краях трикутників. Цей метод називається per-pixel mip-mapping (попіксельне mip-текстурування).

Якщо ж LOD обчислюється всього лише раз для всього трикутника, то наслідком використання цього значення для всіх пікселів трикутника стає поява дивного ефекту розтріскування, коли деякі трикутники, з яких складається анімований об'єкт, раптом раптово стають надмірно розмитими або з нерівностями. Цей дешевий, менш ефективний метод mip-текстурування відомий як "per-polygon mip-mapping" (тобто mip-текстурування по кожному полігону).

Проблеми Mip-текстурирования

У той час, як mip-текстурування вирішує проблему помилок "depth-aliasing", його використання може стати причиною появи інших артефактів. Для боротьби з цими артефактами використовуються різні техніки фільтрації. При видаленні об'єкта все далі від точки спостереження, відбувається перехід від низького mip-map рівня (відповідного зображенню з високою деталізацією) до високого mip-map рівню (відповідного зображенню з високим ступенем фільтрації і менш деталізовану). У момент знаходження об'єкта в перехідному стані від одного mip-map рівня до іншого, з'являється особливий тип помилок візуалізації, відомих під назвою "mip-banding" (мип-бендінг) - смугастість або слоеность, тобто явно помітні кордону переходу від одного mip-map рівня до іншого.

"Mip-banding" має місце, коли значення LOD округляється до цілого і тільки один відповідний рівень mip-текстури використовується для генерації пікселя. Після переходу LOD до більш високого рівня складається з трикутників, сусідні пікселі будуть генериться з різними mip рівнями і матимуть абсолютно різну кількість застосованих до них фільтрів. Результатом є поява лінії або декількох ліній проходять через трикутник в місцях, де відбувається раптовий перехід між mip рівнями. Це один з недоліків використання тільки білінійної або по-точкового mip-текстурування.

Ця проблема проілюстрована на картинках нижче. Зверніть увагу, що це той же прямокутник з попереднього прикладу, але тепер текстурований хвилеподібним зображенням з використанням mip-текстурування. Зверніть увагу, як виявляється "mip-banding" в місцях, позначених червоними стрілками. На збільшеному зображенні легко помітити, що ці помилки візуалізації проявляються якраз в тих місцях, де відбувається перехід від одного рівня деталізації до наступного.

На збільшеному зображенні легко помітити, що ці помилки візуалізації проявляються якраз в тих місцях, де відбувається перехід від одного рівня деталізації до наступного

Мал. 5A (лівий зверху): Прямокутна стрічка складається з двох трикутників, текстурованих хвилеподібним зображенням. Зверніть увагу на "mip-banding" артефакти, позначені червоними стрілками.

Мал. 5B (правий зверху): Збільшена частина зображення в місцях прояви помилок "mip-banding".

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

трилинейная фільтрація

Трилинейная фільтрація (trilinear filtering) являє собою техніку, яка видаляє артефакти "mip-banding", що виникають при використанні mip-текстурування. При трилинейной фільтрації для визначення кольору пікселя береться середнє значення кольору восьми текселей, по чотири з двох сусідніх текстур і в результаті семи операцій змішування визначається колір пікселя. При використанні трилинейной фільтрації можливий висновок на екран текстурованого об'єкта з плавно виконаними переходами від одного mip рівня до наступного, що досягається за рахунок визначення LOD шляхом інтерполяції двох сусідніх mip-map рівнів. Таким чином вирішуючи більшість проблем, пов'язаних з mip-текстуруванням і помилками через неправильний розрахунок глибини сцени ( "depth aliasing").

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

Мал. 6A (лівий зверху): Прямокутник текстурований хвилеподібним зображенням, виведений на екран з використанням mip-текстурування і трилинейной фільтрації.

Мал. 6B (правий зверху): Збільшимо отримане зображення; зверніть увагу на відсутність артефактів візуалізації.

Далі ви зможете подивитися на ще один приклад, який показує переваги від використання трилинейной фільтрації. Як джерело був узятий тестовий пакет від Ziff-Davis. У першому випадку трилинейная фільтрація не застосовувалася і неважко помітити "mip-banding" там, де жовта розмітка дороги досягає вигину шосе (див. Рис. Нижче). Зауважимо, що проблема постає більш гостро при анімаційному зображенні.

У другому випадку застосовувалася трилинейная фільтрація; неважко помітити, що жовта розмітка дороги поступово і плавно зникає в місці вигину шосе (див. рис. нижче). Клікнувши на ліве зображення ви зможете побачити збільшений проблемну ділянку. Зауважимо, що при анімації проблем із зображенням теж не буде.


Поточний стан справ в області виробництва графічних чіпсетів

З моменту появи, mip-текстурування стало широко поширеним стандартом в області тривимірної графіки. Графічні чіпсети, що підтримують mip-текстурування, сьогодні роблять більшість виробників. Однак, широке застосування добре реалізованої трилинейной фільтрації почалося тільки в чіпсетах, випущених на ринок в цьому році. Незважаючи на те, що деякі виробники заявляють про підтримку трилинейной фільтрації, найчастіше це реалізується за рахунок двопрохідні рендеринга - до речі дуже ефективного способу зниження значень fill rate майже в два рази, через те, що графічний чіпсет змушений обробляти кожен піксель двічі. Зауважимо, що виведення зображення в два прийоми означає, що при другому накладення текстури має відбуватися змішування з вже накладеної текстурою за перший прохід. На додаток до сказаного, варто зауважити, що в деяких чіпсетах, реалізаціях трилинейной фільтрації виконана так, що вона не використовується в комбінації з деякими іншими тривимірними функціями.

Інший спосіб, стосовно трилинейной фільтрації це розмиття (dither) змінної LOD так, що тільки один mip рівень використовується для відображення кожного пікселя. Не дивлячись на те, що до деякої міри це знижує проблему помилок "mip banding", цей спосіб має небажаний ефект, що виражається в появі потворно розмитих візерунків при використання деяких mip-текстур.

Для зниження вартості і складності апаратної частини, пов'язаної з коректною реалізацією трилинейной фільтрації і обчислень LOD для кожного пікселя, деякі виробники графічних чіпсетів пропонують використовувати дешеву альтернативу, відому під ім'ям "per polygon mip-mapping" (mip-текстурування кожного багатокутника). У цьому рішенні використовується одне значення LOD для всіх пікселенй в кожному полігоні (зазвичай в якості полігонів використовуються трикутники), що дозволяє позбутися від помилок "mip-banding" всередині полігону. Однак, це рішення не позбавляє від "mip-banding". Артефакти, замість прояву усередині кожного полігону, тепер виявляються на кордонах полігонів. Наслідком використання "per polygon mip-mapping" є поява дивного ефекту розтріскування, коли деякі полігони, з яких складається об'єкт, при анімації несподівано стають розпливчастими або ступінчастими.

Інша проблема при використанні "per-polygon mip-mapping" полягає в тому, що mip рівень деяких полігонів може відрізнятися від декількох рівнів всередині самого полігону. Абсолютно неможливо вибрати тільки один mip рівень для полігону, який би відразу позбавив від ефектів нерівностей (aliasing) для всіх пікселів всередині полігону без появи розпливчастості деяких інших пікселів. "Per-polygon mip-mapping" вимагає більше обчислень, але при цьому результат виходить далеким від ідеального, так як дана техніка не позбавляє від обох зазначених проблем.

Наступні нижче приклади ілюструють недоліки "per-polygon mip-mapping". Зображення "А" ілюструє ситуацію, коли mip-map рівень в трикутниках занадто високий і дуже багато деталей губляться в області прямокутної стрічки ближньої до точки спостереження. Зображення "В" ілюструє ситуацію, коли mip-map рівень в трикутниках нижче, ніж в попередньому прикладі, що має знизити розпливчастість і відновити деякі деталі, проте з'явився інший негативний ефект - "depth aliasing", який можна помітити на далекій від точки спостереження стороні прямокутної стрічки. На завершення, як компроміс, ви можете подивитися на два трикутника (які формують прямокутну стрічку), що мають різні mip-map рівні, на зображенні "С". Тепер присутній "mip-banding" артефакт, який має місце на кордоні двох трикутників. Більш того, на зображенні "С" проблеми помилки обчислення глибини сцени ( "depth-aliasing") і втрата деталей все ще цілком очевидні.

Більш того, на зображенні С проблеми помилки обчислення глибини сцени ( depth-aliasing) і втрата деталей все ще цілком очевидні

Мал. 7A (лівий верхній): Прямокутник текстурований зображенням шахової дошки під впливом "per-polygon mip-map" рівня фільтрації. "Per-polygon mip-map" рівень занадто високий і сталася втрата деталей на ближній стороні прямокутника.

Мал. 7B (правий верхній): Прямокутник текстурований зображенням шахової дошки під впливом "per-polygon mip-map" рівня фільтрації. В цьому випадку "per-polygon mip-map" рівень занадто низький і відразу з'являються помилки обчислення глибини сцени - "depth-aliasing".

Мал. 7C (нижній): Прямоуголнік текстурований зображенням шахової дошки під впливом "per-polygon mip-map" рівня фільтрації. В цьому випадку "per-polygon mip-map" рівень обраний компромісним між застосовувалися в прикладах "А" і "В" - а саме, один трикутник має високий mip-map рівень, в той час як інший трикутник має низький mip-map рівень . У цьому випадку проявляється "mip-banding" на кордоні між двома трикутниками. Більш того, все ще ясно помітне присутність "depth-aliasing" і втрата деталей.

У кращому випадку, техніка "per-polygon mip-mapping" являє собою низькоякісну заміну для попиксельного mip-текстурування. У гіршому випадку, наслідком застосування "per-polygon mip-mapping" є поява нового набору помилок візуалізації без позбавлення при цьому від проблем, властивих накладення текстур. Без апаратної реалізації підтримки обчислень LOD для кожного пікселя, не існує способу запобігти появі "mip banding" використовуючи трилинейную фільтрацію.

Однією з альтернатив трилинейной фільтрації є анізотропна фільтрація (anisotropic filtering). Анізотропна фільтрація являє собою просунуту техніку, наслідком застосування якої, при коректній реалізації, є поява лише кількох помилок візуалізації, в порівнянні з використанням трилинейной фільтрації. Анізотропна фільтрація може бути реалізована за допомогою використання вибірки по шаблонах (over-sampling або оверсемплінг), в якості яких можуть виступати тексель. Ідея в тому, що для накладення текстури на піксель використовується більше текселей, причому кількість використовуваних текселей залежить від застосовуваного алгоритму. Проте, застосування over-sampling серйозно впливає на продуктивність графічного чіпсета. Для прикладу, восьмикратний over-sampling (тобто коли для накладення текстури використовується вісім текселей) може знизити частоту зміни кадрів в додатку увосьмеро або більше, в порівнянні з тим, що було б без використання over-sampling. Як наслідок, поки не існує рішення придатного для використання анізотропної фільтрації в режимі реального часу. Тим не менш, цей тип фільтрації буде згодом використовуватися в додатках, таких, як наприклад інтерфейси GDI2000 і Chrome від Microsoft. Але, швидше за все, станеться це не раніше 2000, отож як поки немає додатків, які можуть використовувати переваги анізотропної фільтрації.

Висновок

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

В даний час підтримка трилинейной фільтрації стала стандартною функцією графічних чіпсетів, так як вона забезпечує виведення тривимірного зображення з високою якістю при наявності певної кількості артефактів візуалізації. Більш того, все більше і більше з'являється графічних чіпсетів, що реалізують трилинейную фільтрацію без шкоди загальної продуктивності, тобто показник fill rate не знижується. Загалом, очевидно, що графічні чіпсети, які підтримують трилинейную фільтрацію поряд з високою швидкістю заповнення пікселями текстур, забезпечуватимуть найвищу якість візуалізації тривимірної графіки в найближчому майбутньому.

Додаткову інформацію з даної теми можна прочитати тут и тут .

Допомога в підготовці матеріалу надали: John Brothers, Paul Crossley, Konstantine Iourcha, Roger Swanson і Kelly Morris