Открыть сервисСервис

Тесселяция в компьютерных играх

Тесселяция — это технология динамического разбиения трёхмерных поверхностей полигональной сетки на более мелкие примитивы, применяемая в компьютерной графике для увеличения детализации геометрии объектов без ручного моделирования. В компьютерных играх тесселяция позволяет динамически уточнять геометрию сцен и персонажей в зависимости от расстояния до камеры и доступных вычислительных ресурсов, что повышает реалистичность изображения при относительно скромных требованиях к объёму моделей в ассетах игры.

Принцип работы

Тесселяция реализуется на уровне графического конвейера (пайплайна) видеокарты и состоит из нескольких этапов:

  1. Халл-шейдер (Hull Shader / Tessellation Control Shader) — определяет, на сколько подчинённых примитивов нужно разбить каждый исходный патч (обычно квадрат или треугольник), в зависимости от расстояния до камеры, важности объекта и других параметров.
  2. Блок тесселяции (Tessellator) — аппаратная часть GPU, которая непосредственно генерирует новые вершины и грани, интерполируя их по заданным правилам.
  3. Домейн-шейдер (Domain Shader / Tessellation Evaluation Shader) — вычисляет итоговое положение новых вершин в пространстве сцены, применяя карты смещения (displacement maps), нормализации и другие эффекты.

Исходная грубая сетка (low-poly mesh) служит лишь каркасом, а финальная детализация вычисляется на лету. Благодаря этому художникам не нужно вручную создавать сверхдетальные модели: достаточно базовой геометрии и карты смещения, описывающей рельеф поверхности.

Типы тесселяции

Аппаратная тесселяция

Аппаратная поддержка появилась в графических API DirectX 11 (модуль Hull/Domain Shaders и стадия Tessellator, 2009 год) и OpenGL 4.0 (функции glPatchParameteri, 2010 год). На стороне NVIDIA тесселяция поддерживается архитектурами начиная с Fermi (GTX 400-серии, 2010 год), на стороне AMD — начиная с архитектуры GCN (2011 год). В DirectX 12 и Vulkan тесселяция реализована аналогично, но с большим контролем со стороны приложения.

Программная тесселяция

До появления аппаратной поддержки разработчики использовали геометрические шейдеры или CPU-подразбиение, что было заметно медленнее. Программная тесселяция применяется и сейчас в некоторых случаях — например, для создания специфических эффектов или на платформах без аппаратного блока.

Применение в играх

Тесселяция активно применяется для:

  • Рельефа местности — горы, скалы и камни получают реалистичный рельеф, который становится более чётким при приближении камеры. Классический пример — технология «DX11 Tessellated Terrain» в игре Crysis 2 (2011).
  • Камней и строительных поверхностей — кирпичная кладка, булыжники, кора деревьев выглядят объёмными без использования parallax-эффектов.
  • Волос и шерсти — тонкие пряди волос и шерсть животных генерируются как тонкие полоски геометрии поверх базовой головы персонажа (технология HairWorks у NVIDIA, TressFX у AMD).
  • Детализации персонажей — складки одежды, морщины, рельеф кожи.

Тесселяция и другие технологии

Тесселяция часто сочетается с другими методами повышения детализации:

ТехнологияПринципОтличие от тесселяции
Displacement mappingСмещение вершин по карте высотМожет работать и без тесселяции (в т.ч. в шейдерах)
Parallax occlusion mappingЭмуляция рельефа в пиксельном шейдереНе меняет геометрию, только освещение/текстуры
Nanite (Unreal Engine 5)Кластеризация микрополигоновПолностью заменяет тесселяцию, работает с произвольной детализацией
Virtual texturingПотоковая подгрузка текстурРаботает с текстурами, а не с геометрией

В движке Unreal Engine 5 технология Nanite считается преемником тесселяции: она позволяет импортировать модели с миллионами полигонов и автоматически подбирать уровень детализации для каждого кадра, что делает ручную тесселяцию избыточной для геометрии (хотя для карт смещения и динамического рельефа тесселяция по-прежнему актуальна).

Ограничения

  • Тесселяция увеличивает нагрузку на GPU, что критично на слабых видеокартах и в слабых консолях.
  • На мобильных устройствах аппаратная тесселяция почти не используется из-за ограничений по энергопотреблению и поддержке API.
  • Качество результата зависит от качества карт смещения и настроек художника.
  • На очень большом расстоянии тесселяция не даёт выигрыша и обычно отключается.

История внедрения

Первые массовые примеры использования тесселяции в играх появились в 2011–2012 годах: Crysis 2 (обновление DX11), Battlefield 3, Metro 2033. Технология стала частью маркетинга DirectX 11 и активно продвигалась NVIDIA и AMD. В дальнейшем тесселяция вошла в стандартный арсенал движков Unreal Engine 4, Unity (начиная с версии 2018), Frostbite и других.

Заметили ошибку или не согласны с информацией в статье? Напишите нам support@bfometr.ru