Згладжування в іграх: історія та реалізації

Будь-якій людині, яка грала в комп’ютерні ігри, найімовірніше знайомі «драбинки» на зображенні. Якою б реалістичною не здавалася графіка, ці спотворення заважають сприймати ігрову картинку як єдине ціле. Саме тому з початку появи 3D-ігор виробники відеокарт та ігрових рушіїв борються з ними за допомогою згладжування. Яким воно буває і як працює?

Зображення, що формується графічним рушієм комп’ютерної гри, відрізняється від картинки реального відеозапису не тільки рівнем реалістичності. У «сирому» вигляді 3D-картинка має велику кількість стиків полігонів різних кольорів, які гравець сприймає як «драбинки».

Із цим покликане боротися згладжування. Незважаючи на величезну кількість його видів, основний принцип роботи будь-якого згладжування, за винятком тих, що засновані на постобробці, простий: щоб прибрати спотворення, для кожної точки на підсумковій картинці прораховують кілька точок, які називаються семплами. Потім семпли об’єднуються і змішуються, утворюючи підсумковий колір цільової точки. Кількість семплів визначає рівень згладжування, яке завжди кратне двом — 2x, 4x, і так далі.

У процесі еволюції відеокарт і графіки в іграх способи згладжування теж еволюціонували і вдосконалювалися. Як же розвивалося згладжування в іграх з появи комп’ютерної 3D-графіки і донині?

Надлишкова вибірка (SSAA)

Надлишкова вибірка, або Super Sampling Anti-Aliasing (SSAA) , є найстарішим типом згладжування. Суть його роботи досить проста — картинка прораховується в більшій роздільній здатності, а потім примусово зменшується до роздільної здатності пристрою виведення.

Незважаючи на появу на сьогоднішній день великої кількості інших типів згладжувань, SSAA досі є найякіснішим методом, що усуває спотворення. Але при цьому і найвимогливішим — прорахунок картинки в більшій роздільній здатності кратно знижує продуктивність. Наприклад, для гри з роздільною здатністю 1920 x 1080 при SSAA 4x відеокарті потрібно прораховувати картинку розміром 3840 x 2160 точок. Це значно збільшує вимоги до її потужності та обсягу графічної пам’яті. SSAA 4x знижує продуктивність у 2 рази і більше, більш щадний SSAA 2x — приблизно в півтора рази.

У 90-х роках графічне обладнання було не особливо швидким, тому проблема продуктивності із застосуванням SSAA була досить гострою. У підсумку, масові ігри перейшли на інші типи згладжування. Але до кінця першого десятиліття нового століття AMD і NVIDIA відродили примусовий SSAA у драйверах. Для його застосування в потрібній грі необхідно примусово ввімкнути налаштування в драйвері і вибрати рівень згладжування. Такий спосіб працює в багатьох додатках, але бувають і рідкісні винятки: у деяких іграх він просто не вмикається, у деяких — приносить додаткові артефакти зображення.

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

До різновиду SSAA можна віднести й інші сучасні технології: Dynamic Super Resolution (DSR) від NVIDIA і Virtual Super Resolution (VSR) від AMD. Крім графіки з цими технологіями прораховується в підвищеній роздільній здатності і сам інтерфейс гри, що робить його дрібнішим. Також драйвером накладається розмиття на підсумкову картинку. Втрати продуктивності при цьому схожі.

Множинна вибірка (MSAA)

Тяжкість SSAA підштовхнула комп’ютерний світ до пошуку технології, яка буде згладжувати краї, але водночас не так сильно просаджувати продуктивність. Нею стала Multi Sampling Anti-Aliasing (MSAA) , або множинна вибірка.

Принцип MSAA чимось схожий на SSAA, але з однією важливою відмінністю. За SSAA в підвищеній роздільній здатності прораховується вся картинка. При MSAA ж спочатку аналізується буфер глибини, а потім підвищена кількість семплів накладається тільки в місцях, де видно стики ребер полігонів. Це призводить до значного підвищення продуктивності порівняно з аналогічною кількістю семплів SSAA. Якщо перший при пресеті 4x знижує продуктивність мінімум у кілька разів, то ввімкнення другого в такому ж режимі коштує в середньому лише близько третини всієї продуктивності.

Але є у MSAA і свої недоліки. Під час руху в кадрі можуть виникати невеликі брижі, для згладжування прозорих текстур він підходить погано. В іграх, чиї рушії покладаються на відкладений рендеринг, через особливості останнього реалізувати MSAA доволі складно і більш затратно для продуктивності. Тому найчастіше в таких проектах цей тип згладжування можна взагалі не виявити.

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

Вибірка зі зміщенням (Quincunx)

