Що таке тесселяція в іграх

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

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

Відеокарти стають дедалі потужнішими з кожним роком, але нескінченно нарощувати кількість полігонів неможливо, тому що потрібні для них ресурси — геометрична продуктивність і канал шини — у будь-якого графічного прискорювача все ж обмежені. Саме тому потрібна була відносно проста техніка збільшення деталізації без надмірного навантаження на графічний процесор. Нею стала тесселяція.

2001: TruForm від ATI

На початку століття, ще до появи технік рельєфного текстурування, єдиним способом підвищити геометричну складність сцени було додавання в неї полігонів, що значно позначалося на продуктивності графічних процесорів того часу. Першу технологію, покликану підвищити деталізацію сцени без надмірного навантаження на ГП, у 2001 році впроваджує компанія ATI. Називається вона TruForm, і, по суті, є першою реалізацією тесселяції в комп’ютерних іграх.

Звичайний трикутник в поданні відеокарти складається з трьох вершин і трьох нормалей до них. Використовуючи інформацію від ігрового рушія, графічний процесор створює трикутники, з’єднуючи їхні вершини. Після цього ГП накладає освітлення і тіні за допомогою нормалей — вони показують, як світло має відбиватися від трикутника.

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

По суті, TruForm є власною для ATI реалізацією N-патчів, включеною до складу графічних API DirectX 8 і OpenGL. Проте, компанія першою серед виробників відеокарт доопрацювала блок трансформації та освітлення власного графічного процесора, дозволивши йому виконувати просту за сучасними мірками тесселяцію поверхонь.

Для якісної роботи без графічних артефактів TruForm вимагав, щоб потрібні полігональні моделі в сцені були явно зазначені для обробки і спочатку розроблялися з її урахуванням — інакше непотрібне «округлення» могло з’явитися і в об’єктів, які повинні бути плоскими.

Патчі з підтримкою технології отримали здебільшого тільки великі відомі проєкти, як-от: Half-Life, Counter-Strike, Rainbow Six, перша і друга частини Soldier of Fortune, трилогія Quake, Return to Castle Wolfenstein, перші три частини Unreal Tournament. Конкуруюча NVIDIA трохи пізніше запропонувала власну реалізацію N-патчів, не сумісну з ATI, але це рішення було поширено ще менше. Розробники ігор не поспішали витрачати сили на впровадження технології, позитивні зміни від якої побачили б тільки власники карт Radeon. У підсумку перспективна технологія була на кілька років забута.

2002: Displacement Mapping від Matrox

З розвитком технологій рельєфного текстурування, що поширилися після провалу TruForm, — спочатку Bump mapping, потім Normal mapping, і, нарешті, Parallax mapping, — стало можливим візуально додавати плоским поверхням об’єму та робити їх «горбистими» без безпосереднього додавання нової геометрії. Простоту використання в іграх доповнювало те, що технології цього типу працюють за допомогою піксельного шейдера, не вимагаючи інших спеціальних блоків у відеокарті. Однак реального збільшення полігонів у кадрі з такими техніками не відбувається, і збільшити деталізацію з їхньою допомогою можна далеко не для будь-якого об’єкта в сцені.

У 2002 році компанія Matrox Graphics, яка тоді ще була гравцем ринку дискретних відеокарт поряд з NVIDIA і ATI, представила нову технологію Displacement Mapping. На відміну від вищеописаних видів, Displacement Mapping використовує технологію N-патчів. Але не як TruForm, а по-іншому: плоска поверхня розбивається на безліч трикутників, а потім за допомогою заздалегідь заданої карти зсувів «витягується» в потрібних місцях згідно з нею, створюючи об’ємний об’єкт.

Деталізація об’єктів у демо-сценах, створених за допомогою Displacement Mapping, була чудовою для свого часу за скромного споживання ресурсів. Апаратною підтримкою технології володів випущений у 2002 році графічний прискорювач Matrox Parhelia-512. Однак до цього моменту компанія вже була в незавидному становищі — за чистою продуктивністю її відеокарти були повільнішими за конкурентів.

