Как работает аппаратная тесселяция?

34

Я просто хотел бы, чтобы кто-то объяснил в относительно четких терминах, как работает аппаратная тесселяция, учитывая, что это новое модное слово в DX11.

Спасибо.

SD021
источник

Ответы:

42

Я дам вам «простую» версию и позволю кому-то еще сообщить вам подробности, если вам интересно :).

Есть в основном два способа моделирования 3D-объектов. Первая - та, которую вы не часто видите в играх, и она предполагает использование точных математически определенных кривых для определения формы объекта. Используя этот метод, уровень детализации (практически говоря) "бесконечен". Взять, к примеру, цилиндр. Цилиндр можно определить в очень простых математических терминах: все, что вам действительно нужно знать, это радиус на концах и длина цилиндра. С точки зрения геометрии эта информация - все, что нам нужно для визуализации цилиндра в 3D-сцене. Кроме того, мы можем легко масштабировать цилиндр, чтобы сделать его больше или меньше; все, что нам нужно сделать, это сохранить соотношение длины и радиуса. Мы можем использовать те же формулы для представления геометрии, но с разными параметрами. Мы можем представить тор («пончик» легко): нам просто нужно знать внутренний радиус и внешний радиус. Исходя из этого, мы можем вычислить диаметр (и, следовательно, радиус) тела пончика («пирога»), вычитая внутренний радиус из внешнего радиуса. Круглое тело наматывается вдоль дуги, определяемой внутренним радиусом. Этот тип трехмерного определения хорош, потому что он относительно прост (в результате получается небольшой файл модели), и нет существенного ограничения уровня детализации. Недостатком является то, что современное видеооборудование не предназначено для эффективной обработки этих типов моделей (если вообще). Круглое тело наматывается вдоль дуги, определяемой внутренним радиусом. Этот тип трехмерного определения хорош, потому что он относительно прост (в результате получается небольшой файл модели), и нет существенного ограничения уровня детализации. Недостатком является то, что современное видеооборудование не предназначено для эффективной обработки этих типов моделей (если вообще). Круглое тело наматывается вдоль дуги, определяемой внутренним радиусом. Этот тип трехмерного определения хорош, потому что он относительно прост (в результате получается небольшой файл модели), и нет существенного ограничения уровня детализации. Недостатком является то, что современное видеооборудование не предназначено для эффективной обработки этих типов моделей (если вообще).

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

Изображение триангулированного цилиндра

Или для тора:

Изображение триангулированного тора

Хорошей новостью является то, что видеооборудование оптимизировано для обработки такого рода геометрии. Сегодняшние графические процессоры без проблем набрасывают тонны и тонны треугольников каждую секунду. Однако есть очевидная проблема: мы пытаемся изобразить кривые поверхности, используя формы с плоскими краями. Для того , чтобы наш цилиндр на внешний вид , как цилиндр (в отличие от куба), мы хотим , чтобы разбить его на многомаленьких треугольников. Ну, а сколько мы хотим? Это зависит. Какое оборудование будет использовано для визуализации сцены? Более быстрое оборудование может рендерить треугольники быстрее, чем медленное, обеспечивая более высокую частоту кадров. Есть и другие факторы, которые следует учитывать, например, сколько других объектов будет присутствовать на сцене и насколько сложными они будут? В играх в данной сцене обычно много объектов. Кроме того, объекты могут проходить через разные сцены, каждая из которых имеет различный уровень визуальной сложности. Трудно определить уровень детализации, когда мы используем тесселяцию наших моделей.

Другая проблема связана с геометрической сложностью: тогда как основанное на кривой определение цилиндра очень просто (радиус и длина), тесселяционное определение, вероятно, объединяет сотни треугольников, каждый из которых должен быть определен независимо. Следовательно, наш тесселированный файл модели будет намного больше. Допустим, у нас есть математически определенная модель чего-то сложного, например, человека. Размер файла нашей модели может составлять всего 24 КБ. Что ж, после того, как эта модель будет рассортирована, результирующий файл может иметь размер 24 МБ (24 000 КБ). Это большая разница.

Аппаратная тесселяция использует преимущества геометрических шейдеров для выполнения аппаратной тесселяции в режиме реального времени (или почти в реальном времени). По сути, он предоставляет механизм для того, чтобы взять математически определенную трехмерную модель и преобразовать ее в тесселяционный формат, который видеокарта может эффективно визуализировать. Традиционно разработчики игр проводили тесселяцию в студии и поставляли тесселяционные модели вместе с игрой. Аппаратная тесселяция позволяет нам отложить этот процесс до тех пор, пока игра фактически не запустится на компьютере игрока. Это имеет ряд серьезных преимуществ:

  1. Размер трехмерного содержимого игры резко уменьшается (требуется меньше дисков или меньше загрузок, и требуется меньше места на жестком диске).

  2. Мы можем контролировать уровень детализации в режиме реального времени . Мы бежим на ультрасовременном звере игрового автомата? Если это так, мы можем тесселяции, используя очень высокий уровень детализации. Работаем ли мы на старом ноутбуке с интегрированной графикой? Нет проблем; мы можем просто снизить уровень детализации, чтобы повысить производительность.

Так что в этом суть. Это, вероятно, не на 100% точно, так как я не 3D-программист, но это должно дать вам лучшее представление о том, о чем вся эта суета :).

Ура,
Майк

Майк Штробель
источник
Вау ... великолепно! Самый длинный «обзор», который я когда-либо читал: P
6
Есть еще одна вещь, которая определяет требуемый уровень тесселяции - размер объекта на экране. Тесселяция во время выполнения позволяет вам везде иметь правильный уровень детализации, не создавая несколько версий каждого объекта.
Адам
Это немного тяжелый процессор?
Jcora
@Bane, ты имеешь в виду GPU интенсивно? Процессор может заботиться меньше.
Нейт Заугг
0

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

zemit
источник
Инструменты и производственные конвейеры необходимо переосмыслить и перестроить (как я уверен, вы знаете лучше, чем большинство, @SamHocevar, поэтому этот комментарий не нацелен на вас), и новое оборудование должно распространяться до значительного процента.
Роб Крейг
@RobCraig Обратите внимание, что я только что исправил орфографию в этом комментарии; Я не оригинальный автор.
Сэм Хоцевар
@SamHocevar Да, я понял - спасибо за разъяснение, хотя!
Роб Крейг