На початку 2000-х, з приходом в ігри DirectX 8 і шейдерів, компанія NVIDIA розробляє новий тип згладжування, який легший за класичний MSAA — Quincunx . Суть його роботи відрізняється від попередніх типів згладжування і ґрунтується на зміщенні: замість класичних семплів строго по сітці точок береться семпл, зміщений на половину точки вправо і вгору.

По суті, відеокарта прораховує тільки два семпли, як при MSAA 2x. Але через наявність зміщених точок кожному пікселю підсумкового зображення дістається вже п’ять семплів, і саме згладжування навіть перевершує MSAA 4x. Але є у такого способу один істотний недолік. Через те, що семпли беруться не тільки від цільової точки, а й від сусідніх, зображення втрачає чіткість і стає розмитим.

Після появи карт покоління DirectX 9 Quincunx застосовували в ігрових проєктах дедалі рідше і рідше, адже потужності карт стало достатньо на MSAA, з яким не доводилося йти на компроміси у вигляді розмитості. Трохи пізніше можна було зустріти новішу реалізацію Quincunx у вигляді QSAA 2x, яка являла собою комбінацію методу з SSAA 2x, але великого поширення і вона не набула.

Множинна крайова вибірка (CSAA, CFAA і EQAA)

З приходом карт покоління DirectX 10 і появою універсальних шейдерів, NVIDIA вирішує поліпшити стандартний мультісемплінг і дає світло новій технології — Coverage Sampling Anti-Aliasing, або CSAA . Він являє собою гібридний підхід, що поєднує усереднення результату MSAA з інформацією від сусідніх пікселів. За однакової з MSAA кількості вибірок, краї за CSAA згладжуються більше, а продуктивність погіршується лише незначно. Працює такий метод тільки на картах GeForce 8000 серії і вище.

CSAA можна зустріти в основному в проєктах 2008-2011 років, надалі ігророби технологію практично не використовували. Іноді зустрічається ще більш рідкісний варіант — QCSAA, який подвоює кількість вибірок порівняно зі звичайним варіантом. Недоліки у CSAA такі ж, як і у його «батька» MSAA. До того ж за надто великої кількості вибірок (а в QCSAA вона може досягати аж 64) продуктивність знижується досить сильно.

Приблизно в той самий час компанія AMD реалізувала згладжування, аналогічне CSAA, для карт Radeon. Воно отримало назву Custom Filter Anti-Aliasing (CFAA) . CFAA має чотири рівні якості, які відрізняються за принципом роботи. Найпростіший із них — Box. Це аналог MSAA без додаткових вибірок. Другий — Narrow-tent, дублює можливості CSAA. Третій, Wide-tent, є аналогом QCSAA з великою кількістю вибірок. Останній — Edge-detect, теж схожий на QCSAA, але використовує ще один прохід, який наприкінці додатково проходить тільки по гострих краях полігонів.

Переваги та недоліки CFAA аналогічні розробці конкурента. Нативно CFAA підтримується зовсім невеликою кількістю ігор кінця першого десятиліття, але примусово може бути форсована з драйвера для практично будь-якого проекту, який підтримує MSAA. У 2010 році AMD представлено ще один схожий варіант згладжування — Enhanced Quality Anti-Aliasing (EQAA) . Доопрацьований алгоритм повинен показувати кращий результат, зберігши колишню продуктивність.

Адаптивна вибірка (AAA і TrAA)

Оскільки жодне зі згладжувань, заснованих на множинній вибірці, не може впоратися з прозорими текстурами, у середині нульових обидві компанії додали в драйвери для відеокарт ще один метод згладжування. Він має гібридний підхід, який може впоратися зі згладжуванням прозорих текстур, але при цьому не такий важкий, як чистий SSAA. Це — Adaptive Anti-Aliasing (AAA) у AMD і Transparency Anti-Aliasing (TrAA) у NVIDIA.

Принцип роботи такого згладжування простий: беруться вибірки як SSAA, так і MSAA. При мінімальному для такого згладжування значенні 4x кожній з вибірок робиться по дві, при значенні 8x — комбінується 2x SSAA з 4x MSAA. Такий підхід досить витратний для продуктивності, але все ж легший за класичний SSAA 4x. Нативно в іграх таке налаштування практично ніколи не зустрічається, але форсувати з драйвера його можна для будь-якої гри з підтримкою MSAA.

Згладжування постобробкою (FXAA і MLAA)

У пошуках методу згладжування без втрат продуктивності виробники відеокарт прийшли до згладжування на основі постобробки готового зображення.

