Як працює апаратна tessellation?


34

Я просто хотів би, щоб хтось відносно чітко пояснив, як працює апаратна tessellation, вважаючи це новим словом із DX11.

Спасибі.

Відповіді:


42

Я дам вам "просту" версію і дозволю, щоб хтось інший заповнив вас у деталях, якщо вас цікавить :).

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

Інший спосіб - поєднати просту геометрію, щоб наблизити форму, яку ми хочемо зобразити. Ми робимо це за допомогою процесу, який називається tessellation . Ми можемо розширити циліндр, розбивши його на більш примітивні форми: два кола і ряд довгих прямокутників, які обмотуються навколо зовнішнього краю. Кола можна додатково розбити на безліч крихітних трикутників, як і прямокутники по краю. Кінцевим результатом є модель, що складається лише з трикутників:

Зображення трикутного циліндра

Або для тору:

Зображення трикутного тору

Хороша новина полягає в тому, що відео апаратне забезпечення оптимізоване для обробки такого роду геометрії. Сьогоднішні графічні процесори не мають труднощів з вимиканням тонн і тонн трикутників щосекунди. Однак є очевидна проблема: ми намагаємося зобразити вигнуті поверхні за допомогою фігур, які мають плоскі краї. Для того , щоб наш циліндр на зовнішній вигляд , як циліндр (на відміну від куба), ми хочемо , щоб розбити його на багатомаленьких трикутників. Ну скільки ми хочемо? Це залежить. Яке обладнання буде використано для візуалізації сцени? Швидше апаратне забезпечення може відображати трикутники швидше, ніж повільніше обладнання, створюючи більш високу швидкість кадрів. Є й інші фактори, які слід враховувати, наприклад, скільки інших предметів буде присутній на сцені, і наскільки вони будуть складними? В іграх, як правило, багато предметів у даній сцені. Більше того, об’єкти можуть подорожувати різними сценами, кожна з різним рівнем візуальної складності. Важко зрозуміти рівень деталізації, який слід використовувати, коли ми використовуємо свої моделі.

Ще одна проблема полягає в геометричній складності: тоді як визначення циліндра на основі кривої дуже просте (радіус і довжина), тессельоване визначення, ймовірно, поєднує сотні трикутників, кожен з яких потрібно визначити незалежно. Отже, наш модельний файл буде значно, значно більшим. Скажімо, у нас є математично визначена модель чогось складного, як людина. Наш модельний файл може бути розміром лише 24 кбіт. Що ж, як тільки ця модель буде tessellated, отриманий файл може становити 24 Мб (24 000 кбіт). Це зовсім різниця.

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

  1. Розмір 3D-вмісту в грі різко зменшується (потрібно менше дисків або менших завантажень і менше місця на жорсткому диску).

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

Так це суть цього. Це, мабуть, не на 100% точно, так як я не 3D-програміст, але це повинно дати вам краще уявлення про те, про що йдеться у суєті :).

Ура,
Майк


Ух ... геніально! Найдовший "огляд", який я коли-небудь читав: P

6
Є ще одна річ, яка визначає необхідний рівень tessellation - розмір об'єкта на екрані. Тесселяція під час виконання дозволяє мати правильний рівень деталізації скрізь, не створюючи декількох версій кожного об'єкта.
Адам

Це трохи процесор важкий?
jcora

@Bane, ти мав на увазі інтенсивний GPU? Процесор міг би менше турбуватися.
Нейт Заугг

0

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


Інструменти та виробничі трубопроводи повинні бути переосмислені та відновлені (як я впевнений, ви знаєте краще, ніж більшість, @SamHocevar, тому цей коментар не спрямований на вас), і нове обладнання повинно поширюватися на значні відсотки.
Роб Крейг

@RobCraig Зауважте, що я просто зафіксував правопис у цьому коментарі; Я не автор оригіналу.
sam hocevar

@SamHocevar Yup, я подумав - все-таки дякую за уточнення!
Роб Крейг
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.