Чимала ціна, проблеми з драйверами і неповна відповідність Parhelia-512 стандартам DirectX 9.0 стали останніми краплями, що впали на камінь виробника графічного обладнання — від подальшого розроблення власних ГП компанія відмовилася. Незважаючи на те, що опис перспективної технології був у конкурентів, ніхто з них тоді не взявся за її власну реалізацію. Унаслідок цього Displacement Mapping так і не з’явився в ігровій графіці тих років.

2005: тесселяція в Xbox 360

Графічний процесор приставки Xbox 360 під кодовою назвою «Xenos» уперше отримав підтримку тесселяції в тому вигляді, в якому вона застосовується і в наші дні.

Розробку графічного процесора було доручено компанії ATI, яка на той час уже робила начерки архітектури своєї першої серії відеокарт з підтримкою DirectX10 і універсальними шейдерними процесорами — Radeon HD2000. З огляду на обмежену обчислювальну спроможність консольного чіпа, компанія розробила для нього апаратний блок тесселяції: адже крім насичення геометрії вже наявної сцени, грамотна тесселяція може використовуватися для відтворення геометрії певного рівня з меншої кількості вихідної. Для приставки ігри пишуться з урахуванням «заліза», тому можливості тесселятора були вельми доречними — на відміну від комп’ютерних проектів, де розробники не горіли бажанням оптимізувати проекти під одного з виробників графічних чіпів.

Графічна частина Xbox 360 вийшла досить успішною. У 2007 році ATI інтегрували схожий блок тесселяції і в десктопні відеокарти серії HD2000. Тесселятор у графічних процесорах лінійки програмований, і може використовувати, окрім N-патчів, й інші типи поверхонь: патчі Безьє, B-Spline, NURBs і Subdivision Surfaces. Це дає більше вибору розробникам ігор, для коректної роботи тесселяції необхідно було лише написати необхідний вершинний шейдер.

З таким блоком тесселяції можна було використовувати і Displacement Mapping. Але на практиці все виявилося не так вже й просто: розробники ігрових рушіїв не були зацікавлені у впровадженні технології в комп’ютерні ігри, тому що у графічних процесорів NVIDIA подібного блоку не було — історія повторилася. Подібний програмований тесселятор був і в наступних серіях карт серій Radeon HD3000 і HD4000, але в підсумку цей блок так і не був задіяний у реальних іграх, за винятком власних демок ATI.

2009: тесселяція як стандарт DirectX 11

Після успішного старту Xbox 360 компанія Microsoft стала замислюватися про впровадження підтримки тесселяції в стандарт графічного API DirectX. Підтримка тесселяції з’явилася в DirectX 11 у 2009 році, одночасно з виходом знаменитої ОС Windows 7.

Реалізація в старих картах Radeon не була сумісна з API Microsoft, тому в плані підтримки цієї технології вони залишилися не при справах. Але ATI вчасно поквапилася, і до виходу нової операційної системи випустила нову лінійку відеокарт серії HD5000 з оновленим тесселятором, повністю сумісним з DirectX 11. NVIDIA запустила лінійку сумісних відеокарт серії GTX400 у 2010 році. У 2012 році сумісність із новим API отримала вбудована графіка Intel.

Для зручності роботи технології в стандарт DirectX 11 були додані нові типи шейдерів: Hull і Domain. Тесселяція в новому API дає змогу використовувати ще ширший набір методів і алгоритмів, ніж у ранній реалізації ATI — підтримуються N-патчі, патчі Безьє, Displacement Mapping, Catmull-Clark Subdivison, адаптивна тесселяція із застосуванням LOD та інші методи.

У 2010 році аналогічна підтримка тесселяції з’явилася і в іншому графічному API — OpenGL 4.0. Природно, що підтримують технологію і сучасні «спадкоємці» цих графічних API: DirectX 12 і Vulkan.

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

Вплив на продуктивність

У перших графічних процесорів з підтримкою тесселяції ввімкнення останньої забирало досить багато продуктивності. Особливо цим страждали «піонери» серії Radeon HD5000 — перший блок тесселяції, сумісний з DirectX 11, був досить повільним і часто просаджував продуктивність у перших іграх з її підтримкою до некомфортних значень. Серія карт Radeon HD6000 отримала поліпшений блок тесселяції, але значний ривок у цьому плані зробила тільки наступна серія карт на новій графічній архітектурі AMD GCN — HD7000, що побачила світ у 2012 році.