Першою такий спосіб наприкінці нульових запропонувала NVIDIA, назвавши його Fast approXimate Anti-Aliasing — FXAA . Його суть у тому, що спеціальний алгоритм шукає на вже відрендереній картинці краї об’єктів. Потім пікселі, що потрапили в ці зони, зсуваються на невелику відстань, щоб створити розмиття країв.

FXAA згладжує все зображення, незалежно від типів текстур. Але головний його недолік у тому, що він розмиває зображення, роблячи його не таким чітким. Хоча є і плюси — такий підхід працює на шейдерах і мінімально впливає на продуктивність. Навіть на старих відеокартах продуктивність з FXAA залишається практично такою ж, як і без нього.

Схожий підхід використовує згладжування Morphological Anti-Aliasing (MLAA) , спочатку розроблене Intel. У ньому для обчислень використовуються не шейдерні процесори відеокарти, а центральний процесор комп’ютера. Ця реалізація дає меншу розмитість зображення, але натомість має інший недолік — прозорі текстури вона не згладжує.

Субпіксельне згладжування (SMAA і CMAA)

Згладжування на основі постобробки — найшвидше, але через розмитість зображення підходить далеко не у всіх ситуаціях. Саме тому на початку другого десятиліття в ігрових проєктах з’явився подальший розвиток технологій FXAA і MLAA. Він отримав назву Subpixel Morphological Anti-Aliasing (SMAA) . До створення цього типу згладжування доклали руку розробники відомих ігор серії Crysis і оригінального Far Cry — компанія Crytek.

Ця технологія, як і множинна крайова вибірка, налічує кілька реалізацій. Найпростіша з них — SMAA 1x. Цей алгоритм був створений на основі MLAA, і в новій реалізації набагато менш агресивно працює з краями, практично не замилюючи підсумкове зображення.

Складніший і якісніший SMAA T2x на додачу до цієї техніки використовує тимчасову компоненту. SMAA S2x, що рідше зустрічається, замість тимчасової компоненти комбінує постобробку з MSAA 2x. Старший, але при цьому SMAA 4x, що досить рідко зустрічається в ігрових проектах, комбінує всі вищеописані способи, даючи змогу досягти максимальної якості. Однак, на відміну від молодших режимів, штраф продуктивності у нього найбільший. Дві базові реалізації SMAA — 1x і T2x — досить легкі та не сильно впливають на продуктивність, найчастіше забирається лише кілька відсотків. При цьому вони не милять картинку, а за якістю T2x не сильно поступається молодшим варіантам MSAA.

Завдяки комбінації методів SMAA 1x і FXAA з’явилося ще одне прогресивне згладжування — Conservative Morphological Anti-Aliasing (CSAA) . Поєднуючи переваги обох типів, воно милить зображення менше за FXAA, але водночас згладжує лінії краще за базовий SMAA 1x. Продуктивність при такому методі практично не страждає, але за поширеністю в іграх CMAA поступається старшому братові.

Тимчасове згладжування (TAA, TXAA, MFAA, TSSAA і DLAA)

У роки появи SMAA NVIDIA вже працювала над новим типом згладжування, і незабаром після виходу GeForce 600 серії представила його публіці. Воно отримало назву Temporal approXimate Anti-Aliasing (TXAA) . Реалізація від NVIDIA була розроблена для її власних карт GeForce. І хоча початок було започатковано саме TXAA, популярності набула схожа за принципом роботи технологія Temporal Anti-Aliasing (TAA) , яка працює на будь-яких відеокартах. Саме вона є найпоширенішим типом згладжування в сучасних ігрових проєктах на сьогоднішній день.

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

Такий підхід дає якісне зображення, особливо в статиці — десь на рівні гібридного підходу AAA, часто перевершуючи MSAA. А в русі, завдяки використовуваній інформації від минулих кадрів, не виникає мерехтіння, як під час використання MSAA і заснованих на ній технік. Але є у цього методу недоліки, невластиві іншим типам згладжувань. Перший — розмитість. На відміну від FXAA, який «милить» усе підряд, TAA часто перестарається з тонкими лініями і краями, внаслідок чого вони мають специфічний «товстий» і досить неприродний вигляд. Другий недолік — шлейфи об’єктів, які можуть виникнути при швидкому русі камери.

Незважаючи на це, штраф до продуктивності у TAA невеликий — трохи вищий за SMAA, на рівні або трохи нижчий за MSAA 2x. Саме тому TAA і його різновиди є основними типами згладжування в сучасних іграх. У деяких проєктах його навіть зроблено невідключуваним без можливості вибору альтернативного методу згладжування. До того ж, у міру доопрацювання алгоритмів, точність і якість такого згладжування можна поліпшити для кожної окремої гри, що було неможливо з класичними методами згладжування.

