Я просто хотел бы, чтобы кто-то объяснил в относительно четких терминах, как работает аппаратная тесселяция, учитывая, что это новое модное слово в DX11.
Спасибо.
Я просто хотел бы, чтобы кто-то объяснил в относительно четких терминах, как работает аппаратная тесселяция, учитывая, что это новое модное слово в DX11.
Спасибо.
Я дам вам «простую» версию и позволю кому-то еще сообщить вам подробности, если вам интересно :).
Есть в основном два способа моделирования 3D-объектов. Первая - та, которую вы не часто видите в играх, и она предполагает использование точных математически определенных кривых для определения формы объекта. Используя этот метод, уровень детализации (практически говоря) "бесконечен". Взять, к примеру, цилиндр. Цилиндр можно определить в очень простых математических терминах: все, что вам действительно нужно знать, это радиус на концах и длина цилиндра. С точки зрения геометрии эта информация - все, что нам нужно для визуализации цилиндра в 3D-сцене. Кроме того, мы можем легко масштабировать цилиндр, чтобы сделать его больше или меньше; все, что нам нужно сделать, это сохранить соотношение длины и радиуса. Мы можем использовать те же формулы для представления геометрии, но с разными параметрами. Мы можем представить тор («пончик» легко): нам просто нужно знать внутренний радиус и внешний радиус. Исходя из этого, мы можем вычислить диаметр (и, следовательно, радиус) тела пончика («пирога»), вычитая внутренний радиус из внешнего радиуса. Круглое тело наматывается вдоль дуги, определяемой внутренним радиусом. Этот тип трехмерного определения хорош, потому что он относительно прост (в результате получается небольшой файл модели), и нет существенного ограничения уровня детализации. Недостатком является то, что современное видеооборудование не предназначено для эффективной обработки этих типов моделей (если вообще). Круглое тело наматывается вдоль дуги, определяемой внутренним радиусом. Этот тип трехмерного определения хорош, потому что он относительно прост (в результате получается небольшой файл модели), и нет существенного ограничения уровня детализации. Недостатком является то, что современное видеооборудование не предназначено для эффективной обработки этих типов моделей (если вообще). Круглое тело наматывается вдоль дуги, определяемой внутренним радиусом. Этот тип трехмерного определения хорош, потому что он относительно прост (в результате получается небольшой файл модели), и нет существенного ограничения уровня детализации. Недостатком является то, что современное видеооборудование не предназначено для эффективной обработки этих типов моделей (если вообще).
Другой способ - объединить простую геометрию, чтобы приблизить форму, которую мы хотим представить. Мы делаем это с помощью процесса, называемого тесселяцией . Мы могли бы создать мозаику цилиндра, разбив его на более примитивные формы: два круга и ряд длинных прямоугольников, которые обертывают вокруг внешнего края. Круги могут быть далее разбиты на множество крошечных треугольников, как и прямоугольники вдоль края. Конечным результатом является модель, состоящая только из треугольников:
Или для тора:
Хорошей новостью является то, что видеооборудование оптимизировано для обработки такого рода геометрии. Сегодняшние графические процессоры без проблем набрасывают тонны и тонны треугольников каждую секунду. Однако есть очевидная проблема: мы пытаемся изобразить кривые поверхности, используя формы с плоскими краями. Для того , чтобы наш цилиндр на внешний вид , как цилиндр (в отличие от куба), мы хотим , чтобы разбить его на многомаленьких треугольников. Ну, а сколько мы хотим? Это зависит. Какое оборудование будет использовано для визуализации сцены? Более быстрое оборудование может рендерить треугольники быстрее, чем медленное, обеспечивая более высокую частоту кадров. Есть и другие факторы, которые следует учитывать, например, сколько других объектов будет присутствовать на сцене и насколько сложными они будут? В играх в данной сцене обычно много объектов. Кроме того, объекты могут проходить через разные сцены, каждая из которых имеет различный уровень визуальной сложности. Трудно определить уровень детализации, когда мы используем тесселяцию наших моделей.
Другая проблема связана с геометрической сложностью: тогда как основанное на кривой определение цилиндра очень просто (радиус и длина), тесселяционное определение, вероятно, объединяет сотни треугольников, каждый из которых должен быть определен независимо. Следовательно, наш тесселированный файл модели будет намного больше. Допустим, у нас есть математически определенная модель чего-то сложного, например, человека. Размер файла нашей модели может составлять всего 24 КБ. Что ж, после того, как эта модель будет рассортирована, результирующий файл может иметь размер 24 МБ (24 000 КБ). Это большая разница.
Аппаратная тесселяция использует преимущества геометрических шейдеров для выполнения аппаратной тесселяции в режиме реального времени (или почти в реальном времени). По сути, он предоставляет механизм для того, чтобы взять математически определенную трехмерную модель и преобразовать ее в тесселяционный формат, который видеокарта может эффективно визуализировать. Традиционно разработчики игр проводили тесселяцию в студии и поставляли тесселяционные модели вместе с игрой. Аппаратная тесселяция позволяет нам отложить этот процесс до тех пор, пока игра фактически не запустится на компьютере игрока. Это имеет ряд серьезных преимуществ:
Размер трехмерного содержимого игры резко уменьшается (требуется меньше дисков или меньше загрузок, и требуется меньше места на жестком диске).
Мы можем контролировать уровень детализации в режиме реального времени . Мы бежим на ультрасовременном звере игрового автомата? Если это так, мы можем тесселяции, используя очень высокий уровень детализации. Работаем ли мы на старом ноутбуке с интегрированной графикой? Нет проблем; мы можем просто снизить уровень детализации, чтобы повысить производительность.
Так что в этом суть. Это, вероятно, не на 100% точно, так как я не 3D-программист, но это должно дать вам лучшее представление о том, о чем вся эта суета :).
Ура,
Майк
Жаль, что большинство разработчиков не используют тесселяцию сейчас или в ближайшем будущем. Все, что они используют сейчас для tess, - это смещение в основном плоских поверхностей в соответствии с его картой высот. Это также приводит к хорошему внешнему виду, но я все еще думаю, что это плохое использование намного более способной технологии.
источник