У перших карт NVIDIA з підтримкою нової технології — GeForce GTX 400 і 500 серії на архітектурі Fermi — блок тесселяції був швидшим, ніж у конкуруючих лінійок Radeon. Але беручи до уваги ривок тесселятора в Radeon HD7000, для GTX 600 серії на новій графічній архітектурі Kepler теж був розроблений новий, більш продуктивний блок тесселяції. Починаючи з відеокарт цих поколінь, тесселяція перестала бути вкрай трудомістким завданням для продуктивних ГП обох компаній у більшості ігрових проєктів.

На сьогоднішній день тесселяція стала стандартною технікою для багатьох ігрових рушіїв, і в деяких іграх вона працює за замовчуванням без опції відключення. В інших же іграх така опція є, і її відключення може як не додавати продуктивності взагалі, так і помітно «бустити» FPS, особливо на бюджетних відеокартах. У чому ж підступ?

Річ у тім, що в різних іграх використовуються різні об’єкти для тесселяції. В одних обробляється більша кількість об’єктів, в інших — менша, у третіх — лише певні, наприклад, тільки колеса машин та інші круглі предмети. До того ж, і сама тесселяція буває різного рівня — від x2 до x64. Тобто один і той самий базовий трикутник може бути розбитий на більш дрібні від 2 до 64 разів, це значення задає рушій гри. В іграх 2010-х років нерідко зустрічалися налаштування рівня тесселяції, зараз же їх практично не зустріти — іноді це налаштування залежить від інших графічних опцій, але найчастіше управління ним відсутнє взагалі.

У сучасних проєктах тесселяція може як майже не впливати на продуктивність, так і забирати її частину. Але таких провалів кадрової частоти, як раніше, вона не спричиняє — одна з найбільш «важких», реалізація тесселяції на рушії 4A Engine у грі Metro: Exodus, знижує частоту кадрів на 15-25%, залежно від сцени. У більшості ігор і такого падіння від активації технології немає — в середньому, воно на рівні близько 5-10%, хоча для найбюджетніших карт може становити і більше.

Бенчмарки

Найвідомішим бенчмарком з підтримкою і явною візуалізацією тесселяції, безумовно, є Unigine Heaven. Він був презентований на виході Windows 7, і є першим графічним тестом з підтримкою API DirectX 11.

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

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

3DMark 11 і остання версія тесту 3DMark без цифрового префікса теж використовують тесселяцію. Але в режимі реального часу її параметри змінити не вийде — для цього потрібно зупинити тест і перейти в його розширені налаштування. До того ж, тести серії сфокусовані не тільки на тесселяції, тому в динаміці істотну різницю в зображенні з різними налаштуваннями буде помітити досить складно. Однак тести серії набагато краще і комплексніше оцінюють продуктивність сучасних відеокарт, ніж Unigine Heaven, який для актуальних моделей середнього класу досить легкий навіть на максимальних налаштуваннях графіки.

Приклади в іграх

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

Metro: Exodus. Тесселяцію можна ввімкнути або вимкнути, управління рівнями не передбачено. Отже, спочатку кадр без тесселяції, потім із тесселяцією:

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

Sniper Elite 3. Кадр спочатку з вимкненою, потім з увімкненою технологією.

Стають помітними більш гладкі краї автомобільних шин, бочки і особливо каміння під ногами — це тесселяція в справі. Але зверніть увагу на наступні скріншоти:

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

На відміну від минулих ігор, у Red Dead Redemption 2 є управління рівнем тесселяції. Щоправда, відключити її повністю не можна — доступне лише перемикання між низьким, середнім і високим рівнем. Згідно з описом опції в графічних налаштуваннях, тесселяція в грі застосовується лише для дерев, слідів на снігу, бруду і води.

І справді, негусто: під час гри не вдалося виявити відмінності між низьким і високим рівнем тесселяції, якщо не шукати спеціально описані в налаштуваннях об’єкти. Довелося так і вчинити, для початку подивимося на дерево за низького і високого рівня тесселяції:

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

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

Підсумки

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

За допомогою бенчмарка Unigine Heaven можна переконатися, наскільки сильно можна перетворити віртуальні світи завдяки тандему тесселяції з Displacement Mapping. Чому ж такої разючої різниці при активації технології навіть через 13 років після появи бенчмарка немає в сучасних іграх?

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

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