У 2015 році спеціально для карт лінійки GeForce 900 NVIDIA представила Multi Frame Anti-Aliasing (MFAA) . Він є комбінацією TAA з MSAA, будучи менш вимогливим порівняно з останнім. Широкого поширення метод не набув, обмежившись лише кількома ігровими проектами.

Крім вищеописаних методів, існує ще TSSAA — Temporal Super Sampling Anti-Aliasing , тобто комбінація можливостей TAA і SSAA. Він більш якісний, але при цьому і більш «важкий» для графічного обладнання. Нативно TSSAA можна знайти лише в кількох ігрових проєктах. Зараз розробники вважають за краще розділяти TAA і SSAA, представляючи останній як масштаб рендеру в налаштуваннях гри. Такий підхід більш гнучкий і дозволяє точніше підлаштовуватися під продуктивність конфігурації.

Нещодавно компанією NVIDIA був представлений ще один вид тимчасового згладжування — Deep Learning Anti-Aliasing (DLAA) . Він комбінує методи TAA з обчисленнями на тензорних ядрах, присутніх тільки в картах серії RTX.

Тимчасове згладжування на основі масштабування (DLSS і FSR 2.0)

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

Саме тому після появи карт серії RTX компанія NVIDIA представила технологію масштабування Deep Learning Super Sampling (DLSS), яка була покликана вбити двох зайців одночасно: і продуктивність підвищити, і про згладжування при цьому не забути. В основі методу лежить все те ж тимчасове масштабування, але з одним трюком. Якщо за звичайного TAA кожен кадр рендерується у вихідній роздільній здатності, то за активної DLSS роздільна здатність рендера менша за вихідну. Кілька кадрів зниженої роздільної здатності алгоритм склеює в один на основі все тих же векторів руху, утворюючи підсумкову картинку. За рахунок рендеру в меншій роздільній здатності піднімається продуктивність, за рахунок тимчасової компоненти — додається згладжування.

Для роботи DLSS використовує спеціальні тензорні ядра, що входять до складу відеокарт RTX. Перша версія DLSS, що побачила світ на початку 2019 року, вимагала попереднього навчання нейромережі на суперкомп’ютерах для кожної конкретної гри, а в процесі роботи постійно зіставляла картинку з еталонними прикладами, «вшитими» в гру. Це було досить незручно для розробників і ускладнювало впровадження алгоритму у велику кількість ігор. DLSS 2.0, датована 2020 роком, виправила цей недолік, навчивши нейромережу аналізувати картинку «на льоту». Впроваджувати другу версію технології теж стало легше, і незабаром її стали підтримувати багато великих ігрових рушіїв. Поточна версія DLSS підтримує чотири пресети якості, що відрізняються вхідною роздільною здатністю. Завдяки цьому можна гнучко регулювати роботу технології для досягнення потрібної продуктивності. Якість зображення в старших режимах досить близька до нативної картинки зі згладжуванням TAA.

Як і у випадку з тимчасовим згладжуванням, унікальною для власного заліза розробка NVIDIA була недовго. Уже цього року AMD випустила на ринок аналогічну відкриту технологію без прив’язки до певного «заліза» — Fidelity FX Super Resolution 2.0 (FSR 2.0) .

Перша версія FSR представляла масштабування зі схожим на FXAA алгоритмом згладжування. А ось друга, як і DLSS, є масштабуванням на основі тимчасового згладжування, тільки без залучення специфічних тензорних ядер — у варіанті AMD аналогічну роботу виконують шейдери. До того ж, впровадити її в ігрові проєкти за підтримки останніми TAA дуже просто, що в найближчому майбутньому явно посприяє масовому поширенню FSR 2.0.

Як показують тести, FSR 2.0 при однаковій вихідній роздільній здатності не поступається DLSS 2.0 ні в якості, ні в продуктивності. Як і конкурент, розробка AMD має чотири пресети, завдяки яким можна гнучко керувати роботою технології для досягнення компромісу між якістю і продуктивністю.

Підсумки

Згладжування в іграх пройшло довгий шлях, на всьому протязі якого зменшувався його вплив на продуктивність: SSAA могло просадити кількість кадрів у кілька разів, а сучасні технології масштабування DLSS і FSR, навпаки, можуть підвищити продуктивність.

З цієї причини раніше якісне згладжування було доступне тільки топовим відеокартам, а зараз його можна отримати і на бюджетних — іноді майже «безкоштовно», а іноді ще й на додачу до підвищеної продуктивності. Технології тимчасового згладжування витісняють минулі розробки, і в найближчому майбутньому їхня робота буде тільки вдосконалюватися, тішачи око гравців ще більш чіткою і згладженою картинкою без негативного впливу на продуктивність.