Екранне згладжування
Згла́джування (англ. anti-aliasing) — технологія, що використовується в обробці зображень з метою зробити межі кривих ліній більш гладкими, прибираючи «зубці», що виникають на краях об'єктів. Вперше згладжування було застосовано в 1972 році в Массачусетському технологічному інституті в групі Architecture Machine Group, яка пізніше стала основною частиною MIT Media Lab.
Основний принцип згладжування — використання можливостей пристрою виведення для показу відтінків кольору, яким намальована крива. У цьому випадку пікселі, сусідні з граничним пікселями зображення, беруть проміжне значення між кольором зображення і кольором фону, створюючи градієнт і розмиваючи межі.
Застосовується два варіанти згладжування:
- Загальне згладжування відмальовкою надмірно великого незгладженого зображення з подальшим зменшенням роздільної здатності.
- Спеціалізовані алгоритми згладжування, що працюють на зображеннях певного типу (наприклад, Алгоритм Ву для відмальовки відрізків).
Слід зауважити, що згладжування залежить від гамми монітору. Зокрема, середнє між 0,2 і 0,8 — це не обов'язково 0,5, а . Особливо це помітно на тонких візерунках і тексті. Тому згладжування найкращої якості виходить лише тоді, коли відома.
Примітка: згладжування впливає на частоту кадрів залежно від ПЗВ (пропускної здатності відеопам'яті) відеокарти.
Super-Sampling Anti-Aliasing — надмірна вибірка згладжування, також звана повноцінним або повноекранним згладжуванням, використовується для виправлення аліасингу «зубців» на повноекранних зображеннях. SSAA було доступно на ранніх відеокартах, аж до DirectX 7. У модельному ряді AMD HD6ХХХ вона включена як особливість (тільки для ігор на DirectX 9), також вона була включена до драйверів NVIDIA Fermi для всіх комп'ютерних ігор, починаючи з ігор на DirectX 9 і закінчуючи іграми на DirectX 11 з використанням будь-яких відеокарт NVIDIA, з підтримкою DirectX 10 та вище.
У результаті зображення з SSAA виглядає більш м'яким та реалістичним. Однак у фотографічних зображень із простим згладжуванням (наприклад, супер-семплінг, а потім усереднення) може погіршитися зовнішній вигляд деяких типів лінійних малюнків або діаграм (зображення виглядатиме розмито), особливо там, де лінії найбільш горизонтальні або вертикальні. У цих випадках може бути використаний хінтинг.
Повноекранне згладжування дозволяє усунути характерні «зубці» на межах полігонів. Однак слід враховувати, що повноекранне згладжування сильно навантажує відеокарту, що призводить до падіння частоти кадрів.
Якість згладжування обмежена пропускною здатністю відеопам'яті, тому відеокарта зі швидкою пам'яттю зможе прорахувати повноекранне згладжування з меншою шкодою для продуктивності, ніж слабка відеокарта. Згладжування можна включати у різних режимах. Наприклад, згладжування x4 дасть якісніше зображення, ніж згладжування x2, але значно знизить продуктивність. Згладжування SSAAx2 подвоює роздільну здатність, тоді як SSAAx4 його почетверяє.
Multi-Sample Anti-Aliasing — прийшовши на зміну SSAA, що працює тільки з геометрією, завдяки цьому дає схожий ефект згладжування з SSAA, але при меншому навантаженні.
Coverage Sampling Anti-Aliasing — продовження «еволюції» SSAA➞MSAA➞CSAA. Поліпшення досягнуто внаслідок того, що в буфер кадру передається ще й інформація про вибірку з сусіднього пікселя. Що в результаті допомагає розрахувати точніше згладжування. При однакових рівнях згладжування (x2, x4, x8...) CSAA і MSAA, якість завжди буде вищою у CSAA, а за навантаженням вони однакові.
Quality Coverage Sampling Anti-Aliasing — покращена версія CSAA, внаслідок використання вдвічі більшої кількості вибірок для аналізу.
Adaptive Anti-Aliasing — в MSAA є проблема при згладжуванні країв на прозорих об'єктах. Цей алгоритм покликаний усунути цю проблему. Є об'єднанням MSAA та SSAA. Цей вид рекомендується власникам потужних відеокарт. Використовується лише в AMD.
Transparency Anti-Aliasing — аналог AAA, від NVIDIA.
Custom Filter Anti-Aliasing — включає 4 фільтри: box, narrow-tent, wide-tent та edge-detect. Кожен фільтр це різний підхід до реалізації MSAA. Використовується лише в AMD.
- box: стандартний MSAA.
- narrow-tent: аналог CSAA.
- wide-tent: аналог QCSAA.
- edge-detect: при проході фільтра по обробленим зображенням, для певних ним пікселів, які визначаються як межі полігонів або різкі колірні переходи, використовується більш якісний метод згладжування з великою кількістю вибірок, а для решти пікселів з меншим.
Temporal approXimate Anti-Aliasing — аналог ТАА від NVIDIA, який використовує основу MSAA. У формулі розрахунку використовується час, дані пікселів, попередніх кадрів та дані сцени, що обробляється. Після чого відбувається усереднення за кольором. Це дозволяє позбутися мерехтіння та посмикування країв об'єктів у грі. Вдалині дає якісну картинку, проте трохи милить близькі об'єкти та навантаження майже як у MSAA, хоча якість при тих же значеннях краща. За словами розробника: TXAAx2 можна порівняти за якістю з MSAAx8, але за навантаженням можна порівняти з MSAAx2, а TXAAx4 вище за якістю ніж MSAAx8, але за навантаженням можна порівняти з MSAAx4. Відмінно підходить для згладжування динаміки.
Temporal Anti-Aliasing — загальний термін для різних тимчасових алгоритмів згладжування. Не обмежений конкретним виробником. Працює на основі шейдеру, який об'єднує два кадри з використанням векторів руху для визначення місця вибірки попереднього кадру.
Temporal Super-Sampling Anti-Aliasing — тимчасово-надмірна вибірка згладжування. Використовується для зменшення артефактів, як-от мерехтіння, «зубців» та «тремтіння» країв об'єктів, що виникають під час швидкого руху або зміни об'єктів на екрані.
Алгоритм складається з наступних кроків:
- 1-й крок, Просторове згладжування (Spatial Anti-Aliasing)
У цьому кроці кожен кадр розбивається на пікселі, і для кожного пікселя визначається його оточення. Це оточення складається з сусідніх пікселів, які будуть використані для обчислення їхнього внеску в підсумкове значення кольору поточного пікселя. Зазвичай використовуються методи згладжування, як-от надмірна вибірка або множинна вибірка, щоб врахувати внесок кожного пікселя в оточенні.
- 2-й крок, Обчислення часової історії (Temporal History)
У цьому кроці відбувається збір інформації про попередні кадри. Для кожного пікселя зберігаються значення кольору, обчислені на попередніх кадрах, а також їхні часові ваги. Цю інформацію використовують для врахування історії руху пікселя і запобігання появи артефактів.
- 3-й крок, Перерахунок кольорів (Color Recomputation)
На цьому кроці відбувається перерахунок кольорів пікселів з урахуванням просторового згладжування і часової історії. Кожен піксель обробляється з урахуванням його оточення і тимчасової «ваги», щоб отримати підсумкове значення кольору. У результаті відбувається згладжування країв об'єктів, зменшення «тремтіння» та «зубців».
- 4-й крок, Застосування фільтрації (Filtering)
Цей крок включає застосування фільтрації для додаткового згладжування й усунення артефактів, що залишилися. Фільтрація може включати різні методи, як-от фільтр Гауса або білінійна інтерполяція, щоб отримати більш «плавні» результати.
- 5-й крок, Інтерполяція руху (Motion Interpolation)
У деяких варіантах алгоритму застосовується інтерполяція руху. Це дає змогу точніше передбачати положення пікселів у наступних кадрах і додатково згладжувати рухомі об'єкти.
- 6-й крок, Виведення на екран
Після завершення всіх попередніх кроків підсумкове згладжене зображення виводиться на екран для спостереження користувачем.
Зверніть увагу, що описаний алгоритм є узагальненим підходом до TSSAA, існують різні варіації та модифікації цього алгоритму, які можуть використовуватися в конкретних реалізаціях і додатках комп'ютерної графіки.
Fast approXimate Anti-Aliasing — алгоритм від NVIDIA, є однопрохідним піксельним шейдером, який обраховує результуючий кадр на етапі постобробки. Є більш продуктивним рішенням порівняно з традиційним MSAA, що дається взнак на точності та якості зображення.
Morphological Anti-Aliasing — аналог FXAA від Intel. Шукає «зубчасті» межі на кожному кадрі, схожі на літери Z, L або U, та змішує кольори сусідніх пікселів, що входять до кожної такої частини. Алгоритм переведено на використання процесора, а не відеокарти. Звідси його можна рекомендувати власникам слабких відеокарт із більш-менш продуктивним процесором. Через складніший алгоритм зображення виходить більш якісним, ніж у FXAA. Є реалізація AMD, але технічно може використовувати і NVIDIA. Має проблему: згладжування не працює на прозорих текстурах. Тому на додачу цієї постобробки потрібно підключати ще й TrAA або AAA для покращення зображення. Час обробки займає 0,9 мс. Також є алгоритми MLAA реалізовані на відеокартах.
Directionally Localized Anti-Aliasing — аналог MLAA, але з кращою стабільністю за часом кадру. Не від Intel.
Multiframe Sampled Anti-Aliasing — алгоритм від NVIDIA, ексклюзивний для відеокарт покоління Maxwell. Завдяки чергуванню позицій вибірок, MFAAx4 так само впливає на продуктивність як і MSAAx2, проте забезпечує якість зображення на рівні MSAAx4.
Subpixel Reconstruction Anti-Aliasing — двопрохідний алгоритм від NVIDIA. Дуже схожий з MLAA, але працює з буферами глибини та мапами нормалей, через що краще визначає межі згладжування та затінені краї. Час виконання загалом дуже низький, основний час в алгоритмі йде на обробку затінювання. На виході можуть бути артефакти. Для порівняння, на згладжування зображення з роздільною здатністю 1280x720 (HDV 720p) методом SSAA йде близько 5...10 мс, а SRAA 1,8 мс.
Subpixel Morphological Anti-Aliasing — комбінація з MSAA, SSAA та MLAA. Взагалі, це покращений MLAA з додаванням локального контрасту, пошуком патернів та використанням більшої кількості вибірок. Іноді може додаватись ще й тимчасова надлишкова вибірка. Ресурсів споживає більше ніж MLAA, але використовує при цьому відеокарту, а не процесор.
Можна зустріти різновиди:
- SMAAx1: класичний алгоритм SMAA, що включає точний пошук відстаней, робота з локальним контрастом для визначення країв, геометричних об'єктів та пошук діагональних ліній. Час обробки займає 1,02 мс.
- SMAATx2: SMAA x1 + алгоритми з TSSAA. Час обробки займає: 1,32 мс.
- SMAASx2: SMAA x1 + алгоритми з MSAA. Час обробки займає: 2,04 мс.
- SMAAx4: SMAA x1 + алгоритми з SSAA, MSAA, TSSAA та TMSAA. Час обробки займає: 2,34 мс.
Conservative Morphological Anti-Aliasing — комбінація з FXAA та SMAAx1. Ідеально підходить для слабких та середніх відеокарт. На відміну від FXAA, відбувається розрахунок обробки ліній та країв довжиною до 64 пікселів. Використовується алгоритм з обробкою лише симетричних розривів кольорів, щоб уникнути непотрібного розмиття. Відмінність від SMAAx1 відбувається за рахунок менш повного згладжування об'єктів, тому що обробляється менше типів фігур і має підвищену тимчасову стабільність, тобто менше мерехтіння об'єктів.
Dynamic Super Resolution — алгоритм від NVIDIA, обробляє зображення у високій роздільній здатності (до формату 4K), після чого зображення масштабується до роздільної здатності дисплея. Це дозволяє підвищити якість зображення, але продуктивність у такому режимі знижується, тому що обробка відбувається у вищій роздільній здатності.
Virtual Super Resolution — аналог DSR від AMD.
Hybrid-Sampling Anti-Aliasing — комбінація з SSAA та MSAA, від NVIDIA.
FidelityFX Super Resolution — технологія від AMD, яка за допомогою відеокарти виконує рендеринг в нижчій роздільній здатності, а потім використовує алгоритм підвищення роздільної здатності, щоб забезпечити більший фреймрейт. Компроміс між тим, скільки додаткових кадрів у секунду ви отримаєте та як сильно постраждає якість зображення, залежить від вас, оскільки ви можете вибирати між різними налаштуваннями (Ultra quality (Ультра якість), Quality (Якість), Balance (Баланс) та Performance (Продуктивність)). Режим «Продуктивність» забезпечує максимальний приріст частоти кадрів при найбільшому впливі на якість зображення, тоді як «Ультра якість» забезпечує найменший приріст частоти кадрів, але при цьому найменше впливає на якість зображення.
Покращена версія технології від AMD, що використовує тимчасову складову у вигляді кольору, глибини і векторів руху, які враховуються у алгоритмі рендеринга для поліпшення якості масштабування.
До розробки TAA, MSAA була найпоширенішою технікою згладжування. MSAA робить вибірку кожного пікселю кілька разів у різних місцях кадру й усереднює їх для отримання остаточного значення пікселя. На противагу цьому, TAA робить вибірку кожного пікселя лише один раз за кадр, але робить вибірку пікселів у різних місцях, у різних кадрах. Це робить TAA швидшим за MSAA. У частинах зображення без руху TAA ефективніше обчислює ніж MSAA на декількох кадрах і досягає тієї ж якості, що і MSAA, але з меншими обчислювальними витратами.
TAA і FXAA роблять вибірку кожного пікселя лише один раз за кадр, але FXAA не враховує пікселі, обрані в попередніх кадрах, тому FXAA є простішим і швидшим, але не може досягти такої ж якості зображення, як TAA або MSAA.
- Данило Гридасов. Під мікроскопом. GeForce CSAA vs. Radeon CFAA. [Архівовано 2 лютого 2009 у Wayback Machine.] i3D-Quality. iXBT (23 жовтня 2008).
- Kristof Beets, Dave Barron. Аналіз методів згладжування на основі super-sampling. [Архівовано 20 березня 2012 у Wayback Machine.] iXBT (7 червня 2000).
- Technical Report CSAA [Архівовано 19 жовтня 2021 у Wayback Machine.] (30 жовтня 2006).